blob: 8a4067cda05dcc379edaa8df7269b15e4868471c [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
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000011#include "video_engine/vie_impl.h"
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000012#include "system_wrappers/interface/trace.h"
13
leozwang@google.com22b699d2011-08-09 17:27:33 +000014#ifdef WEBRTC_ANDROID
andrew@webrtc.org94caca72012-10-30 21:58:00 +000015#include "webrtc/modules/video_capture/include/video_capture_factory.h"
andrew@webrtc.org9841d922012-10-31 05:22:11 +000016#include "webrtc/modules/video_render/include/video_render.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000017#endif
18
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000019namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000020
andresp@webrtc.org44272732013-05-08 19:20:23 +000021enum { kModuleId = 0 };
niklase@google.com470e71d2011-07-07 08:21:25 +000022
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000023VideoEngine* VideoEngine::Create() {
andresp@webrtc.org44272732013-05-08 19:20:23 +000024 return new VideoEngineImpl();
niklase@google.com470e71d2011-07-07 08:21:25 +000025}
26
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000027bool VideoEngine::Delete(VideoEngine*& video_engine) {
28 if (!video_engine) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000029 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000030 "VideoEngine::Delete - No argument");
31 return false;
32 }
andresp@webrtc.org44272732013-05-08 19:20:23 +000033 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000034 "VideoEngine::Delete(vie = 0x%p)", video_engine);
andrew@webrtc.orgd72262d2013-05-09 02:12:07 +000035 VideoEngineImpl* vie_impl = static_cast<VideoEngineImpl*>(video_engine);
niklase@google.com470e71d2011-07-07 08:21:25 +000036
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000037 // Check all reference counters.
38 ViEBaseImpl* vie_base = vie_impl;
39 if (vie_base->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000040 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000041 "ViEBase ref count: %d", vie_base->GetCount());
42 return false;
43 }
niklase@google.com470e71d2011-07-07 08:21:25 +000044#ifdef WEBRTC_VIDEO_ENGINE_CAPTURE_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000045 ViECaptureImpl* vie_capture = vie_impl;
46 if (vie_capture->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000047 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000048 "ViECapture ref count: %d", vie_capture->GetCount());
49 return false;
50 }
niklase@google.com470e71d2011-07-07 08:21:25 +000051#endif
52#ifdef WEBRTC_VIDEO_ENGINE_CODEC_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000053 ViECodecImpl* vie_codec = vie_impl;
54 if (vie_codec->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000055 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000056 "ViECodec ref count: %d", vie_codec->GetCount());
57 return false;
58 }
niklase@google.com470e71d2011-07-07 08:21:25 +000059#endif
60#ifdef WEBRTC_VIDEO_ENGINE_ENCRYPTION_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000061 ViEEncryptionImpl* vie_encryption = vie_impl;
62 if (vie_encryption->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000063 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000064 "ViEEncryption ref count: %d", vie_encryption->GetCount());
65 return false;
66 }
niklase@google.com470e71d2011-07-07 08:21:25 +000067#endif
68#ifdef WEBRTC_VIDEO_ENGINE_EXTERNAL_CODEC_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000069 ViEExternalCodecImpl* vie_external_codec = vie_impl;
70 if (vie_external_codec->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000071 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000072 "ViEEncryption ref count: %d", vie_encryption->GetCount());
73 return false;
74 }
niklase@google.com470e71d2011-07-07 08:21:25 +000075#endif
76#ifdef WEBRTC_VIDEO_ENGINE_FILE_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000077 ViEFileImpl* vie_file = vie_impl;
78 if (vie_file->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000079 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000080 "ViEFile ref count: %d", vie_file->GetCount());
81 return false;
82 }
niklase@google.com470e71d2011-07-07 08:21:25 +000083#endif
84#ifdef WEBRTC_VIDEO_ENGINE_IMAGE_PROCESS_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000085 ViEImageProcessImpl* vie_image_process = vie_impl;
86 if (vie_image_process->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000087 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000088 "ViEImageProcess ref count: %d",
89 vie_image_process->GetCount());
90 return false;
91 }
niklase@google.com470e71d2011-07-07 08:21:25 +000092#endif
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000093 ViENetworkImpl* vie_network = vie_impl;
94 if (vie_network->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +000095 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000096 "ViENetwork ref count: %d", vie_network->GetCount());
97 return false;
98 }
niklase@google.com470e71d2011-07-07 08:21:25 +000099#ifdef WEBRTC_VIDEO_ENGINE_RENDER_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000100 ViERenderImpl* vie_render = vie_impl;
101 if (vie_render->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000102 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000103 "ViERender ref count: %d", vie_render->GetCount());
104 return false;
105 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000106#endif
107#ifdef WEBRTC_VIDEO_ENGINE_RTP_RTCP_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000108 ViERTP_RTCPImpl* vie_rtp_rtcp = vie_impl;
109 if (vie_rtp_rtcp->GetCount() > 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000110 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000111 "ViERTP_RTCP ref count: %d", vie_rtp_rtcp->GetCount());
112 return false;
113 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000114#endif
115
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000116 delete vie_impl;
117 vie_impl = NULL;
118 video_engine = NULL;
niklase@google.com470e71d2011-07-07 08:21:25 +0000119
andresp@webrtc.org44272732013-05-08 19:20:23 +0000120 WEBRTC_TRACE(kTraceInfo, kTraceVideo, kModuleId,
121 "%s: instance deleted.", __FUNCTION__);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000122 return true;
niklase@google.com470e71d2011-07-07 08:21:25 +0000123}
124
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000125int VideoEngine::SetTraceFile(const char* file_nameUTF8,
126 const bool add_file_counter) {
127 if (!file_nameUTF8) {
128 return -1;
129 }
130 if (Trace::SetTraceFile(file_nameUTF8, add_file_counter) == -1) {
131 return -1;
132 }
andresp@webrtc.org44272732013-05-08 19:20:23 +0000133 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000134 "SetTraceFileName(file_nameUTF8 = %s, add_file_counter = %d",
135 file_nameUTF8, add_file_counter);
136 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000137}
138
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000139int VideoEngine::SetTraceFilter(const unsigned int filter) {
pbos@webrtc.orgb238d122013-04-09 13:41:51 +0000140 uint32_t old_filter = 0;
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000141 Trace::LevelFilter(old_filter);
niklase@google.com470e71d2011-07-07 08:21:25 +0000142
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000143 if (filter == kTraceNone && old_filter != kTraceNone) {
144 // Do the logging before turning it off.
andresp@webrtc.org44272732013-05-08 19:20:23 +0000145 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000146 "SetTraceFilter(filter = 0x%x)", filter);
147 }
niklase@google.com470e71d2011-07-07 08:21:25 +0000148
pbos@webrtc.orgb238d122013-04-09 13:41:51 +0000149 int32_t error = Trace::SetLevelFilter(filter);
andresp@webrtc.org44272732013-05-08 19:20:23 +0000150 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
niklase@google.com470e71d2011-07-07 08:21:25 +0000151 "SetTraceFilter(filter = 0x%x)", filter);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000152 if (error != 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000153 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000154 "SetTraceFilter error: %d", error);
155 return -1;
156 }
157 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000158}
159
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000160int VideoEngine::SetTraceCallback(TraceCallback* callback) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000161 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000162 "SetTraceCallback(TraceCallback = 0x%p)", callback);
163 return Trace::SetTraceCallback(callback);
niklase@google.com470e71d2011-07-07 08:21:25 +0000164}
165
leozwang@webrtc.orgf9cd6932012-01-23 16:56:13 +0000166int VideoEngine::SetAndroidObjects(void* javaVM, void* javaContext) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000167 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
niklase@google.com470e71d2011-07-07 08:21:25 +0000168 "SetAndroidObjects()");
169
leozwang@webrtc.org77609632012-07-13 22:00:43 +0000170#if defined(WEBRTC_ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD)
171 if (SetCaptureAndroidVM(javaVM, javaContext) != 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000172 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
leozwang@webrtc.org77609632012-07-13 22:00:43 +0000173 "Could not set capture Android VM");
niklase@google.com470e71d2011-07-07 08:21:25 +0000174 return -1;
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000175 }
leozwang@webrtc.org77609632012-07-13 22:00:43 +0000176 if (SetRenderAndroidVM(javaVM) != 0) {
andresp@webrtc.org44272732013-05-08 19:20:23 +0000177 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
leozwang@webrtc.org77609632012-07-13 22:00:43 +0000178 "Could not set render Android VM");
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000179 return -1;
180 }
181 return 0;
182#else
andresp@webrtc.org44272732013-05-08 19:20:23 +0000183 WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000184 "WEBRTC_ANDROID not defined for VideoEngine::SetAndroidObjects");
185 return -1;
niklase@google.com470e71d2011-07-07 08:21:25 +0000186#endif
187}
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000188
189} // namespace webrtc