OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 }; | 70 }; |
71 | 71 |
72 class VideoCodingModuleImpl : public VideoCodingModule { | 72 class VideoCodingModuleImpl : public VideoCodingModule { |
73 public: | 73 public: |
74 VideoCodingModuleImpl(Clock* clock, | 74 VideoCodingModuleImpl(Clock* clock, |
75 EventFactory* event_factory, | 75 EventFactory* event_factory, |
76 bool owns_event_factory, | 76 bool owns_event_factory, |
77 VideoEncoderRateObserver* encoder_rate_observer, | 77 VideoEncoderRateObserver* encoder_rate_observer, |
78 VCMQMSettingsCallback* qm_settings_callback) | 78 VCMQMSettingsCallback* qm_settings_callback) |
79 : VideoCodingModule(), | 79 : VideoCodingModule(), |
80 sender_(new vcm::VideoSender(clock, | 80 sender_(clock, |
81 &post_encode_callback_, | 81 &post_encode_callback_, |
82 encoder_rate_observer, | 82 encoder_rate_observer, |
83 qm_settings_callback)), | 83 qm_settings_callback), |
84 receiver_(new vcm::VideoReceiver(clock, event_factory)), | 84 receiver_(clock, event_factory), |
85 own_event_factory_(owns_event_factory ? event_factory : NULL) {} | 85 own_event_factory_(owns_event_factory ? event_factory : NULL) {} |
86 | 86 |
87 virtual ~VideoCodingModuleImpl() { | 87 virtual ~VideoCodingModuleImpl() { |
88 sender_.reset(); | |
89 receiver_.reset(); | |
90 own_event_factory_.reset(); | 88 own_event_factory_.reset(); |
91 } | 89 } |
92 | 90 |
93 int64_t TimeUntilNextProcess() override { | 91 int64_t TimeUntilNextProcess() override { |
94 int64_t sender_time = sender_->TimeUntilNextProcess(); | 92 int64_t sender_time = sender_.TimeUntilNextProcess(); |
95 int64_t receiver_time = receiver_->TimeUntilNextProcess(); | 93 int64_t receiver_time = receiver_.TimeUntilNextProcess(); |
96 assert(sender_time >= 0); | 94 assert(sender_time >= 0); |
97 assert(receiver_time >= 0); | 95 assert(receiver_time >= 0); |
98 return VCM_MIN(sender_time, receiver_time); | 96 return VCM_MIN(sender_time, receiver_time); |
99 } | 97 } |
100 | 98 |
101 int32_t Process() override { | 99 int32_t Process() override { |
102 int32_t sender_return = sender_->Process(); | 100 int32_t sender_return = sender_.Process(); |
103 int32_t receiver_return = receiver_->Process(); | 101 int32_t receiver_return = receiver_.Process(); |
104 if (sender_return != VCM_OK) | 102 if (sender_return != VCM_OK) |
105 return sender_return; | 103 return sender_return; |
106 return receiver_return; | 104 return receiver_return; |
107 } | 105 } |
108 | 106 |
109 int32_t RegisterSendCodec(const VideoCodec* sendCodec, | 107 int32_t RegisterSendCodec(const VideoCodec* sendCodec, |
110 uint32_t numberOfCores, | 108 uint32_t numberOfCores, |
111 uint32_t maxPayloadSize) override { | 109 uint32_t maxPayloadSize) override { |
112 return sender_->RegisterSendCodec(sendCodec, numberOfCores, maxPayloadSize); | 110 return sender_.RegisterSendCodec(sendCodec, numberOfCores, maxPayloadSize); |
113 } | 111 } |
114 | 112 |
115 const VideoCodec& GetSendCodec() const override { | 113 const VideoCodec& GetSendCodec() const override { |
116 return sender_->GetSendCodec(); | 114 return sender_.GetSendCodec(); |
117 } | 115 } |
118 | 116 |
119 // DEPRECATED. | 117 // DEPRECATED. |
120 int32_t SendCodec(VideoCodec* currentSendCodec) const override { | 118 int32_t SendCodec(VideoCodec* currentSendCodec) const override { |
121 return sender_->SendCodecBlocking(currentSendCodec); | 119 return sender_.SendCodecBlocking(currentSendCodec); |
122 } | 120 } |
123 | 121 |
124 // DEPRECATED. | 122 // DEPRECATED. |
125 VideoCodecType SendCodec() const override { | 123 VideoCodecType SendCodec() const override { |
126 return sender_->SendCodecBlocking(); | 124 return sender_.SendCodecBlocking(); |
127 } | 125 } |
128 | 126 |
129 int32_t RegisterExternalEncoder(VideoEncoder* externalEncoder, | 127 int32_t RegisterExternalEncoder(VideoEncoder* externalEncoder, |
130 uint8_t payloadType, | 128 uint8_t payloadType, |
131 bool internalSource) override { | 129 bool internalSource) override { |
132 return sender_->RegisterExternalEncoder( | 130 return sender_.RegisterExternalEncoder(externalEncoder, payloadType, |
133 externalEncoder, payloadType, internalSource); | 131 internalSource); |
134 } | 132 } |
135 | 133 |
136 int Bitrate(unsigned int* bitrate) const override { | 134 int Bitrate(unsigned int* bitrate) const override { |
137 return sender_->Bitrate(bitrate); | 135 return sender_.Bitrate(bitrate); |
138 } | 136 } |
139 | 137 |
140 int FrameRate(unsigned int* framerate) const override { | 138 int FrameRate(unsigned int* framerate) const override { |
141 return sender_->FrameRate(framerate); | 139 return sender_.FrameRate(framerate); |
142 } | 140 } |
143 | 141 |
144 int32_t SetChannelParameters(uint32_t target_bitrate, // bits/s. | 142 int32_t SetChannelParameters(uint32_t target_bitrate, // bits/s. |
145 uint8_t lossRate, | 143 uint8_t lossRate, |
146 int64_t rtt) override { | 144 int64_t rtt) override { |
147 return sender_->SetChannelParameters(target_bitrate, lossRate, rtt); | 145 return sender_.SetChannelParameters(target_bitrate, lossRate, rtt); |
148 } | 146 } |
149 | 147 |
150 int32_t RegisterTransportCallback( | 148 int32_t RegisterTransportCallback( |
151 VCMPacketizationCallback* transport) override { | 149 VCMPacketizationCallback* transport) override { |
152 return sender_->RegisterTransportCallback(transport); | 150 return sender_.RegisterTransportCallback(transport); |
153 } | 151 } |
154 | 152 |
155 int32_t RegisterSendStatisticsCallback( | 153 int32_t RegisterSendStatisticsCallback( |
156 VCMSendStatisticsCallback* sendStats) override { | 154 VCMSendStatisticsCallback* sendStats) override { |
157 return sender_->RegisterSendStatisticsCallback(sendStats); | 155 return sender_.RegisterSendStatisticsCallback(sendStats); |
158 } | 156 } |
159 | 157 |
160 int32_t RegisterProtectionCallback( | 158 int32_t RegisterProtectionCallback( |
161 VCMProtectionCallback* protection) override { | 159 VCMProtectionCallback* protection) override { |
162 return sender_->RegisterProtectionCallback(protection); | 160 return sender_.RegisterProtectionCallback(protection); |
163 } | 161 } |
164 | 162 |
165 int32_t SetVideoProtection(VCMVideoProtection videoProtection, | 163 int32_t SetVideoProtection(VCMVideoProtection videoProtection, |
166 bool enable) override { | 164 bool enable) override { |
167 // TODO(pbos): Remove enable from receive-side protection modes as well. | 165 // TODO(pbos): Remove enable from receive-side protection modes as well. |
168 if (enable) | 166 if (enable) |
169 sender_->SetVideoProtection(videoProtection); | 167 sender_.SetVideoProtection(videoProtection); |
170 return receiver_->SetVideoProtection(videoProtection, enable); | 168 return receiver_.SetVideoProtection(videoProtection, enable); |
171 } | 169 } |
172 | 170 |
173 int32_t AddVideoFrame(const VideoFrame& videoFrame, | 171 int32_t AddVideoFrame(const VideoFrame& videoFrame, |
174 const VideoContentMetrics* contentMetrics, | 172 const VideoContentMetrics* contentMetrics, |
175 const CodecSpecificInfo* codecSpecificInfo) override { | 173 const CodecSpecificInfo* codecSpecificInfo) override { |
176 return sender_->AddVideoFrame( | 174 return sender_.AddVideoFrame(videoFrame, contentMetrics, codecSpecificInfo); |
177 videoFrame, contentMetrics, codecSpecificInfo); | |
178 } | 175 } |
179 | 176 |
180 int32_t IntraFrameRequest(int stream_index) override { | 177 int32_t IntraFrameRequest(int stream_index) override { |
181 return sender_->IntraFrameRequest(stream_index); | 178 return sender_.IntraFrameRequest(stream_index); |
182 } | 179 } |
183 | 180 |
184 int32_t EnableFrameDropper(bool enable) override { | 181 int32_t EnableFrameDropper(bool enable) override { |
185 return sender_->EnableFrameDropper(enable); | 182 return sender_.EnableFrameDropper(enable); |
186 } | 183 } |
187 | 184 |
188 void SuspendBelowMinBitrate() override { | 185 void SuspendBelowMinBitrate() override { |
189 return sender_->SuspendBelowMinBitrate(); | 186 return sender_.SuspendBelowMinBitrate(); |
190 } | 187 } |
191 | 188 |
192 bool VideoSuspended() const override { return sender_->VideoSuspended(); } | 189 bool VideoSuspended() const override { return sender_.VideoSuspended(); } |
193 | 190 |
194 int32_t RegisterReceiveCodec(const VideoCodec* receiveCodec, | 191 int32_t RegisterReceiveCodec(const VideoCodec* receiveCodec, |
195 int32_t numberOfCores, | 192 int32_t numberOfCores, |
196 bool requireKeyFrame) override { | 193 bool requireKeyFrame) override { |
197 return receiver_->RegisterReceiveCodec( | 194 return receiver_.RegisterReceiveCodec(receiveCodec, numberOfCores, |
198 receiveCodec, numberOfCores, requireKeyFrame); | 195 requireKeyFrame); |
199 } | 196 } |
200 | 197 |
201 int32_t RegisterExternalDecoder(VideoDecoder* externalDecoder, | 198 int32_t RegisterExternalDecoder(VideoDecoder* externalDecoder, |
202 uint8_t payloadType, | 199 uint8_t payloadType, |
203 bool internalRenderTiming) override { | 200 bool internalRenderTiming) override { |
204 return receiver_->RegisterExternalDecoder( | 201 return receiver_.RegisterExternalDecoder(externalDecoder, payloadType, |
205 externalDecoder, payloadType, internalRenderTiming); | 202 internalRenderTiming); |
206 } | 203 } |
207 | 204 |
208 int32_t RegisterReceiveCallback( | 205 int32_t RegisterReceiveCallback( |
209 VCMReceiveCallback* receiveCallback) override { | 206 VCMReceiveCallback* receiveCallback) override { |
210 return receiver_->RegisterReceiveCallback(receiveCallback); | 207 return receiver_.RegisterReceiveCallback(receiveCallback); |
211 } | 208 } |
212 | 209 |
213 int32_t RegisterReceiveStatisticsCallback( | 210 int32_t RegisterReceiveStatisticsCallback( |
214 VCMReceiveStatisticsCallback* receiveStats) override { | 211 VCMReceiveStatisticsCallback* receiveStats) override { |
215 return receiver_->RegisterReceiveStatisticsCallback(receiveStats); | 212 return receiver_.RegisterReceiveStatisticsCallback(receiveStats); |
216 } | 213 } |
217 | 214 |
218 int32_t RegisterDecoderTimingCallback( | 215 int32_t RegisterDecoderTimingCallback( |
219 VCMDecoderTimingCallback* decoderTiming) override { | 216 VCMDecoderTimingCallback* decoderTiming) override { |
220 return receiver_->RegisterDecoderTimingCallback(decoderTiming); | 217 return receiver_.RegisterDecoderTimingCallback(decoderTiming); |
221 } | 218 } |
222 | 219 |
223 int32_t RegisterFrameTypeCallback( | 220 int32_t RegisterFrameTypeCallback( |
224 VCMFrameTypeCallback* frameTypeCallback) override { | 221 VCMFrameTypeCallback* frameTypeCallback) override { |
225 return receiver_->RegisterFrameTypeCallback(frameTypeCallback); | 222 return receiver_.RegisterFrameTypeCallback(frameTypeCallback); |
226 } | 223 } |
227 | 224 |
228 int32_t RegisterPacketRequestCallback( | 225 int32_t RegisterPacketRequestCallback( |
229 VCMPacketRequestCallback* callback) override { | 226 VCMPacketRequestCallback* callback) override { |
230 return receiver_->RegisterPacketRequestCallback(callback); | 227 return receiver_.RegisterPacketRequestCallback(callback); |
231 } | 228 } |
232 | 229 |
233 int RegisterRenderBufferSizeCallback( | 230 int RegisterRenderBufferSizeCallback( |
234 VCMRenderBufferSizeCallback* callback) override { | 231 VCMRenderBufferSizeCallback* callback) override { |
235 return receiver_->RegisterRenderBufferSizeCallback(callback); | 232 return receiver_.RegisterRenderBufferSizeCallback(callback); |
236 } | 233 } |
237 | 234 |
238 int32_t Decode(uint16_t maxWaitTimeMs) override { | 235 int32_t Decode(uint16_t maxWaitTimeMs) override { |
239 return receiver_->Decode(maxWaitTimeMs); | 236 return receiver_.Decode(maxWaitTimeMs); |
240 } | 237 } |
241 | 238 |
242 int32_t ResetDecoder() override { return receiver_->ResetDecoder(); } | 239 int32_t ResetDecoder() override { return receiver_.ResetDecoder(); } |
243 | 240 |
244 int32_t ReceiveCodec(VideoCodec* currentReceiveCodec) const override { | 241 int32_t ReceiveCodec(VideoCodec* currentReceiveCodec) const override { |
245 return receiver_->ReceiveCodec(currentReceiveCodec); | 242 return receiver_.ReceiveCodec(currentReceiveCodec); |
246 } | 243 } |
247 | 244 |
248 VideoCodecType ReceiveCodec() const override { | 245 VideoCodecType ReceiveCodec() const override { |
249 return receiver_->ReceiveCodec(); | 246 return receiver_.ReceiveCodec(); |
250 } | 247 } |
251 | 248 |
252 int32_t IncomingPacket(const uint8_t* incomingPayload, | 249 int32_t IncomingPacket(const uint8_t* incomingPayload, |
253 size_t payloadLength, | 250 size_t payloadLength, |
254 const WebRtcRTPHeader& rtpInfo) override { | 251 const WebRtcRTPHeader& rtpInfo) override { |
255 return receiver_->IncomingPacket(incomingPayload, payloadLength, rtpInfo); | 252 return receiver_.IncomingPacket(incomingPayload, payloadLength, rtpInfo); |
256 } | 253 } |
257 | 254 |
258 int32_t SetMinimumPlayoutDelay(uint32_t minPlayoutDelayMs) override { | 255 int32_t SetMinimumPlayoutDelay(uint32_t minPlayoutDelayMs) override { |
259 return receiver_->SetMinimumPlayoutDelay(minPlayoutDelayMs); | 256 return receiver_.SetMinimumPlayoutDelay(minPlayoutDelayMs); |
260 } | 257 } |
261 | 258 |
262 int32_t SetRenderDelay(uint32_t timeMS) override { | 259 int32_t SetRenderDelay(uint32_t timeMS) override { |
263 return receiver_->SetRenderDelay(timeMS); | 260 return receiver_.SetRenderDelay(timeMS); |
264 } | 261 } |
265 | 262 |
266 int32_t Delay() const override { return receiver_->Delay(); } | 263 int32_t Delay() const override { return receiver_.Delay(); } |
267 | 264 |
268 uint32_t DiscardedPackets() const override { | 265 uint32_t DiscardedPackets() const override { |
269 return receiver_->DiscardedPackets(); | 266 return receiver_.DiscardedPackets(); |
270 } | 267 } |
271 | 268 |
272 int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode, | 269 int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode, |
273 VCMDecodeErrorMode errorMode) override { | 270 VCMDecodeErrorMode errorMode) override { |
274 return receiver_->SetReceiverRobustnessMode(robustnessMode, errorMode); | 271 return receiver_.SetReceiverRobustnessMode(robustnessMode, errorMode); |
275 } | 272 } |
276 | 273 |
277 void SetNackSettings(size_t max_nack_list_size, | 274 void SetNackSettings(size_t max_nack_list_size, |
278 int max_packet_age_to_nack, | 275 int max_packet_age_to_nack, |
279 int max_incomplete_time_ms) override { | 276 int max_incomplete_time_ms) override { |
280 return receiver_->SetNackSettings( | 277 return receiver_.SetNackSettings(max_nack_list_size, max_packet_age_to_nack, |
281 max_nack_list_size, max_packet_age_to_nack, max_incomplete_time_ms); | 278 max_incomplete_time_ms); |
282 } | 279 } |
283 | 280 |
284 void SetDecodeErrorMode(VCMDecodeErrorMode decode_error_mode) override { | 281 void SetDecodeErrorMode(VCMDecodeErrorMode decode_error_mode) override { |
285 return receiver_->SetDecodeErrorMode(decode_error_mode); | 282 return receiver_.SetDecodeErrorMode(decode_error_mode); |
286 } | 283 } |
287 | 284 |
288 int SetMinReceiverDelay(int desired_delay_ms) override { | 285 int SetMinReceiverDelay(int desired_delay_ms) override { |
289 return receiver_->SetMinReceiverDelay(desired_delay_ms); | 286 return receiver_.SetMinReceiverDelay(desired_delay_ms); |
290 } | 287 } |
291 | 288 |
292 int32_t SetReceiveChannelParameters(int64_t rtt) override { | 289 int32_t SetReceiveChannelParameters(int64_t rtt) override { |
293 return receiver_->SetReceiveChannelParameters(rtt); | 290 return receiver_.SetReceiveChannelParameters(rtt); |
294 } | 291 } |
295 | 292 |
296 void RegisterPreDecodeImageCallback(EncodedImageCallback* observer) override { | 293 void RegisterPreDecodeImageCallback(EncodedImageCallback* observer) override { |
297 receiver_->RegisterPreDecodeImageCallback(observer); | 294 receiver_.RegisterPreDecodeImageCallback(observer); |
298 } | 295 } |
299 | 296 |
300 void RegisterPostEncodeImageCallback( | 297 void RegisterPostEncodeImageCallback( |
301 EncodedImageCallback* observer) override { | 298 EncodedImageCallback* observer) override { |
302 post_encode_callback_.Register(observer); | 299 post_encode_callback_.Register(observer); |
303 } | 300 } |
304 | 301 |
305 void TriggerDecoderShutdown() override { | 302 void TriggerDecoderShutdown() override { receiver_.TriggerDecoderShutdown(); } |
306 receiver_->TriggerDecoderShutdown(); | |
307 } | |
308 | 303 |
309 private: | 304 private: |
310 EncodedImageCallbackWrapper post_encode_callback_; | 305 EncodedImageCallbackWrapper post_encode_callback_; |
311 // TODO(tommi): Change sender_ and receiver_ to be non pointers | 306 vcm::VideoSender sender_; |
312 // (construction is 1 alloc instead of 3). | 307 vcm::VideoReceiver receiver_; |
313 rtc::scoped_ptr<vcm::VideoSender> sender_; | |
314 rtc::scoped_ptr<vcm::VideoReceiver> receiver_; | |
315 rtc::scoped_ptr<EventFactory> own_event_factory_; | 308 rtc::scoped_ptr<EventFactory> own_event_factory_; |
316 }; | 309 }; |
317 } // namespace | 310 } // namespace |
318 | 311 |
319 uint8_t VideoCodingModule::NumberOfCodecs() { | 312 uint8_t VideoCodingModule::NumberOfCodecs() { |
320 return VCMCodecDataBase::NumberOfCodecs(); | 313 return VCMCodecDataBase::NumberOfCodecs(); |
321 } | 314 } |
322 | 315 |
323 int32_t VideoCodingModule::Codec(uint8_t listId, VideoCodec* codec) { | 316 int32_t VideoCodingModule::Codec(uint8_t listId, VideoCodec* codec) { |
324 if (codec == NULL) { | 317 if (codec == NULL) { |
(...skipping 25 matching lines...) Expand all Loading... |
350 return new VideoCodingModuleImpl(clock, event_factory, false, nullptr, | 343 return new VideoCodingModuleImpl(clock, event_factory, false, nullptr, |
351 nullptr); | 344 nullptr); |
352 } | 345 } |
353 | 346 |
354 void VideoCodingModule::Destroy(VideoCodingModule* module) { | 347 void VideoCodingModule::Destroy(VideoCodingModule* module) { |
355 if (module != NULL) { | 348 if (module != NULL) { |
356 delete static_cast<VideoCodingModuleImpl*>(module); | 349 delete static_cast<VideoCodingModuleImpl*>(module); |
357 } | 350 } |
358 } | 351 } |
359 } // namespace webrtc | 352 } // namespace webrtc |
OLD | NEW |