From fcd8585874481d4f04ddc8269c74843df3cf9743 Mon Sep 17 00:00:00 2001 From: "stefan@webrtc.org" Date: Wed, 9 Jan 2013 08:35:40 +0000 Subject: [PATCH] Enable external encoders with internal picture source. CL enables registering of external encoder with internal picture source on API by adding simple passthrough parameter that is already supported within video engine. Review URL: https://webrtc-codereview.appspot.com/1006006 git-svn-id: http://webrtc.googlecode.com/svn/trunk@3344 4adac7df-926f-26a2-2b94-8c16560cd09d --- webrtc/video_engine/include/vie_external_codec.h | 3 ++- .../test/auto_test/source/vie_autotest_codec.cc | 6 +++--- webrtc/video_engine/vie_capturer.cc | 2 +- webrtc/video_engine/vie_encoder.cc | 6 ++++-- webrtc/video_engine/vie_encoder.h | 3 ++- webrtc/video_engine/vie_external_codec_impl.cc | 6 ++++-- webrtc/video_engine/vie_external_codec_impl.h | 3 ++- 7 files changed, 18 insertions(+), 11 deletions(-) diff --git a/webrtc/video_engine/include/vie_external_codec.h b/webrtc/video_engine/include/vie_external_codec.h index a2e686a9f6..75b07272c0 100644 --- a/webrtc/video_engine/include/vie_external_codec.h +++ b/webrtc/video_engine/include/vie_external_codec.h @@ -27,7 +27,8 @@ class WEBRTC_DLLEXPORT ViEExternalCodec { virtual int RegisterExternalSendCodec(const int video_channel, const unsigned char pl_type, - VideoEncoder* encoder) = 0; + VideoEncoder* encoder, + bool internal_source) = 0; virtual int DeRegisterExternalSendCodec(const int video_channel, const unsigned char pl_type) = 0; diff --git a/webrtc/video_engine/test/auto_test/source/vie_autotest_codec.cc b/webrtc/video_engine/test/auto_test/source/vie_autotest_codec.cc index 445c449759..6c0e1a47e1 100644 --- a/webrtc/video_engine/test/auto_test/source/vie_autotest_codec.cc +++ b/webrtc/video_engine/test/auto_test/source/vie_autotest_codec.cc @@ -542,7 +542,7 @@ void ViEAutoTest::ViECodecExternalCodecTest() { // Test to register on wrong channel. error = vie_external_codec->RegisterExternalSendCodec( - channel.videoChannel + 5, codec.plType, &ext_encoder); + channel.videoChannel + 5, codec.plType, &ext_encoder, false); number_of_errors += ViETest::TestError(error == -1, "ERROR: %s at line %d", __FUNCTION__, __LINE__); @@ -551,7 +551,7 @@ void ViEAutoTest::ViECodecExternalCodecTest() { "ERROR: %s at line %d", __FUNCTION__, __LINE__); error = vie_external_codec->RegisterExternalSendCodec( - channel.videoChannel, codec.plType, &ext_encoder); + channel.videoChannel, codec.plType, &ext_encoder, false); number_of_errors += ViETest::TestError(error == 0, "ERROR: %s at line %d", __FUNCTION__, __LINE__); @@ -653,7 +653,7 @@ void ViEAutoTest::ViECodecExternalCodecTest() { __FUNCTION__, __LINE__); error = vie_external_codec->RegisterExternalSendCodec( - channel.videoChannel, codec.plType, &ext_encoder); + channel.videoChannel, codec.plType, &ext_encoder, false); number_of_errors += ViETest::TestError(error == 0, "ERROR: %s at line %d", __FUNCTION__, __LINE__); diff --git a/webrtc/video_engine/vie_capturer.cc b/webrtc/video_engine/vie_capturer.cc index 4c05855fdd..83d735dfa9 100644 --- a/webrtc/video_engine/vie_capturer.cc +++ b/webrtc/video_engine/vie_capturer.cc @@ -708,7 +708,7 @@ WebRtc_Word32 ViECapturer::PreEncodeToViEEncoder(const VideoCodec& codec, vcm_ = VideoCodingModule::Create(capture_id_); } - if (vie_encoder.RegisterExternalEncoder(this, codec.plType) != 0) { + if (vie_encoder.RegisterExternalEncoder(this, codec.plType, false) != 0) { return -1; } if (vie_encoder.SetEncoder(codec) != 0) { diff --git a/webrtc/video_engine/vie_encoder.cc b/webrtc/video_engine/vie_encoder.cc index 9c9e681c4a..ee02fc1997 100644 --- a/webrtc/video_engine/vie_encoder.cc +++ b/webrtc/video_engine/vie_encoder.cc @@ -280,7 +280,8 @@ WebRtc_Word32 ViEEncoder::GetCodec(WebRtc_UWord8 list_index, } WebRtc_Word32 ViEEncoder::RegisterExternalEncoder(webrtc::VideoEncoder* encoder, - WebRtc_UWord8 pl_type) { + WebRtc_UWord8 pl_type, + bool internal_source) { WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideo, ViEId(engine_id_, channel_id_), "%s: pltype %u", __FUNCTION__, pl_type); @@ -288,7 +289,8 @@ WebRtc_Word32 ViEEncoder::RegisterExternalEncoder(webrtc::VideoEncoder* encoder, if (encoder == NULL) return -1; - if (vcm_.RegisterExternalEncoder(encoder, pl_type) != VCM_OK) { + if (vcm_.RegisterExternalEncoder(encoder, pl_type, internal_source) != + VCM_OK) { WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideo, ViEId(engine_id_, channel_id_), "Could not register external encoder"); diff --git a/webrtc/video_engine/vie_encoder.h b/webrtc/video_engine/vie_encoder.h index e0960338be..77aae51b2a 100644 --- a/webrtc/video_engine/vie_encoder.h +++ b/webrtc/video_engine/vie_encoder.h @@ -70,7 +70,8 @@ class ViEEncoder WebRtc_UWord8 NumberOfCodecs(); WebRtc_Word32 GetCodec(WebRtc_UWord8 list_index, VideoCodec* video_codec); WebRtc_Word32 RegisterExternalEncoder(VideoEncoder* encoder, - WebRtc_UWord8 pl_type); + WebRtc_UWord8 pl_type, + bool internal_source); WebRtc_Word32 DeRegisterExternalEncoder(WebRtc_UWord8 pl_type); WebRtc_Word32 SetEncoder(const VideoCodec& video_codec); WebRtc_Word32 GetEncoder(VideoCodec* video_codec); diff --git a/webrtc/video_engine/vie_external_codec_impl.cc b/webrtc/video_engine/vie_external_codec_impl.cc index 8c9be012d0..60edcf1d18 100644 --- a/webrtc/video_engine/vie_external_codec_impl.cc +++ b/webrtc/video_engine/vie_external_codec_impl.cc @@ -67,7 +67,8 @@ ViEExternalCodecImpl::~ViEExternalCodecImpl() { int ViEExternalCodecImpl::RegisterExternalSendCodec(const int video_channel, const unsigned char pl_type, - VideoEncoder* encoder) { + VideoEncoder* encoder, + bool internal_source) { WEBRTC_TRACE(kTraceApiCall, kTraceVideo, ViEId(shared_data_->instance_id()), "%s channel %d pl_type %d encoder 0x%x", __FUNCTION__, video_channel, pl_type, encoder); @@ -90,7 +91,8 @@ int ViEExternalCodecImpl::RegisterExternalSendCodec(const int video_channel, return -1; } - if (vie_encoder->RegisterExternalEncoder(encoder, pl_type) != 0) { + if (vie_encoder->RegisterExternalEncoder(encoder, pl_type, internal_source) + != 0) { shared_data_->SetLastError(kViECodecUnknownError); return -1; } diff --git a/webrtc/video_engine/vie_external_codec_impl.h b/webrtc/video_engine/vie_external_codec_impl.h index f06613f550..6e8c5bcf14 100644 --- a/webrtc/video_engine/vie_external_codec_impl.h +++ b/webrtc/video_engine/vie_external_codec_impl.h @@ -26,7 +26,8 @@ class ViEExternalCodecImpl virtual int Release(); virtual int RegisterExternalSendCodec(const int video_channel, const unsigned char pl_type, - VideoEncoder* encoder); + VideoEncoder* encoder, + bool internal_source = false); virtual int DeRegisterExternalSendCodec(const int video_channel, const unsigned char pl_type); virtual int RegisterExternalReceiveCodec(const int video_channel,