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