Index: webrtc/modules/video_render/mac/video_render_mac_cocoa_impl.mm |
diff --git a/webrtc/modules/video_render/mac/video_render_mac_cocoa_impl.mm b/webrtc/modules/video_render/mac/video_render_mac_cocoa_impl.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5b017fecc0c146ed160650296aa0dbc5b8ae1e80 |
--- /dev/null |
+++ b/webrtc/modules/video_render/mac/video_render_mac_cocoa_impl.mm |
@@ -0,0 +1,253 @@ |
+/* |
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
+ * |
+ * Use of this source code is governed by a BSD-style license |
+ * that can be found in the LICENSE file in the root of the source |
+ * tree. An additional intellectual property rights grant can be found |
+ * in the file PATENTS. All contributing project authors may |
+ * be found in the AUTHORS file in the root of the source tree. |
+ */ |
+ |
+#include "webrtc/engine_configurations.h" |
+#if defined(COCOA_RENDERING) |
+ |
+#include "webrtc/modules/video_render/mac/cocoa_render_view.h" |
+#include "webrtc/modules/video_render/mac/video_render_mac_cocoa_impl.h" |
+#include "webrtc/modules/video_render/mac/video_render_nsopengl.h" |
+#include "webrtc/system_wrappers/include/critical_section_wrapper.h" |
+#include "webrtc/system_wrappers/include/trace.h" |
+ |
+namespace webrtc { |
+ |
+VideoRenderMacCocoaImpl::VideoRenderMacCocoaImpl(const int32_t id, |
+ const VideoRenderType videoRenderType, |
+ void* window, |
+ const bool fullscreen) : |
+_id(id), |
+_renderMacCocoaCritsect(*CriticalSectionWrapper::CreateCriticalSection()), |
+_fullScreen(fullscreen), |
+_ptrWindow(window) |
+{ |
+ |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__); |
+} |
+ |
+VideoRenderMacCocoaImpl::~VideoRenderMacCocoaImpl() |
+{ |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Destructor %s:%d", __FUNCTION__, __LINE__); |
+ delete &_renderMacCocoaCritsect; |
+ if (_ptrCocoaRender) |
+ { |
+ delete _ptrCocoaRender; |
+ _ptrCocoaRender = NULL; |
+ } |
+} |
+ |
+int32_t |
+VideoRenderMacCocoaImpl::Init() |
+{ |
+ |
+ CriticalSectionScoped cs(&_renderMacCocoaCritsect); |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d", __FUNCTION__, __LINE__); |
+ |
+ // cast ptrWindow from void* to CocoaRenderer. Void* was once NSOpenGLView, and CocoaRenderer is NSOpenGLView. |
+ _ptrCocoaRender = new VideoRenderNSOpenGL((CocoaRenderView*)_ptrWindow, _fullScreen, _id); |
+ if (!_ptrWindow) |
+ { |
+ WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__); |
+ return -1; |
+ } |
+ int retVal = _ptrCocoaRender->Init(); |
+ if (retVal == -1) |
+ { |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Failed to init %s:%d", __FUNCTION__, __LINE__); |
+ return -1; |
+ } |
+ |
+ return 0; |
+} |
+ |
+int32_t |
+VideoRenderMacCocoaImpl::ChangeWindow(void* window) |
+{ |
+ |
+ CriticalSectionScoped cs(&_renderMacCocoaCritsect); |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s changing ID to ", __FUNCTION__, window); |
+ |
+ if (window == NULL) |
+ { |
+ return -1; |
+ } |
+ _ptrWindow = window; |
+ |
+ |
+ _ptrWindow = window; |
+ _ptrCocoaRender->ChangeWindow((CocoaRenderView*)_ptrWindow); |
+ |
+ return 0; |
+} |
+ |
+VideoRenderCallback* |
+VideoRenderMacCocoaImpl::AddIncomingRenderStream(const uint32_t streamId, |
+ const uint32_t zOrder, |
+ const float left, |
+ const float top, |
+ const float right, |
+ const float bottom) |
+{ |
+ CriticalSectionScoped cs(&_renderMacCocoaCritsect); |
+ WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s", __FUNCTION__); |
+ VideoChannelNSOpenGL* nsOpenGLChannel = NULL; |
+ |
+ if(!_ptrWindow) |
+ { |
+ } |
+ |
+ if(!nsOpenGLChannel) |
+ { |
+ nsOpenGLChannel = _ptrCocoaRender->CreateNSGLChannel(streamId, zOrder, left, top, right, bottom); |
+ } |
+ |
+ return nsOpenGLChannel; |
+ |
+} |
+ |
+int32_t |
+VideoRenderMacCocoaImpl::DeleteIncomingRenderStream(const uint32_t streamId) |
+{ |
+ WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__); |
+ CriticalSectionScoped cs(&_renderMacCocoaCritsect); |
+ _ptrCocoaRender->DeleteNSGLChannel(streamId); |
+ |
+ return 0; |
+} |
+ |
+int32_t |
+VideoRenderMacCocoaImpl::GetIncomingRenderStreamProperties(const uint32_t streamId, |
+ uint32_t& zOrder, |
+ float& left, |
+ float& top, |
+ float& right, |
+ float& bottom) const |
+{ |
+ return _ptrCocoaRender->GetChannelProperties(streamId, zOrder, left, top, right, bottom); |
+} |
+ |
+int32_t |
+VideoRenderMacCocoaImpl::StartRender() |
+{ |
+ return _ptrCocoaRender->StartRender(); |
+} |
+ |
+int32_t |
+VideoRenderMacCocoaImpl::StopRender() |
+{ |
+ return _ptrCocoaRender->StopRender(); |
+} |
+ |
+VideoRenderType |
+VideoRenderMacCocoaImpl::RenderType() |
+{ |
+ return kRenderCocoa; |
+} |
+ |
+RawVideoType |
+VideoRenderMacCocoaImpl::PerferedVideoType() |
+{ |
+ return kVideoI420; |
+} |
+ |
+bool |
+VideoRenderMacCocoaImpl::FullScreen() |
+{ |
+ return false; |
+} |
+ |
+int32_t |
+VideoRenderMacCocoaImpl::GetGraphicsMemory(uint64_t& totalGraphicsMemory, |
+ uint64_t& availableGraphicsMemory) const |
+{ |
+ totalGraphicsMemory = 0; |
+ availableGraphicsMemory = 0; |
+ return 0; |
+} |
+ |
+int32_t |
+VideoRenderMacCocoaImpl::GetScreenResolution(uint32_t& screenWidth, |
+ uint32_t& screenHeight) const |
+{ |
+ CriticalSectionScoped cs(&_renderMacCocoaCritsect); |
+ NSScreen* mainScreen = [NSScreen mainScreen]; |
+ |
+ NSRect frame = [mainScreen frame]; |
+ |
+ screenWidth = frame.size.width; |
+ screenHeight = frame.size.height; |
+ return 0; |
+} |
+ |
+uint32_t |
+VideoRenderMacCocoaImpl::RenderFrameRate(const uint32_t streamId) |
+{ |
+ CriticalSectionScoped cs(&_renderMacCocoaCritsect); |
+ return 0; |
+} |
+ |
+int32_t |
+VideoRenderMacCocoaImpl::SetStreamCropping(const uint32_t streamId, |
+ const float left, |
+ const float top, |
+ const float right, |
+ const float bottom) |
+{ |
+ return 0; |
+} |
+ |
+int32_t VideoRenderMacCocoaImpl::ConfigureRenderer(const uint32_t streamId, |
+ const unsigned int zOrder, |
+ const float left, |
+ const float top, |
+ const float right, |
+ const float bottom) |
+{ |
+ return 0; |
+} |
+ |
+int32_t |
+VideoRenderMacCocoaImpl::SetTransparentBackground(const bool enable) |
+{ |
+ return 0; |
+} |
+ |
+int32_t VideoRenderMacCocoaImpl::SetText(const uint8_t textId, |
+ const uint8_t* text, |
+ const int32_t textLength, |
+ const uint32_t textColorRef, |
+ const uint32_t backgroundColorRef, |
+ const float left, |
+ const float top, |
+ const float right, |
+ const float bottom) |
+{ |
+ return _ptrCocoaRender->SetText(textId, text, textLength, textColorRef, backgroundColorRef, left, top, right, bottom); |
+} |
+ |
+int32_t VideoRenderMacCocoaImpl::SetBitmap(const void* bitMap, |
+ const uint8_t pictureId, |
+ const void* colorKey, |
+ const float left, |
+ const float top, |
+ const float right, |
+ const float bottom) |
+{ |
+ return 0; |
+} |
+ |
+int32_t VideoRenderMacCocoaImpl::FullScreenRender(void* window, const bool enable) |
+{ |
+ return -1; |
+} |
+ |
+} // namespace webrtc |
+ |
+#endif // COCOA_RENDERING |