Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / modules / video_render / mac / video_render_mac_cocoa_impl.mm
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/engine_configurations.h"
12 #if defined(COCOA_RENDERING)
13
14 #import "cocoa_render_view.h"
15
16 #include "video_render_mac_cocoa_impl.h"
17 #include "critical_section_wrapper.h"
18 #include "video_render_nsopengl.h"
19 #include "trace.h"
20
21 namespace webrtc {
22
23 VideoRenderMacCocoaImpl::VideoRenderMacCocoaImpl(const int32_t id,
24         const VideoRenderType videoRenderType,
25         void* window,
26         const bool fullscreen) :
27 _id(id),
28 _renderMacCocoaCritsect(*CriticalSectionWrapper::CreateCriticalSection()),
29 _fullScreen(fullscreen),
30 _ptrWindow(window)
31 {
32
33     WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
34 }
35
36 VideoRenderMacCocoaImpl::~VideoRenderMacCocoaImpl()
37 {
38     WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Destructor %s:%d", __FUNCTION__, __LINE__);
39     delete &_renderMacCocoaCritsect;
40     if (_ptrCocoaRender)
41     {
42         delete _ptrCocoaRender;
43         _ptrCocoaRender = NULL;
44     }
45 }
46
47 int32_t
48 VideoRenderMacCocoaImpl::Init()
49 {
50
51     CriticalSectionScoped cs(&_renderMacCocoaCritsect);
52     WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d", __FUNCTION__, __LINE__);
53
54     // cast ptrWindow from void* to CocoaRenderer. Void* was once NSOpenGLView, and CocoaRenderer is NSOpenGLView.
55     _ptrCocoaRender = new VideoRenderNSOpenGL((CocoaRenderView*)_ptrWindow, _fullScreen, _id);
56     if (!_ptrWindow)
57     {
58         WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
59         return -1;
60     }
61     int retVal = _ptrCocoaRender->Init();
62     if (retVal == -1)
63     {
64         WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Failed to init %s:%d", __FUNCTION__, __LINE__);
65         return -1;
66     }
67
68     return 0;
69 }
70
71 int32_t
72 VideoRenderMacCocoaImpl::ChangeUniqueId(const int32_t id)
73 {
74     CriticalSectionScoped cs(&_renderMacCocoaCritsect);
75     WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", __FUNCTION__);
76     _id = id;
77
78     if(_ptrCocoaRender)
79     {
80         _ptrCocoaRender->ChangeUniqueID(_id);
81     }
82
83     return 0;
84 }
85
86 int32_t
87 VideoRenderMacCocoaImpl::ChangeWindow(void* window)
88 {
89
90     CriticalSectionScoped cs(&_renderMacCocoaCritsect);
91     WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s changing ID to ", __FUNCTION__, window);
92
93     if (window == NULL)
94     {
95         return -1;
96     }
97     _ptrWindow = window;
98
99
100     _ptrWindow = window;
101     _ptrCocoaRender->ChangeWindow((CocoaRenderView*)_ptrWindow);
102
103     return 0;
104 }
105
106 VideoRenderCallback*
107 VideoRenderMacCocoaImpl::AddIncomingRenderStream(const uint32_t streamId,
108         const uint32_t zOrder,
109         const float left,
110         const float top,
111         const float right,
112         const float bottom)
113 {
114     CriticalSectionScoped cs(&_renderMacCocoaCritsect);
115     WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s", __FUNCTION__);
116     VideoChannelNSOpenGL* nsOpenGLChannel = NULL;
117
118     if(!_ptrWindow)
119     {
120     }
121
122     if(!nsOpenGLChannel)
123     {
124         nsOpenGLChannel = _ptrCocoaRender->CreateNSGLChannel(streamId, zOrder, left, top, right, bottom);
125     }
126
127     return nsOpenGLChannel;
128
129 }
130
131 int32_t
132 VideoRenderMacCocoaImpl::DeleteIncomingRenderStream(const uint32_t streamId)
133 {
134     WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
135     CriticalSectionScoped cs(&_renderMacCocoaCritsect);
136     _ptrCocoaRender->DeleteNSGLChannel(streamId);
137
138     return 0;
139 }
140
141 int32_t
142 VideoRenderMacCocoaImpl::GetIncomingRenderStreamProperties(const uint32_t streamId,
143         uint32_t& zOrder,
144         float& left,
145         float& top,
146         float& right,
147         float& bottom) const
148 {
149     return _ptrCocoaRender->GetChannelProperties(streamId, zOrder, left, top, right, bottom);
150 }
151
152 int32_t
153 VideoRenderMacCocoaImpl::StartRender()
154 {
155     return _ptrCocoaRender->StartRender();
156 }
157
158 int32_t
159 VideoRenderMacCocoaImpl::StopRender()
160 {
161     return _ptrCocoaRender->StopRender();
162 }
163
164 VideoRenderType
165 VideoRenderMacCocoaImpl::RenderType()
166 {
167     return kRenderCocoa;
168 }
169
170 RawVideoType
171 VideoRenderMacCocoaImpl::PerferedVideoType()
172 {
173     return kVideoI420;
174 }
175
176 bool
177 VideoRenderMacCocoaImpl::FullScreen()
178 {
179     return false;
180 }
181
182 int32_t
183 VideoRenderMacCocoaImpl::GetGraphicsMemory(uint64_t& totalGraphicsMemory,
184         uint64_t& availableGraphicsMemory) const
185 {
186     totalGraphicsMemory = 0;
187     availableGraphicsMemory = 0;
188     return 0;
189 }
190
191 int32_t
192 VideoRenderMacCocoaImpl::GetScreenResolution(uint32_t& screenWidth,
193         uint32_t& screenHeight) const
194 {
195     CriticalSectionScoped cs(&_renderMacCocoaCritsect);
196     NSScreen* mainScreen = [NSScreen mainScreen];
197
198     NSRect frame = [mainScreen frame];
199
200     screenWidth = frame.size.width;
201     screenHeight = frame.size.height;
202     return 0;
203 }
204
205 uint32_t
206 VideoRenderMacCocoaImpl::RenderFrameRate(const uint32_t streamId)
207 {
208     CriticalSectionScoped cs(&_renderMacCocoaCritsect);
209     return 0;
210 }
211
212 int32_t
213 VideoRenderMacCocoaImpl::SetStreamCropping(const uint32_t streamId,
214         const float left,
215         const float top,
216         const float right,
217         const float bottom)
218 {
219     return 0;
220 }
221
222 int32_t VideoRenderMacCocoaImpl::ConfigureRenderer(const uint32_t streamId,
223                                                    const unsigned int zOrder,
224                                                    const float left,
225                                                    const float top,
226                                                    const float right,
227                                                    const float bottom)
228 {
229     return 0;
230 }
231
232 int32_t
233 VideoRenderMacCocoaImpl::SetTransparentBackground(const bool enable)
234 {
235     return 0;
236 }
237
238 int32_t VideoRenderMacCocoaImpl::SetText(const uint8_t textId,
239                                          const uint8_t* text,
240                                          const int32_t textLength,
241                                          const uint32_t textColorRef,
242                                          const uint32_t backgroundColorRef,
243                                          const float left,
244                                          const float top,
245                                          const float right,
246                                          const float bottom)
247 {
248     return _ptrCocoaRender->SetText(textId, text, textLength, textColorRef, backgroundColorRef, left, top, right, bottom);
249 }
250
251 int32_t VideoRenderMacCocoaImpl::SetBitmap(const void* bitMap,
252                                            const uint8_t pictureId,
253                                            const void* colorKey,
254                                            const float left,
255                                            const float top,
256                                            const float right,
257                                            const float bottom)
258 {
259     return 0;
260 }
261
262 int32_t VideoRenderMacCocoaImpl::FullScreenRender(void* window, const bool enable)
263 {
264     return -1;
265 }
266
267 }  // namespace webrtc
268
269 #endif // COCOA_RENDERING