1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.org#include "webrtc/video_engine/vie_impl.h" 12ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.org 13ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.org#include "webrtc/common.h" 143468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org#include "webrtc/system_wrappers/interface/logging.h" 15ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.org#include "webrtc/system_wrappers/interface/trace.h" 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1990f05ed8888e93e3ae5b7d2a2534f77ad8b58aa2andresp@webrtc.orgenum { kModuleId = 0 }; 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVideoEngine* VideoEngine::Create() { 22ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.org return new VideoEngineImpl(new Config(), true /* owns_config */); 23ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.org} 24ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.org 25ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.orgVideoEngine* VideoEngine::Create(const Config& config) { 26ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.org return new VideoEngineImpl(&config, false /* owns_config */); 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool VideoEngine::Delete(VideoEngine*& video_engine) { 303468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org if (!video_engine) 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 323468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org 333468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG_F(LS_INFO); 347ab726855f2ceb9ff6365e3240668d58f45e6761andrew@webrtc.org VideoEngineImpl* vie_impl = static_cast<VideoEngineImpl*>(video_engine); 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Check all reference counters. 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViEBaseImpl* vie_base = vie_impl; 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (vie_base->GetCount() > 0) { 393468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG(LS_ERROR) << "ViEBase ref count > 0: " << vie_base->GetCount(); 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VIDEO_ENGINE_CAPTURE_API 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViECaptureImpl* vie_capture = vie_impl; 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (vie_capture->GetCount() > 0) { 453468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG(LS_ERROR) << "ViECapture ref count > 0: " << vie_capture->GetCount(); 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VIDEO_ENGINE_CODEC_API 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViECodecImpl* vie_codec = vie_impl; 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (vie_codec->GetCount() > 0) { 523468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG(LS_ERROR) << "ViECodec ref count > 0: " << vie_codec->GetCount(); 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VIDEO_ENGINE_EXTERNAL_CODEC_API 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViEExternalCodecImpl* vie_external_codec = vie_impl; 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (vie_external_codec->GetCount() > 0) { 593468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG(LS_ERROR) << "ViEExternalCodec ref count > 0: " 603468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org << vie_external_codec->GetCount(); 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VIDEO_ENGINE_FILE_API 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViEFileImpl* vie_file = vie_impl; 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (vie_file->GetCount() > 0) { 673468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG(LS_ERROR) << "ViEFile ref count > 0: " << vie_file->GetCount(); 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VIDEO_ENGINE_IMAGE_PROCESS_API 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViEImageProcessImpl* vie_image_process = vie_impl; 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (vie_image_process->GetCount() > 0) { 743468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG(LS_ERROR) << "ViEImageProcess ref count > 0: " 753468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org << vie_image_process->GetCount(); 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViENetworkImpl* vie_network = vie_impl; 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (vie_network->GetCount() > 0) { 813468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG(LS_ERROR) << "ViENetwork ref count > 0: " << vie_network->GetCount(); 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VIDEO_ENGINE_RENDER_API 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViERenderImpl* vie_render = vie_impl; 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (vie_render->GetCount() > 0) { 873468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG(LS_ERROR) << "ViERender ref count > 0: " << vie_render->GetCount(); 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VIDEO_ENGINE_RTP_RTCP_API 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViERTP_RTCPImpl* vie_rtp_rtcp = vie_impl; 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (vie_rtp_rtcp->GetCount() > 0) { 943468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG(LS_ERROR) << "ViERTP_RTCP ref count > 0: " << vie_rtp_rtcp->GetCount(); 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete vie_impl; 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org vie_impl = NULL; 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org video_engine = NULL; 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return true; 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VideoEngine::SetTraceFile(const char* file_nameUTF8, 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const bool add_file_counter) { 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!file_nameUTF8) { 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (Trace::SetTraceFile(file_nameUTF8, add_file_counter) == -1) { 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1143468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG_F(LS_INFO) << "filename: " << file_nameUTF8 1153468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org << " add_file_counter: " << (add_file_counter ? "yes" : "no"); 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VideoEngine::SetTraceFilter(const unsigned int filter) { 12006eaa5465d57f416c14bb3a587ba4146290d6a58andrew@webrtc.org uint32_t old_filter = Trace::level_filter(); 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (filter == kTraceNone && old_filter != kTraceNone) { 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Do the logging before turning it off. 1243468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG_F(LS_INFO) << "filter: " << filter; 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 12706eaa5465d57f416c14bb3a587ba4146290d6a58andrew@webrtc.org Trace::set_level_filter(filter); 1283468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG_F(LS_INFO) << "filter: " << filter; 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VideoEngine::SetTraceCallback(TraceCallback* callback) { 1333468f20608200e23fa0ad7435490260419cf70c5pbos@webrtc.org LOG_F(LS_INFO); 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return Trace::SetTraceCallback(callback); 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 138