Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / video_engine / vie_impl.cc
1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
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
11 #include "webrtc/video_engine/vie_impl.h"
12
13 #include "webrtc/common.h"
14 #include "webrtc/system_wrappers/interface/trace.h"
15
16 #ifdef WEBRTC_ANDROID
17 #include "webrtc/modules/video_capture/include/video_capture_factory.h"
18 #include "webrtc/modules/video_render/include/video_render.h"
19 #endif
20
21 namespace webrtc {
22
23 enum { kModuleId = 0 };
24
25 VideoEngine* VideoEngine::Create() {
26   return new VideoEngineImpl(new Config(), true /* owns_config */);
27 }
28
29 VideoEngine* VideoEngine::Create(const Config& config) {
30   return new VideoEngineImpl(&config, false /* owns_config */);
31 }
32
33 bool VideoEngine::Delete(VideoEngine*& video_engine) {
34   if (!video_engine) {
35     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
36                  "VideoEngine::Delete - No argument");
37     return false;
38   }
39   WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
40                "VideoEngine::Delete(vie = 0x%p)", video_engine);
41   VideoEngineImpl* vie_impl = static_cast<VideoEngineImpl*>(video_engine);
42
43   // Check all reference counters.
44   ViEBaseImpl* vie_base = vie_impl;
45   if (vie_base->GetCount() > 0) {
46     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
47                  "ViEBase ref count: %d", vie_base->GetCount());
48     return false;
49   }
50 #ifdef WEBRTC_VIDEO_ENGINE_CAPTURE_API
51   ViECaptureImpl* vie_capture = vie_impl;
52   if (vie_capture->GetCount() > 0) {
53     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
54                  "ViECapture ref count: %d", vie_capture->GetCount());
55     return false;
56   }
57 #endif
58 #ifdef WEBRTC_VIDEO_ENGINE_CODEC_API
59   ViECodecImpl* vie_codec = vie_impl;
60   if (vie_codec->GetCount() > 0) {
61     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
62                  "ViECodec ref count: %d", vie_codec->GetCount());
63     return false;
64   }
65 #endif
66 #ifdef WEBRTC_VIDEO_ENGINE_EXTERNAL_CODEC_API
67   ViEExternalCodecImpl* vie_external_codec = vie_impl;
68   if (vie_external_codec->GetCount() > 0) {
69     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
70         "ViEExternalCodec ref count: %d", vie_external_codec->GetCount());
71     return false;
72   }
73 #endif
74 #ifdef WEBRTC_VIDEO_ENGINE_FILE_API
75   ViEFileImpl* vie_file = vie_impl;
76   if (vie_file->GetCount() > 0) {
77     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
78                  "ViEFile ref count: %d", vie_file->GetCount());
79     return false;
80   }
81 #endif
82 #ifdef WEBRTC_VIDEO_ENGINE_IMAGE_PROCESS_API
83   ViEImageProcessImpl* vie_image_process = vie_impl;
84   if (vie_image_process->GetCount() > 0) {
85     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
86                  "ViEImageProcess ref count: %d",
87                  vie_image_process->GetCount());
88     return false;
89   }
90 #endif
91   ViENetworkImpl* vie_network = vie_impl;
92   if (vie_network->GetCount() > 0) {
93     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
94                  "ViENetwork ref count: %d", vie_network->GetCount());
95     return false;
96   }
97 #ifdef WEBRTC_VIDEO_ENGINE_RENDER_API
98   ViERenderImpl* vie_render = vie_impl;
99   if (vie_render->GetCount() > 0) {
100     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
101                  "ViERender ref count: %d", vie_render->GetCount());
102     return false;
103   }
104 #endif
105 #ifdef WEBRTC_VIDEO_ENGINE_RTP_RTCP_API
106   ViERTP_RTCPImpl* vie_rtp_rtcp = vie_impl;
107   if (vie_rtp_rtcp->GetCount() > 0) {
108     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
109                  "ViERTP_RTCP ref count: %d", vie_rtp_rtcp->GetCount());
110     return false;
111   }
112 #endif
113
114   delete vie_impl;
115   vie_impl = NULL;
116   video_engine = NULL;
117
118   WEBRTC_TRACE(kTraceInfo, kTraceVideo, kModuleId,
119                "%s: instance deleted.", __FUNCTION__);
120   return true;
121 }
122
123 int 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   }
131   WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
132                "SetTraceFileName(file_nameUTF8 = %s, add_file_counter = %d",
133                file_nameUTF8, add_file_counter);
134   return 0;
135 }
136
137 int VideoEngine::SetTraceFilter(const unsigned int filter) {
138   uint32_t old_filter = Trace::level_filter();
139
140   if (filter == kTraceNone && old_filter != kTraceNone) {
141     // Do the logging before turning it off.
142     WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
143                  "SetTraceFilter(filter = 0x%x)", filter);
144   }
145
146   Trace::set_level_filter(filter);
147   WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
148                "SetTraceFilter(filter = 0x%x)", filter);
149   return 0;
150 }
151
152 int VideoEngine::SetTraceCallback(TraceCallback* callback) {
153   WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
154                "SetTraceCallback(TraceCallback = 0x%p)", callback);
155   return Trace::SetTraceCallback(callback);
156 }
157
158 #if defined(ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD)
159 int VideoEngine::SetAndroidObjects(JavaVM* javaVM) {
160   WEBRTC_TRACE(kTraceApiCall, kTraceVideo, kModuleId,
161                "SetAndroidObjects()");
162
163   if (SetCaptureAndroidVM(javaVM) != 0) {
164     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
165                  "Could not set capture Android VM");
166     return -1;
167   }
168   if (SetRenderAndroidVM(javaVM) != 0) {
169     WEBRTC_TRACE(kTraceError, kTraceVideo, kModuleId,
170                  "Could not set render Android VM");
171     return -1;
172   }
173   return 0;
174 }
175 #endif
176
177 }  // namespace webrtc