From 31413dc635c4448ee96dedfe78a440cc75a91166 Mon Sep 17 00:00:00 2001 From: "henrike@webrtc.org" Date: Mon, 3 Mar 2014 16:47:01 +0000 Subject: [PATCH] (Auto)update libjingle 62364298-> 62368661 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5629 4adac7df-926f-26a2-2b94-8c16560cd09d --- talk/app/webrtc/OWNERS | 1 + talk/examples/call/call_main.cc | 7 ++-- talk/media/base/mediaengine.cc | 50 ++++++++++++++++++++++++-- talk/media/base/mediaengine.h | 11 ++++++ talk/media/other/androidmediaengine.cc | 0 talk/media/other/androidmediaengine.h | 0 6 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 talk/media/other/androidmediaengine.cc create mode 100644 talk/media/other/androidmediaengine.h diff --git a/talk/app/webrtc/OWNERS b/talk/app/webrtc/OWNERS index 40c5bdc140..aeeca0ed4d 100644 --- a/talk/app/webrtc/OWNERS +++ b/talk/app/webrtc/OWNERS @@ -1,3 +1,4 @@ +set noparent hellner@google.com juberti@google.com mallinath@google.com diff --git a/talk/examples/call/call_main.cc b/talk/examples/call/call_main.cc index 2ee796b1c2..25c33ff0e4 100644 --- a/talk/examples/call/call_main.cc +++ b/talk/examples/call/call_main.cc @@ -45,9 +45,6 @@ #include "talk/examples/call/console.h" #include "talk/examples/call/mediaenginefactory.h" #include "talk/p2p/base/constants.h" -#ifdef ANDROID -#include "talk/media/other/androidmediaengine.h" -#endif #include "talk/session/media/mediasessionclient.h" #include "talk/session/media/srtpfilter.h" #include "talk/xmpp/xmppauth.h" @@ -185,7 +182,7 @@ static const int DEFAULT_PORT = 5222; static std::vector codecs; static const cricket::AudioCodec ISAC(103, "ISAC", 40000, 16000, 1, 0); -cricket::MediaEngine *AndroidMediaEngineFactory() { +cricket::MediaEngineInterface *CreateAndroidMediaEngine() { cricket::FakeMediaEngine *engine = new cricket::FakeMediaEngine(); codecs.push_back(ISAC); @@ -438,7 +435,7 @@ int main(int argc, char **argv) { } #ifdef ANDROID - InitAndroidMediaEngineFactory(AndroidMediaEngineFactory); + MediaEngineFactory::SetCreateFunction(&CreateAndroidMediaEngine); #endif #if WIN32 diff --git a/talk/media/base/mediaengine.cc b/talk/media/base/mediaengine.cc index 021cf81f1c..289f2290a4 100644 --- a/talk/media/base/mediaengine.cc +++ b/talk/media/base/mediaengine.cc @@ -42,6 +42,13 @@ const int MediaEngineInterface::kDefaultAudioDelayOffset = 0; #if defined(HAVE_WEBRTC_VIDEO) #include "talk/media/webrtc/webrtcvideoengine.h" #endif // HAVE_WEBRTC_VIDEO +#if defined(HAVE_LMI) +#include "talk/media/base/hybridvideoengine.h" +#include "talk/media/lmi/lmimediaengine.h" +#endif // HAVE_LMI +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif // HAVE_CONFIG namespace cricket { #if defined(HAVE_WEBRTC_VOICE) @@ -51,22 +58,59 @@ namespace cricket { #endif #if defined(HAVE_WEBRTC_VIDEO) +#if !defined(HAVE_LMI) template<> CompositeMediaEngine:: CompositeMediaEngine() { video_.SetVoiceEngine(&voice_); } #define VIDEO_ENG_NAME WebRtcVideoEngine +#else +// If we have both WebRtcVideoEngine and LmiVideoEngine, enable dual-stack. +// This small class here allows us to hook the WebRtcVideoChannel up to +// the capturer owned by the LMI engine, without infecting the rest of the +// HybridVideoEngine classes with this abstraction violation. +class WebRtcLmiHybridVideoEngine + : public HybridVideoEngine { + public: + void SetVoiceEngine(WebRtcVoiceEngine* engine) { + video1_.SetVoiceEngine(engine); + } +}; +template<> +CompositeMediaEngine:: + CompositeMediaEngine() { + video_.SetVoiceEngine(&voice_); +} +#define VIDEO_ENG_NAME WebRtcLmiHybridVideoEngine +#endif +#elif defined(HAVE_LMI) +#define VIDEO_ENG_NAME LmiVideoEngine +#else +#define VIDEO_ENG_NAME NullVideoEngine #endif +MediaEngineFactory::MediaEngineCreateFunction + MediaEngineFactory::create_function_ = NULL; +MediaEngineFactory::MediaEngineCreateFunction + MediaEngineFactory::SetCreateFunction(MediaEngineCreateFunction function) { + MediaEngineCreateFunction old_function = create_function_; + create_function_ = function; + return old_function; +}; + MediaEngineInterface* MediaEngineFactory::Create() { + if (create_function_) { + return create_function_(); + } else { #if defined(HAVE_LINPHONE) - return new LinphoneMediaEngine("", ""); + return new LinphoneMediaEngine("", ""); #elif defined(AUDIO_ENG_NAME) && defined(VIDEO_ENG_NAME) - return new CompositeMediaEngine(); + return new CompositeMediaEngine(); #else - return new NullMediaEngine(); + return new NullMediaEngine(); #endif + } } }; // namespace cricket diff --git a/talk/media/base/mediaengine.h b/talk/media/base/mediaengine.h index 93586bb5b2..bccae99515 100644 --- a/talk/media/base/mediaengine.h +++ b/talk/media/base/mediaengine.h @@ -157,7 +157,18 @@ class MediaEngineInterface { #if !defined(DISABLE_MEDIA_ENGINE_FACTORY) class MediaEngineFactory { public: + typedef cricket::MediaEngineInterface* (*MediaEngineCreateFunction)(); + // Creates a media engine, using either the compiled system default or the + // creation function specified in SetCreateFunction, if specified. static MediaEngineInterface* Create(); + // Sets the function used when calling Create. If unset, the compiled system + // default will be used. Returns the old create function, or NULL if one + // wasn't set. Likewise, NULL can be used as the |function| parameter to + // reset to the default behavior. + static MediaEngineCreateFunction SetCreateFunction( + MediaEngineCreateFunction function); + private: + static MediaEngineCreateFunction create_function_; }; #endif diff --git a/talk/media/other/androidmediaengine.cc b/talk/media/other/androidmediaengine.cc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/talk/media/other/androidmediaengine.h b/talk/media/other/androidmediaengine.h new file mode 100644 index 0000000000..e69de29bb2