From 47d78cc8ad54baabc9042c2b848ae3afd9b80d2e Mon Sep 17 00:00:00 2001 From: sophiechang Date: Thu, 3 Sep 2015 18:24:44 -0700 Subject: [PATCH] Pass the encoder's internal source property through to video_sender to request a keyframe from the external encoder BUG= Review URL: https://codereview.webrtc.org/1263663005 Cr-Commit-Position: refs/heads/master@{#9853} --- talk/media/webrtc/webrtcvideoengine2.cc | 5 +++++ webrtc/video/video_send_stream.cc | 4 ++-- webrtc/video_send_stream.h | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc index 7e2c1d4151..5957329ae3 100644 --- a/talk/media/webrtc/webrtcvideoengine2.cc +++ b/talk/media/webrtc/webrtcvideoengine2.cc @@ -2025,6 +2025,11 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodecAndOptions( parameters_.config.encoder_settings.encoder = new_encoder.encoder; parameters_.config.encoder_settings.payload_name = codec_settings.codec.name; parameters_.config.encoder_settings.payload_type = codec_settings.codec.id; + if (new_encoder.external) { + webrtc::VideoCodecType type = CodecTypeFromName(codec_settings.codec.name); + parameters_.config.encoder_settings.internal_source = + external_encoder_factory_->EncoderTypeHasInternalSource(type); + } parameters_.config.rtp.fec = codec_settings.fec; // Set RTX payload type if RTX is enabled. diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc index b98a1f86f8..659fecb4b5 100644 --- a/webrtc/video/video_send_stream.cc +++ b/webrtc/video/video_send_stream.cc @@ -171,10 +171,10 @@ VideoSendStream::VideoSendStream( DCHECK(config.encoder_settings.encoder != nullptr); DCHECK_GE(config.encoder_settings.payload_type, 0); DCHECK_LE(config.encoder_settings.payload_type, 127); - // TODO(pbos): Wire up codec internal-source setting or remove setting. CHECK_EQ(0, vie_encoder_->RegisterExternalEncoder( config.encoder_settings.encoder, - config.encoder_settings.payload_type, false)); + config.encoder_settings.payload_type, + config.encoder_settings.internal_source)); CHECK(ReconfigureVideoEncoder(encoder_config)); diff --git a/webrtc/video_send_stream.h b/webrtc/video_send_stream.h index bc8773e709..18606de9fa 100644 --- a/webrtc/video_send_stream.h +++ b/webrtc/video_send_stream.h @@ -77,6 +77,10 @@ class VideoSendStream : public SendStream { std::string payload_name; int payload_type = -1; + // TODO(sophiechang): Delete this field when no one is using internal + // sources anymore. + bool internal_source = false; + // Uninitialized VideoEncoder instance to be used for encoding. Will be // initialized from inside the VideoSendStream. VideoEncoder* encoder = nullptr;