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#if !defined(DISABLE_MEDIA_ENGINE_FACTORY) 31 32#if defined(HAVE_WEBRTC_VOICE) && defined(HAVE_WEBRTC_VIDEO) 33#include "talk/media/webrtc/webrtcmediaengine.h" 34#endif // HAVE_WEBRTC_VOICE && HAVE_WEBRTC_VIDEO 35 36#ifdef HAVE_CONFIG_H 37#include "config.h" 38#endif // HAVE_CONFIG 39 40namespace cricket { 41 42MediaEngineFactory::MediaEngineCreateFunction 43 MediaEngineFactory::create_function_ = NULL; 44 45MediaEngineFactory::MediaEngineCreateFunction 46 MediaEngineFactory::SetCreateFunction(MediaEngineCreateFunction function) { 47 MediaEngineCreateFunction old_function = create_function_; 48 create_function_ = function; 49 return old_function; 50} 51 52// TODO(pthatcher): Remove this method and require all the users of 53// media engines to choose one explictly, or at least remove the 54// default behavior and require calling SetCreateFunction explictly. 55MediaEngineInterface* MediaEngineFactory::Create() { 56 if (create_function_) { 57 return create_function_(); 58 } 59#if defined(HAVE_WEBRTC_VOICE) && defined(HAVE_WEBRTC_VIDEO) 60 return WebRtcMediaEngineFactory::Create(); 61#else 62 return new NullMediaEngine(); 63#endif // HAVE_WEBRTC_VIDEO && HAVE_WEBRTC_VOICE 64} 65 66}; // namespace cricket 67 68#endif // DISABLE_MEDIA_ENGINE_FACTORY 69