• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // libjingle
3 // Copyright 2004 Google Inc.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 //  1. Redistributions of source code must retain the above copyright notice,
9 //     this list of conditions and the following disclaimer.
10 //  2. Redistributions in binary form must reproduce the above copyright notice,
11 //     this list of conditions and the following disclaimer in the documentation
12 //     and/or other materials provided with the distribution.
13 //  3. The name of the author may not be used to endorse or promote products
14 //     derived from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17 // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19 // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 //
27 
28 #include "talk/media/base/mediaengine.h"
29 
30 namespace cricket {
31 const int MediaEngineInterface::kDefaultAudioDelayOffset = 0;
32 }
33 
34 #if !defined(DISABLE_MEDIA_ENGINE_FACTORY)
35 
36 #if defined(HAVE_LINPHONE)
37 #include "talk/media/other/linphonemediaengine.h"
38 #endif  // HAVE_LINPHONE
39 #if defined(HAVE_WEBRTC_VOICE)
40 #include "talk/media/webrtc/webrtcvoiceengine.h"
41 #endif  // HAVE_WEBRTC_VOICE
42 #if defined(HAVE_WEBRTC_VIDEO)
43 #include "talk/media/webrtc/webrtcvideoengine.h"
44 #endif  // HAVE_WEBRTC_VIDEO
45 #if defined(HAVE_LMI)
46 #include "talk/media/base/hybridvideoengine.h"
47 #include "talk/media/lmi/lmimediaengine.h"
48 #endif  // HAVE_LMI
49 #ifdef HAVE_CONFIG_H
50 #include "config.h"
51 #endif  // HAVE_CONFIG
52 
53 namespace cricket {
54 #if defined(HAVE_WEBRTC_VOICE)
55 #define AUDIO_ENG_NAME WebRtcVoiceEngine
56 #else
57 #define AUDIO_ENG_NAME NullVoiceEngine
58 #endif
59 
60 #if defined(HAVE_WEBRTC_VIDEO)
61 #if !defined(HAVE_LMI)
62 template<>
63 CompositeMediaEngine<WebRtcVoiceEngine, WebRtcVideoEngine>::
CompositeMediaEngine()64     CompositeMediaEngine() {
65   video_.SetVoiceEngine(&voice_);
66 }
67 #define VIDEO_ENG_NAME WebRtcVideoEngine
68 #else
69 // If we have both WebRtcVideoEngine and LmiVideoEngine, enable dual-stack.
70 // This small class here allows us to hook the WebRtcVideoChannel up to
71 // the capturer owned by the LMI engine, without infecting the rest of the
72 // HybridVideoEngine classes with this abstraction violation.
73 class WebRtcLmiHybridVideoEngine
74     : public HybridVideoEngine<WebRtcVideoEngine, LmiVideoEngine> {
75  public:
76   void SetVoiceEngine(WebRtcVoiceEngine* engine) {
77     video1_.SetVoiceEngine(engine);
78   }
79 };
80 template<>
81 CompositeMediaEngine<WebRtcVoiceEngine, WebRtcLmiHybridVideoEngine>::
82     CompositeMediaEngine() {
83   video_.SetVoiceEngine(&voice_);
84 }
85 #define VIDEO_ENG_NAME WebRtcLmiHybridVideoEngine
86 #endif
87 #elif defined(HAVE_LMI)
88 #define VIDEO_ENG_NAME LmiVideoEngine
89 #else
90 #define VIDEO_ENG_NAME NullVideoEngine
91 #endif
92 
93 MediaEngineFactory::MediaEngineCreateFunction
94     MediaEngineFactory::create_function_ = NULL;
95 MediaEngineFactory::MediaEngineCreateFunction
SetCreateFunction(MediaEngineCreateFunction function)96     MediaEngineFactory::SetCreateFunction(MediaEngineCreateFunction function) {
97   MediaEngineCreateFunction old_function = create_function_;
98   create_function_ = function;
99   return old_function;
100 };
101 
Create()102 MediaEngineInterface* MediaEngineFactory::Create() {
103   if (create_function_) {
104     return create_function_();
105   } else {
106 #if defined(HAVE_LINPHONE)
107     return new LinphoneMediaEngine("", "");
108 #elif defined(AUDIO_ENG_NAME) && defined(VIDEO_ENG_NAME)
109     return new CompositeMediaEngine<AUDIO_ENG_NAME, VIDEO_ENG_NAME>();
110 #else
111     return new NullMediaEngine();
112 #endif
113   }
114 }
115 
116 };  // namespace cricket
117 
118 #endif  // DISABLE_MEDIA_ENGINE_FACTORY
119