blob: c4f2b1a3719ae1c4489109f3451c306b9fd05919 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
pwestin@webrtc.orgae197202012-04-04 14:43:54 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
andresp@webrtc.org7707d062013-05-13 10:50:50 +000011#include "webrtc/video_engine/vie_impl.h"
12
13#include "webrtc/common.h"
14#include "webrtc/system_wrappers/interface/trace.h"
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000015
leozwang@google.com22b699d2011-08-09 17:27:33 +000016#ifdef WEBRTC_ANDROID
andrew@webrtc.org94caca72012-10-30 21:58:00 +000017#include "webrtc/modules/video_capture/include/video_capture_factory.h"
andrew@webrtc.org9841d922012-10-31 05:22:11 +000018#include "webrtc/modules/video_render/include/video_render.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000019#endif
20
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000021namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000022
andresp@webrtc.org44272732013-05-08 19:20:23 +000023enum { kModuleId = 0 };
niklase@google.com470e71d2011-07-07 08:21:25 +000024
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000025VideoEngine* VideoEngine::Create() {
andresp@webrtc.org7707d062013-05-13 10:50:50 +000026 return new VideoEngineImpl(new Config(), true /* owns_config */);
27}
28
29VideoEngine* VideoEngine::Create(const Config& config) {
30 return new VideoEngineImpl(&config, false /* owns_config */);
niklase@google.com470e71d2011-07-07 08:21:25 +000031}
32
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000033bool VideoEngine::Delete(VideoEngine*& video_engine) {
34 if (!video_engine) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000035 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000036 "VideoEngine::Delete - No argument");
37 return false;
38 }
andresp@webrtc.org44272732013-05-08 19:20:23 +000039 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000040 "VideoEngine::Delete(vie = 0x%p)", video_engine);
andrew@webrtc.orgd72262d2013-05-09 02:12:07 +000041 VideoEngineImpl* vie_impl = static_cast<VideoEngineImpl*>(video_engine);
niklase@google.com470e71d2011-07-07 08:21:25 +000042
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000043 // Check all reference counters.
44 ViEBaseImpl* vie_base = vie_impl;
45 if (vie_base->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000046 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000047 "ViEBase ref count: %d", vie_base->GetCount());
48 return false;
49 }
niklase@google.com470e71d2011-07-07 08:21:25 +000050#ifdef WEBRTC_VIDEO_ENGINE_CAPTURE_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000051 ViECaptureImpl* vie_capture = vie_impl;
52 if (vie_capture->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000053 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000054 "ViECapture ref count: %d", vie_capture->GetCount());
55 return false;
56 }
niklase@google.com470e71d2011-07-07 08:21:25 +000057#endif
58#ifdef WEBRTC_VIDEO_ENGINE_CODEC_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000059 ViECodecImpl* vie_codec = vie_impl;
60 if (vie_codec->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000061 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000062 "ViECodec ref count: %d", vie_codec->GetCount());
63 return false;
64 }
niklase@google.com470e71d2011-07-07 08:21:25 +000065#endif
niklase@google.com470e71d2011-07-07 08:21:25 +000066#ifdef WEBRTC_VIDEO_ENGINE_EXTERNAL_CODEC_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000067 ViEExternalCodecImpl* vie_external_codec = vie_impl;
68 if (vie_external_codec->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000069 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
solenberg@webrtc.orgfc320462014-02-11 15:27:49 +000070 "ViEExternalCodec ref count: %d", vie_external_codec->GetCount());
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000071 return false;
72 }
niklase@google.com470e71d2011-07-07 08:21:25 +000073#endif
74#ifdef WEBRTC_VIDEO_ENGINE_FILE_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000075 ViEFileImpl* vie_file = vie_impl;
76 if (vie_file->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000077 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000078 "ViEFile ref count: %d", vie_file->GetCount());
79 return false;
80 }
niklase@google.com470e71d2011-07-07 08:21:25 +000081#endif
82#ifdef WEBRTC_VIDEO_ENGINE_IMAGE_PROCESS_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000083 ViEImageProcessImpl* vie_image_process = vie_impl;
84 if (vie_image_process->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000085 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000086 "ViEImageProcess ref count: %d",
87 vie_image_process->GetCount());
88 return false;
89 }
niklase@google.com470e71d2011-07-07 08:21:25 +000090#endif
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000091 ViENetworkImpl* vie_network = vie_impl;
92 if (vie_network->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000093 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000094 "ViENetwork ref count: %d", vie_network->GetCount());
95 return false;
96 }
niklase@google.com470e71d2011-07-07 08:21:25 +000097#ifdef WEBRTC_VIDEO_ENGINE_RENDER_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000098 ViERenderImpl* vie_render = vie_impl;
99 if (vie_render->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000100 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000101 "ViERender ref count: %d", vie_render->GetCount());
102 return false;
103 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000104#endif
105#ifdef WEBRTC_VIDEO_ENGINE_RTP_RTCP_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000106 ViERTP_RTCPImpl* vie_rtp_rtcp = vie_impl;
107 if (vie_rtp_rtcp->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000108 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000109 "ViERTP_RTCP ref count: %d", vie_rtp_rtcp->GetCount());
110 return false;
111 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000112#endif
113
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000114 delete vie_impl;
115 vie_impl = NULL;
116 video_engine = NULL;
niklase@google.com470e71d2011-07-07 08:21:25 +0000117
andresp@webrtc.org44272732013-05-08 19:20:23 +0000118 WEBRTC_TRACE(kTraceInfo, kTraceVideo, kModuleId,
119 "%s: instance deleted.", __FUNCTION__);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000120 return true;
niklase@google.com470e71d2011-07-07 08:21:25 +0000121}
122
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000123int VideoEngine::SetTraceFile(const char* file_nameUTF8,
124 const bool add_file_counter) {
125 if (!file_nameUTF8) {
126 return -1;
127 }
128 if (Trace::SetTraceFile(file_nameUTF8, add_file_counter) == -1) {
129 return -1;
130 }
andresp@webrtc.org44272732013-05-08 19:20:23 +0000131 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000132 "SetTraceFileName(file_nameUTF8 = %s, add_file_counter = %d",
133 file_nameUTF8, add_file_counter);
134 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000135}
136
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000137int VideoEngine::SetTraceFilter(const unsigned int filter) {
andrew@webrtc.org90805182013-09-05 16:40:43 +0000138 uint32_t old_filter = Trace::level_filter();
niklase@google.com470e71d2011-07-07 08:21:25 +0000139
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000140 if (filter == kTraceNone && old_filter != kTraceNone) {
141 // Do the logging before turning it off.
andresp@webrtc.org44272732013-05-08 19:20:23 +0000142 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000143 "SetTraceFilter(filter = 0x%x)", filter);
144 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000145
andrew@webrtc.org90805182013-09-05 16:40:43 +0000146 Trace::set_level_filter(filter);
andresp@webrtc.org44272732013-05-08 19:20:23 +0000147 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
niklase@google.com470e71d2011-07-07 08:21:25 +0000148 "SetTraceFilter(filter = 0x%x)", filter);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000149 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000150}
151
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000152int VideoEngine::SetTraceCallback(TraceCallback* callback) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000153 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000154 "SetTraceCallback(TraceCallback = 0x%p)", callback);
155 return Trace::SetTraceCallback(callback);
niklase@google.com470e71d2011-07-07 08:21:25 +0000156}
157
fischman@webrtc.org4e65e072013-10-03 18:23:13 +0000158#if defined(ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD)
159int VideoEngine::SetAndroidObjects(JavaVM* javaVM) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000160 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
niklase@google.com470e71d2011-07-07 08:21:25 +0000161 "SetAndroidObjects()");
162
fischman@webrtc.org4e65e072013-10-03 18:23:13 +0000163 if (SetCaptureAndroidVM(javaVM) != 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000164 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
leozwang@webrtc.org77609632012-07-13 22:00:43 +0000165 "Could not set capture Android VM");
niklase@google.com470e71d2011-07-07 08:21:25 +0000166 return -1;
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000167 }
leozwang@webrtc.org77609632012-07-13 22:00:43 +0000168 if (SetRenderAndroidVM(javaVM) != 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000169 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
leozwang@webrtc.org77609632012-07-13 22:00:43 +0000170 "Could not set render Android VM");
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000171 return -1;
172 }
173 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000174}
fischman@webrtc.org4e65e072013-10-03 18:23:13 +0000175#endif
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000176
177} // namespace webrtc