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 #include "webrtc/modules/video_render/mac/cocoa_render_view.h"
15 #include "webrtc/modules/video_render/mac/video_render_mac_cocoa_impl.h"
16 #include "webrtc/modules/video_render/mac/video_render_nsopengl.h"
17 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
18 #include "webrtc/system_wrappers/interface/trace.h"
22 VideoRenderMacCocoaImpl::VideoRenderMacCocoaImpl(const int32_t id,
23 const VideoRenderType videoRenderType,
25 const bool fullscreen) :
27 _renderMacCocoaCritsect(*CriticalSectionWrapper::CreateCriticalSection()),
28 _fullScreen(fullscreen),
32 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
35 VideoRenderMacCocoaImpl::~VideoRenderMacCocoaImpl()
37 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Destructor %s:%d", __FUNCTION__, __LINE__);
38 delete &_renderMacCocoaCritsect;
41 delete _ptrCocoaRender;
42 _ptrCocoaRender = NULL;
47 VideoRenderMacCocoaImpl::Init()
50 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
51 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d", __FUNCTION__, __LINE__);
53 // cast ptrWindow from void* to CocoaRenderer. Void* was once NSOpenGLView, and CocoaRenderer is NSOpenGLView.
54 _ptrCocoaRender = new VideoRenderNSOpenGL((CocoaRenderView*)_ptrWindow, _fullScreen, _id);
57 WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
60 int retVal = _ptrCocoaRender->Init();
63 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Failed to init %s:%d", __FUNCTION__, __LINE__);
71 VideoRenderMacCocoaImpl::ChangeUniqueId(const int32_t id)
73 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
74 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", __FUNCTION__);
79 _ptrCocoaRender->ChangeUniqueID(_id);
86 VideoRenderMacCocoaImpl::ChangeWindow(void* window)
89 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
90 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s changing ID to ", __FUNCTION__, window);
100 _ptrCocoaRender->ChangeWindow((CocoaRenderView*)_ptrWindow);
106 VideoRenderMacCocoaImpl::AddIncomingRenderStream(const uint32_t streamId,
107 const uint32_t zOrder,
113 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
114 WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s", __FUNCTION__);
115 VideoChannelNSOpenGL* nsOpenGLChannel = NULL;
123 nsOpenGLChannel = _ptrCocoaRender->CreateNSGLChannel(streamId, zOrder, left, top, right, bottom);
126 return nsOpenGLChannel;
131 VideoRenderMacCocoaImpl::DeleteIncomingRenderStream(const uint32_t streamId)
133 WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
134 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
135 _ptrCocoaRender->DeleteNSGLChannel(streamId);
141 VideoRenderMacCocoaImpl::GetIncomingRenderStreamProperties(const uint32_t streamId,
148 return _ptrCocoaRender->GetChannelProperties(streamId, zOrder, left, top, right, bottom);
152 VideoRenderMacCocoaImpl::StartRender()
154 return _ptrCocoaRender->StartRender();
158 VideoRenderMacCocoaImpl::StopRender()
160 return _ptrCocoaRender->StopRender();
164 VideoRenderMacCocoaImpl::RenderType()
170 VideoRenderMacCocoaImpl::PerferedVideoType()
176 VideoRenderMacCocoaImpl::FullScreen()
182 VideoRenderMacCocoaImpl::GetGraphicsMemory(uint64_t& totalGraphicsMemory,
183 uint64_t& availableGraphicsMemory) const
185 totalGraphicsMemory = 0;
186 availableGraphicsMemory = 0;
191 VideoRenderMacCocoaImpl::GetScreenResolution(uint32_t& screenWidth,
192 uint32_t& screenHeight) const
194 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
195 NSScreen* mainScreen = [NSScreen mainScreen];
197 NSRect frame = [mainScreen frame];
199 screenWidth = frame.size.width;
200 screenHeight = frame.size.height;
205 VideoRenderMacCocoaImpl::RenderFrameRate(const uint32_t streamId)
207 CriticalSectionScoped cs(&_renderMacCocoaCritsect);
212 VideoRenderMacCocoaImpl::SetStreamCropping(const uint32_t streamId,
221 int32_t VideoRenderMacCocoaImpl::ConfigureRenderer(const uint32_t streamId,
222 const unsigned int zOrder,
232 VideoRenderMacCocoaImpl::SetTransparentBackground(const bool enable)
237 int32_t VideoRenderMacCocoaImpl::SetText(const uint8_t textId,
239 const int32_t textLength,
240 const uint32_t textColorRef,
241 const uint32_t backgroundColorRef,
247 return _ptrCocoaRender->SetText(textId, text, textLength, textColorRef, backgroundColorRef, left, top, right, bottom);
250 int32_t VideoRenderMacCocoaImpl::SetBitmap(const void* bitMap,
251 const uint8_t pictureId,
252 const void* colorKey,
261 int32_t VideoRenderMacCocoaImpl::FullScreenRender(void* window, const bool enable)
266 } // namespace webrtc
268 #endif // COCOA_RENDERING