Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Unified Diff: webrtc/media/engine/webrtcvideoengine2.cc

Issue 2257413002: Replace interface VideoCapturerInput with VideoSinkInterface. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Addressed review comments Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/media/engine/webrtcvideoengine2.cc
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc
index 2dec8f43b6c738875eabb4bb1f252608382ec9d0..9a2c2da8f8c4210a4a618a3d0950a662029f0d31 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) {
// 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);
+ encoder_sink_ = sink;
+}
+
+void WebRtcVideoChannel2::WebRtcVideoSendStream::RemoveSink(
+ VideoSinkInterface<webrtc::VideoFrame>* sink) {
+ rtc::CritScope cs(&lock_);
+ RTC_DCHECK(encoder_sink_&& encoder_sink_ = sink);
sprang_webrtc 2016/09/02 07:19:31 You don't need to check encoder_sink_ != nullptr i
nisse-webrtc 2016/09/02 08:10:18 I think it is desirable to fail this DCHECK in the
sprang_webrtc 2016/09/02 09:07:04 Sure, but then I'd rather check that sink != nullp
perkj_webrtc 2016/09/02 12:18:21 Prefer just DCHECK(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;

Powered by Google App Engine
This is Rietveld 408576698