Chromium Code Reviews| Index: webrtc/media/engine/webrtcvideoengine2.cc |
| diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc |
| index 2dec8f43b6c738875eabb4bb1f252608382ec9d0..d0d4db90a92871199dd5cc0b3b7ff36af91778cd 100644 |
| --- a/webrtc/media/engine/webrtcvideoengine2.cc |
| +++ b/webrtc/media/engine/webrtcvideoengine2.cc |
| @@ -1582,6 +1582,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( |
| source_(nullptr), |
| external_encoder_factory_(external_encoder_factory), |
| stream_(nullptr), |
| + encoder_sink_(nullptr), |
| parameters_(std::move(config), options, max_bitrate_bps, codec_settings), |
| rtp_parameters_(CreateRtpParametersWithOneEncoding()), |
| pending_encoder_reconfiguration_(false), |
| @@ -1659,7 +1660,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::OnFrame( |
| << ", texture=" << last_frame_info_.is_texture; |
| } |
| - if (stream_ == NULL) { |
| + if (encoder_sink_ == NULL) { |
|
sprang_webrtc
2016/09/06 10:04:57
nit: nullptr
perkj_webrtc
2016/09/07 15:10:37
Done.
|
| // Frame input before send codecs are configured, dropping frame. |
| return; |
| } |
| @@ -1692,7 +1693,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::OnFrame( |
| if (cpu_restricted_counter_ > 0) |
| ++cpu_restricted_frame_count_; |
| - stream_->Input()->IncomingCapturedFrame(video_frame); |
| + encoder_sink_->OnFrame(video_frame); |
| } |
| bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend( |
| @@ -1715,7 +1716,7 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend( |
| if (options_present) { |
| VideoOptions old_options = parameters_.options; |
| parameters_.options.SetAll(*options); |
| - // Reconfigure encoder settings on the naext frame or stream |
| + // Reconfigure encoder settings on the next frame or stream |
| // recreation if the options changed. |
| if (parameters_.options != old_options) { |
| pending_encoder_reconfiguration_ = true; |
| @@ -1728,7 +1729,7 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend( |
| // one. |
| first_frame_timestamp_ms_ = rtc::Optional<int64_t>(); |
| - if (source == nullptr && stream_ != nullptr) { |
| + if (source == nullptr && encoder_sink_ != nullptr) { |
| LOG(LS_VERBOSE) << "Disabling capturer, sending black frame."; |
| // Force this black frame not to be dropped due to timestamp order |
| // check. As IncomingCapturedFrame will drop the frame if this frame's |
| @@ -1741,9 +1742,9 @@ bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend( |
| last_frame_info_.height)); |
| black_buffer->SetToBlack(); |
| - stream_->Input()->IncomingCapturedFrame(webrtc::VideoFrame( |
| - black_buffer, 0 /* timestamp (90 kHz) */, |
| - last_frame_timestamp_ms_, last_frame_info_.rotation)); |
| + encoder_sink_->OnFrame(webrtc::VideoFrame( |
| + black_buffer, 0 /* timestamp (90 kHz) */, last_frame_timestamp_ms_, |
| + last_frame_info_.rotation)); |
| } |
| source_ = source; |
| } |
| @@ -2065,6 +2066,23 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) { |
| UpdateSendState(); |
| } |
| +void WebRtcVideoChannel2::WebRtcVideoSendStream::AddOrUpdateSink( |
| + VideoSinkInterface<webrtc::VideoFrame>* sink, |
| + const rtc::VideoSinkWants& wants) { |
| + // TODO(perkj): Actually consider the encoder |wants| and remove |
| + // WebRtcVideoSendStream::OnLoadUpdate(Load load). |
| + rtc::CritScope cs(&lock_); |
| + RTC_DCHECK(!encoder_sink_ || encoder_sink_ == sink); |
|
stefan-webrtc
2016/09/06 12:24:38
Why do we allow setting the same sink twice?
perkj_webrtc
2016/09/07 15:10:37
This is AddOrUpdateSink. It will be called multipl
|
| + encoder_sink_ = sink; |
| +} |
| + |
| +void WebRtcVideoChannel2::WebRtcVideoSendStream::RemoveSink( |
| + VideoSinkInterface<webrtc::VideoFrame>* sink) { |
| + rtc::CritScope cs(&lock_); |
| + RTC_DCHECK(encoder_sink_ == sink); |
| + encoder_sink_ = nullptr; |
| +} |
| + |
| void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) { |
| if (worker_thread_ != rtc::Thread::Current()) { |
| invoker_.AsyncInvoke<void>( |
| @@ -2257,6 +2275,7 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::RecreateWebRtcStream() { |
| } |
| stream_ = call_->CreateVideoSendStream(std::move(config), |
| parameters_.encoder_config.Copy()); |
| + stream_->SetSource(this); |
| parameters_.encoder_config.encoder_specific_settings = NULL; |
| pending_encoder_reconfiguration_ = false; |