2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
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.
11 #include "webrtc/engine_configurations.h"
12 #if defined(COCOA_RENDERING)
14 #import "cocoa_render_view.h"
16 #include "video_render_mac_cocoa_impl.h"
17 #include "critical_section_wrapper.h"
18 #include "video_render_nsopengl.h"
23 VideoRenderMacCocoaImpl::VideoRenderMacCocoaImpl(const int32_t id,
24 const VideoRenderType videoRenderType,
26 const bool fullscreen) :
28 _renderMacCocoaCritsect(*CriticalSectionWrapper::CreateCriticalSection()),
29 _fullScreen(fullscreen),
33 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
36 VideoRenderMacCocoaImpl::~VideoRenderMacCocoaImpl()
38 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Destructor %s:%d", __FUNCTION__, __LINE__);
39 delete &_renderMacCocoaCritsect;
42 delete _ptrCocoaRender;
43 _ptrCocoaRender = NULL;
48 VideoRenderMacCocoaImpl::Init()
51 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
52 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d", __FUNCTION__, __LINE__);
54 // cast ptrWindow from void* to CocoaRenderer. Void* was once NSOpenGLView, and CocoaRenderer is NSOpenGLView.
55 _ptrCocoaRender = new VideoRenderNSOpenGL((CocoaRenderView*)_ptrWindow, _fullScreen, _id);
58 WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
61 int retVal = _ptrCocoaRender->Init();
64 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Failed to init %s:%d", __FUNCTION__, __LINE__);
72 VideoRenderMacCocoaImpl::ChangeUniqueId(const int32_t id)
74 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
75 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", __FUNCTION__);
80 _ptrCocoaRender->ChangeUniqueID(_id);
87 VideoRenderMacCocoaImpl::ChangeWindow(void* window)
90 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
91 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s changing ID to ", __FUNCTION__, window);
101 _ptrCocoaRender->ChangeWindow((CocoaRenderView*)_ptrWindow);
107 VideoRenderMacCocoaImpl::AddIncomingRenderStream(const uint32_t streamId,
108 const uint32_t zOrder,
114 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
115 WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s", __FUNCTION__);
116 VideoChannelNSOpenGL* nsOpenGLChannel = NULL;
124 nsOpenGLChannel = _ptrCocoaRender->CreateNSGLChannel(streamId, zOrder, left, top, right, bottom);
127 return nsOpenGLChannel;
132 VideoRenderMacCocoaImpl::DeleteIncomingRenderStream(const uint32_t streamId)
134 WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
135 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
136 _ptrCocoaRender->DeleteNSGLChannel(streamId);
142 VideoRenderMacCocoaImpl::GetIncomingRenderStreamProperties(const uint32_t streamId,
149 return _ptrCocoaRender->GetChannelProperties(streamId, zOrder, left, top, right, bottom);
153 VideoRenderMacCocoaImpl::StartRender()
155 return _ptrCocoaRender->StartRender();
159 VideoRenderMacCocoaImpl::StopRender()
161 return _ptrCocoaRender->StopRender();
165 VideoRenderMacCocoaImpl::RenderType()
171 VideoRenderMacCocoaImpl::PerferedVideoType()
177 VideoRenderMacCocoaImpl::FullScreen()
183 VideoRenderMacCocoaImpl::GetGraphicsMemory(uint64_t& totalGraphicsMemory,
184 uint64_t& availableGraphicsMemory) const
186 totalGraphicsMemory = 0;
187 availableGraphicsMemory = 0;
192 VideoRenderMacCocoaImpl::GetScreenResolution(uint32_t& screenWidth,
193 uint32_t& screenHeight) const
195 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
196 NSScreen* mainScreen = [NSScreen mainScreen];
198 NSRect frame = [mainScreen frame];
200 screenWidth = frame.size.width;
201 screenHeight = frame.size.height;
206 VideoRenderMacCocoaImpl::RenderFrameRate(const uint32_t streamId)
208 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
213 VideoRenderMacCocoaImpl::SetStreamCropping(const uint32_t streamId,
222 int32_t VideoRenderMacCocoaImpl::ConfigureRenderer(const uint32_t streamId,
223 const unsigned int zOrder,
233 VideoRenderMacCocoaImpl::SetTransparentBackground(const bool enable)
238 int32_t VideoRenderMacCocoaImpl::SetText(const uint8_t textId,
240 const int32_t textLength,
241 const uint32_t textColorRef,
242 const uint32_t backgroundColorRef,
248 return _ptrCocoaRender->SetText(textId, text, textLength, textColorRef, backgroundColorRef, left, top, right, bottom);
251 int32_t VideoRenderMacCocoaImpl::SetBitmap(const void* bitMap,
252 const uint8_t pictureId,
253 const void* colorKey,
262 int32_t VideoRenderMacCocoaImpl::FullScreenRender(void* window, const bool enable)
267 } // namespace webrtc
269 #endif // COCOA_RENDERING