//
// libjingle
// Copyright 2004 Google Inc.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//  1. Redistributions of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//  2. Redistributions in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//  3. The name of the author may not be used to endorse or promote products
//     derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//

#include "talk/media/base/mediaengine.h"

#if !defined(DISABLE_MEDIA_ENGINE_FACTORY)

#if defined(HAVE_WEBRTC_VOICE) && defined(HAVE_WEBRTC_VIDEO)
#include "talk/media/webrtc/webrtcmediaengine.h"
#endif  // HAVE_WEBRTC_VOICE && HAVE_WEBRTC_VIDEO

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif  // HAVE_CONFIG

namespace cricket {

MediaEngineFactory::MediaEngineCreateFunction
    MediaEngineFactory::create_function_ = NULL;

MediaEngineFactory::MediaEngineCreateFunction
    MediaEngineFactory::SetCreateFunction(MediaEngineCreateFunction function) {
  MediaEngineCreateFunction old_function = create_function_;
  create_function_ = function;
  return old_function;
}

// TODO(pthatcher): Remove this method and require all the users of
// media engines to choose one explictly, or at least remove the
// default behavior and require calling SetCreateFunction explictly.
MediaEngineInterface* MediaEngineFactory::Create() {
  if (create_function_) {
    return create_function_();
  }
#if defined(HAVE_WEBRTC_VOICE) && defined(HAVE_WEBRTC_VIDEO)
  return WebRtcMediaEngineFactory::Create();
#else
  return new NullMediaEngine();
#endif  // HAVE_WEBRTC_VIDEO && HAVE_WEBRTC_VOICE
}

};  // namespace cricket

#endif  // DISABLE_MEDIA_ENGINE_FACTORY
