xref: /aosp_15_r20/external/webrtc/video/config/video_encoder_config.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 #include "video/config/video_encoder_config.h"
11 
12 #include <string>
13 
14 #include "rtc_base/checks.h"
15 #include "rtc_base/strings/string_builder.h"
16 
17 namespace webrtc {
VideoStream()18 VideoStream::VideoStream()
19     : width(0),
20       height(0),
21       max_framerate(-1),
22       min_bitrate_bps(-1),
23       target_bitrate_bps(-1),
24       max_bitrate_bps(-1),
25       scale_resolution_down_by(-1.),
26       max_qp(-1),
27       num_temporal_layers(absl::nullopt),
28       active(true) {}
29 VideoStream::VideoStream(const VideoStream& other) = default;
30 
31 VideoStream::~VideoStream() = default;
32 
ToString() const33 std::string VideoStream::ToString() const {
34   char buf[1024];
35   rtc::SimpleStringBuilder ss(buf);
36   ss << "{width: " << width;
37   ss << ", height: " << height;
38   ss << ", max_framerate: " << max_framerate;
39   ss << ", min_bitrate_bps:" << min_bitrate_bps;
40   ss << ", target_bitrate_bps:" << target_bitrate_bps;
41   ss << ", max_bitrate_bps:" << max_bitrate_bps;
42   ss << ", max_qp: " << max_qp;
43   ss << ", num_temporal_layers: " << num_temporal_layers.value_or(1);
44   ss << ", bitrate_priority: " << bitrate_priority.value_or(0);
45   ss << ", active: " << active;
46   ss << ", scale_down_by: " << scale_resolution_down_by;
47 
48   return ss.str();
49 }
50 
VideoEncoderConfig()51 VideoEncoderConfig::VideoEncoderConfig()
52     : codec_type(kVideoCodecGeneric),
53       video_format("Unset"),
54       content_type(ContentType::kRealtimeVideo),
55       frame_drop_enabled(false),
56       encoder_specific_settings(nullptr),
57       min_transmit_bitrate_bps(0),
58       max_bitrate_bps(0),
59       bitrate_priority(1.0),
60       number_of_streams(0),
61       legacy_conference_mode(false),
62       is_quality_scaling_allowed(false) {}
63 
64 VideoEncoderConfig::VideoEncoderConfig(VideoEncoderConfig&&) = default;
65 
66 VideoEncoderConfig::~VideoEncoderConfig() = default;
67 
ToString() const68 std::string VideoEncoderConfig::ToString() const {
69   char buf[1024];
70   rtc::SimpleStringBuilder ss(buf);
71   ss << "{codec_type: ";
72   ss << CodecTypeToPayloadString(codec_type);
73   ss << ", content_type: ";
74   switch (content_type) {
75     case ContentType::kRealtimeVideo:
76       ss << "kRealtimeVideo";
77       break;
78     case ContentType::kScreen:
79       ss << "kScreenshare";
80       break;
81   }
82   ss << ", frame_drop_enabled: " << frame_drop_enabled;
83   ss << ", encoder_specific_settings: ";
84   ss << (encoder_specific_settings != nullptr ? "(ptr)" : "NULL");
85 
86   ss << ", min_transmit_bitrate_bps: " << min_transmit_bitrate_bps;
87   ss << '}';
88   return ss.str();
89 }
90 
91 VideoEncoderConfig::VideoEncoderConfig(const VideoEncoderConfig&) = default;
92 
FillEncoderSpecificSettings(VideoCodec * codec) const93 void VideoEncoderConfig::EncoderSpecificSettings::FillEncoderSpecificSettings(
94     VideoCodec* codec) const {
95   if (codec->codecType == kVideoCodecVP8) {
96     FillVideoCodecVp8(codec->VP8());
97   } else if (codec->codecType == kVideoCodecVP9) {
98     FillVideoCodecVp9(codec->VP9());
99   } else {
100     RTC_DCHECK_NOTREACHED()
101         << "Encoder specifics set/used for unknown codec type.";
102   }
103 }
104 
FillVideoCodecVp8(VideoCodecVP8 * vp8_settings) const105 void VideoEncoderConfig::EncoderSpecificSettings::FillVideoCodecVp8(
106     VideoCodecVP8* vp8_settings) const {
107   RTC_DCHECK_NOTREACHED();
108 }
109 
FillVideoCodecVp9(VideoCodecVP9 * vp9_settings) const110 void VideoEncoderConfig::EncoderSpecificSettings::FillVideoCodecVp9(
111     VideoCodecVP9* vp9_settings) const {
112   RTC_DCHECK_NOTREACHED();
113 }
114 
Vp8EncoderSpecificSettings(const VideoCodecVP8 & specifics)115 VideoEncoderConfig::Vp8EncoderSpecificSettings::Vp8EncoderSpecificSettings(
116     const VideoCodecVP8& specifics)
117     : specifics_(specifics) {}
118 
FillVideoCodecVp8(VideoCodecVP8 * vp8_settings) const119 void VideoEncoderConfig::Vp8EncoderSpecificSettings::FillVideoCodecVp8(
120     VideoCodecVP8* vp8_settings) const {
121   *vp8_settings = specifics_;
122 }
123 
Vp9EncoderSpecificSettings(const VideoCodecVP9 & specifics)124 VideoEncoderConfig::Vp9EncoderSpecificSettings::Vp9EncoderSpecificSettings(
125     const VideoCodecVP9& specifics)
126     : specifics_(specifics) {}
127 
FillVideoCodecVp9(VideoCodecVP9 * vp9_settings) const128 void VideoEncoderConfig::Vp9EncoderSpecificSettings::FillVideoCodecVp9(
129     VideoCodecVP9* vp9_settings) const {
130   *vp9_settings = specifics_;
131 }
132 
133 }  // namespace webrtc
134