1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "allocator_shim/allocator_stub.h" 6#include "base/command_line.h" 7#include "base/files/file_path.h" 8#include "base/logging.h" 9#include "init_webrtc.h" 10#include "talk/media/webrtc/webrtcmediaengine.h" 11#include "webrtc/base/basictypes.h" 12#include "webrtc/base/logging.h" 13 14#if !defined(LIBPEERCONNECTION_IMPLEMENTATION) || defined(LIBPEERCONNECTION_LIB) 15#error "Only compile the allocator proxy with the shared_library implementation" 16#endif 17 18#if defined(OS_WIN) 19#define ALLOC_EXPORT __declspec(dllexport) 20#else 21#define ALLOC_EXPORT __attribute__((visibility("default"))) 22#endif 23 24#if !defined(OS_MACOSX) && !defined(OS_ANDROID) 25// These are used by our new/delete overrides in 26// allocator_shim/allocator_proxy.cc 27AllocateFunction g_alloc = NULL; 28DellocateFunction g_dealloc = NULL; 29#endif 30 31// Forward declare of the libjingle internal factory and destroy methods for the 32// WebRTC media engine. 33cricket::MediaEngineInterface* CreateWebRtcMediaEngine( 34 webrtc::AudioDeviceModule* adm, 35 webrtc::AudioDeviceModule* adm_sc, 36 cricket::WebRtcVideoEncoderFactory* encoder_factory, 37 cricket::WebRtcVideoDecoderFactory* decoder_factory); 38 39void DestroyWebRtcMediaEngine(cricket::MediaEngineInterface* media_engine); 40 41// Define webrtc:field_trial::FindFullName to provide webrtc with a field trial 42// implementation. The implementation is provided by the loader via the 43// InitializeModule. 44namespace { 45FieldTrialFindFullName g_field_trial_find_ = NULL; 46} 47 48namespace webrtc { 49namespace field_trial { 50std::string FindFullName(const std::string& trial_name) { 51 return g_field_trial_find_(trial_name); 52} 53} // namespace field_trial 54} // namespace webrtc 55 56extern "C" { 57 58// Initialize logging, set the forward allocator functions (not on mac), and 59// return pointers to libjingle's WebRTC factory methods. 60// Called from init_webrtc.cc. 61ALLOC_EXPORT 62bool InitializeModule(const CommandLine& command_line, 63#if !defined(OS_MACOSX) && !defined(OS_ANDROID) 64 AllocateFunction alloc, 65 DellocateFunction dealloc, 66#endif 67 FieldTrialFindFullName field_trial_find, 68 logging::LogMessageHandlerFunction log_handler, 69 webrtc::GetCategoryEnabledPtr trace_get_category_enabled, 70 webrtc::AddTraceEventPtr trace_add_trace_event, 71 CreateWebRtcMediaEngineFunction* create_media_engine, 72 DestroyWebRtcMediaEngineFunction* destroy_media_engine, 73 InitDiagnosticLoggingDelegateFunctionFunction* 74 init_diagnostic_logging) { 75#if !defined(OS_MACOSX) && !defined(OS_ANDROID) 76 g_alloc = alloc; 77 g_dealloc = dealloc; 78#endif 79 80 g_field_trial_find_ = field_trial_find; 81 82 *create_media_engine = &CreateWebRtcMediaEngine; 83 *destroy_media_engine = &DestroyWebRtcMediaEngine; 84 *init_diagnostic_logging = &rtc::InitDiagnosticLoggingDelegateFunction; 85 86 if (CommandLine::Init(0, NULL)) { 87#if !defined(OS_WIN) 88 // This is not needed on Windows since CommandLine::Init has already 89 // done the equivalent thing via the GetCommandLine() API. 90 CommandLine::ForCurrentProcess()->AppendArguments(command_line, true); 91#endif 92 logging::LoggingSettings settings; 93 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; 94 logging::InitLogging(settings); 95 96 // Override the log message handler to forward logs to chrome's handler. 97 logging::SetLogMessageHandler(log_handler); 98 webrtc::SetupEventTracer(trace_get_category_enabled, 99 trace_add_trace_event); 100 } 101 102 return true; 103} 104} // extern "C" 105