OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 // TODO(pbos): Move Config from common.h to here. | 11 // TODO(pbos): Move Config from common.h to here. |
12 | 12 |
13 #ifndef WEBRTC_CONFIG_H_ | 13 #ifndef WEBRTC_CONFIG_H_ |
14 #define WEBRTC_CONFIG_H_ | 14 #define WEBRTC_CONFIG_H_ |
15 | 15 |
16 #include <string> | 16 #include <string> |
17 #include <vector> | 17 #include <vector> |
18 | 18 |
19 #include "webrtc/base/optional.h" | 19 #include "webrtc/base/optional.h" |
| 20 #include "webrtc/base/refcount.h" |
| 21 #include "webrtc/base/scoped_ref_ptr.h" |
20 #include "webrtc/common_types.h" | 22 #include "webrtc/common_types.h" |
21 #include "webrtc/typedefs.h" | 23 #include "webrtc/typedefs.h" |
22 | 24 |
23 namespace webrtc { | 25 namespace webrtc { |
24 | 26 |
25 // Settings for NACK, see RFC 4585 for details. | 27 // Settings for NACK, see RFC 4585 for details. |
26 struct NackConfig { | 28 struct NackConfig { |
27 NackConfig() : rtp_history_ms(0) {} | 29 NackConfig() : rtp_history_ms(0) {} |
28 std::string ToString() const; | 30 std::string ToString() const; |
29 // Send side: the time RTP packets are stored for retransmissions. | 31 // Send side: the time RTP packets are stored for retransmissions. |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 std::vector<int> temporal_layer_thresholds_bps; | 125 std::vector<int> temporal_layer_thresholds_bps; |
124 }; | 126 }; |
125 | 127 |
126 struct VideoEncoderConfig { | 128 struct VideoEncoderConfig { |
127 public: | 129 public: |
128 enum class ContentType { | 130 enum class ContentType { |
129 kRealtimeVideo, | 131 kRealtimeVideo, |
130 kScreen, | 132 kScreen, |
131 }; | 133 }; |
132 | 134 |
| 135 class VideoStreamFactoryInterface : public rtc::RefCountInterface { |
| 136 public: |
| 137 // An implementation should return a std::vector<VideoStream> with the |
| 138 // wanted VideoStream settings for the given video resolution. |
| 139 // The size of the vector may not be larger than |
| 140 // |encoder_config.number_of_streams|. |
| 141 virtual std::vector<VideoStream> CreateEncoderStreams( |
| 142 int width, |
| 143 int height, |
| 144 const VideoEncoderConfig& encoder_config) = 0; |
| 145 |
| 146 protected: |
| 147 virtual ~VideoStreamFactoryInterface() {} |
| 148 }; |
| 149 |
133 VideoEncoderConfig& operator=(VideoEncoderConfig&&) = default; | 150 VideoEncoderConfig& operator=(VideoEncoderConfig&&) = default; |
134 VideoEncoderConfig& operator=(const VideoEncoderConfig&) = delete; | 151 VideoEncoderConfig& operator=(const VideoEncoderConfig&) = delete; |
135 | 152 |
136 // Mostly used by tests. Avoid creating copies if you can. | 153 // Mostly used by tests. Avoid creating copies if you can. |
137 VideoEncoderConfig Copy() const { return VideoEncoderConfig(*this); } | 154 VideoEncoderConfig Copy() const { return VideoEncoderConfig(*this); } |
138 | 155 |
139 VideoEncoderConfig(); | 156 VideoEncoderConfig(); |
140 VideoEncoderConfig(VideoEncoderConfig&&) = default; | 157 VideoEncoderConfig(VideoEncoderConfig&&) = default; |
141 ~VideoEncoderConfig(); | 158 ~VideoEncoderConfig(); |
142 std::string ToString() const; | 159 std::string ToString() const; |
143 | 160 |
144 std::vector<VideoStream> streams; | 161 rtc::scoped_refptr<VideoStreamFactoryInterface> encoder_stream_factory; |
145 std::vector<SpatialLayer> spatial_layers; | 162 std::vector<SpatialLayer> spatial_layers; |
146 ContentType content_type; | 163 ContentType content_type; |
147 void* encoder_specific_settings; | 164 void* encoder_specific_settings; |
148 | 165 |
149 // Padding will be used up to this bitrate regardless of the bitrate produced | 166 // Padding will be used up to this bitrate regardless of the bitrate produced |
150 // by the encoder. Padding above what's actually produced by the encoder helps | 167 // by the encoder. Padding above what's actually produced by the encoder helps |
151 // maintaining a higher bitrate estimate. Padding will however not be sent | 168 // maintaining a higher bitrate estimate. Padding will however not be sent |
152 // unless the estimated bandwidth indicates that the link can handle it. | 169 // unless the estimated bandwidth indicates that the link can handle it. |
153 int min_transmit_bitrate_bps; | 170 int min_transmit_bitrate_bps; |
154 bool expect_encode_from_texture; | 171 int max_bitrate_bps; |
| 172 |
| 173 // Max number of encoded VideoStreams to produce. |
| 174 size_t number_of_streams; |
155 | 175 |
156 private: | 176 private: |
157 // Access to the copy constructor is private to force use of the Copy() | 177 // Access to the copy constructor is private to force use of the Copy() |
158 // method for those exceptional cases where we do use it. | 178 // method for those exceptional cases where we do use it. |
159 VideoEncoderConfig(const VideoEncoderConfig&) = default; | 179 VideoEncoderConfig(const VideoEncoderConfig&) = default; |
160 }; | 180 }; |
161 | 181 |
162 struct VideoDecoderH264Settings { | 182 struct VideoDecoderH264Settings { |
163 std::string sprop_parameter_sets; | 183 std::string sprop_parameter_sets; |
164 }; | 184 }; |
165 | 185 |
166 class DecoderSpecificSettings { | 186 class DecoderSpecificSettings { |
167 public: | 187 public: |
168 virtual ~DecoderSpecificSettings() {} | 188 virtual ~DecoderSpecificSettings() {} |
169 rtc::Optional<VideoDecoderH264Settings> h264_extra_settings; | 189 rtc::Optional<VideoDecoderH264Settings> h264_extra_settings; |
170 }; | 190 }; |
171 | 191 |
172 } // namespace webrtc | 192 } // namespace webrtc |
173 | 193 |
174 #endif // WEBRTC_CONFIG_H_ | 194 #endif // WEBRTC_CONFIG_H_ |
OLD | NEW |