Index: webrtc/modules/video_render/mac/video_render_mac_carbon_impl.cc |
diff --git a/webrtc/modules/video_render/mac/video_render_mac_carbon_impl.cc b/webrtc/modules/video_render/mac/video_render_mac_carbon_impl.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f85be5fb5e2fac9b1fe2caf3db28cc5817656dc5 |
--- /dev/null |
+++ b/webrtc/modules/video_render/mac/video_render_mac_carbon_impl.cc |
@@ -0,0 +1,280 @@ |
+/* |
+ * 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(CARBON_RENDERING) |
+ |
+#include <AGL/agl.h> |
+#include "webrtc/modules/video_render/mac/video_render_agl.h" |
+#include "webrtc/modules/video_render/mac/video_render_mac_carbon_impl.h" |
+#include "webrtc/system_wrappers/include/critical_section_wrapper.h" |
+#include "webrtc/system_wrappers/include/trace.h" |
+ |
+namespace webrtc { |
+ |
+VideoRenderMacCarbonImpl::VideoRenderMacCarbonImpl(const int32_t id, |
+ const VideoRenderType videoRenderType, |
+ void* window, |
+ const bool fullscreen) : |
+_id(id), |
+_renderMacCarbonCritsect(*CriticalSectionWrapper::CreateCriticalSection()), |
+_fullScreen(fullscreen), |
+_ptrWindow(window) |
+{ |
+ |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__); |
+ |
+} |
+ |
+VideoRenderMacCarbonImpl::~VideoRenderMacCarbonImpl() |
+{ |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Destructor %s:%d", __FUNCTION__, __LINE__); |
+ delete &_renderMacCarbonCritsect; |
+} |
+ |
+int32_t |
+VideoRenderMacCarbonImpl::Init() |
+{ |
+ CriticalSectionScoped cs(&_renderMacCarbonCritsect); |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d", __FUNCTION__, __LINE__); |
+ |
+ if (!_ptrWindow) |
+ { |
+ WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__); |
+ return -1; |
+ } |
+ |
+ // We don't know if the user passed us a WindowRef or a HIViewRef, so test. |
+ bool referenceIsValid = false; |
+ |
+ // Check if it's a valid WindowRef |
+ //WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s:%d _ptrWindowRef before WindowRef cast: %x", __FUNCTION__, __LINE__, _ptrWindowRef); |
+ WindowRef* windowRef = static_cast<WindowRef*>(_ptrWindow); |
+ //WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s:%d _ptrWindowRef after cast: %x", __FUNCTION__, __LINE__, _ptrWindowRef); |
+ if (IsValidWindowPtr(*windowRef)) |
+ { |
+ _ptrCarbonRender = new VideoRenderAGL(*windowRef, _fullScreen, _id); |
+ referenceIsValid = true; |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d Successfully initialized CarbonRenderer with WindowRef:%x", __FUNCTION__, __LINE__, *windowRef); |
+ } |
+ else |
+ { |
+ HIViewRef* hiviewRef = static_cast<HIViewRef*>(_ptrWindow); |
+ if (HIViewIsValid(*hiviewRef)) |
+ { |
+ _ptrCarbonRender = new VideoRenderAGL(*hiviewRef, _fullScreen, _id); |
+ referenceIsValid = true; |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d Successfully initialized CarbonRenderer with HIViewRef:%x", __FUNCTION__, __LINE__, hiviewRef); |
+ } |
+ } |
+ |
+ if(!referenceIsValid) |
+ { |
+ WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, "%s:%d Invalid WindowRef/HIViewRef Returning -1", __FUNCTION__, __LINE__); |
+ return -1; |
+ } |
+ |
+ if(!_ptrCarbonRender) |
+ { |
+ WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, "%s:%d Failed to create an instance of VideoRenderAGL. Returning -1", __FUNCTION__, __LINE__); |
+ } |
+ |
+ int retVal = _ptrCarbonRender->Init(); |
+ if (retVal == -1) |
+ { |
+ WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, "%s:%d Failed to init CarbonRenderer", __FUNCTION__, __LINE__); |
+ return -1; |
+ } |
+ |
+ return 0; |
+} |
+ |
+int32_t |
+VideoRenderMacCarbonImpl::ChangeWindow(void* window) |
+{ |
+ return -1; |
+ CriticalSectionScoped cs(&_renderMacCarbonCritsect); |
+ WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s changing ID to ", __FUNCTION__, window); |
+ |
+ if (window == NULL) |
+ { |
+ return -1; |
+ } |
+ _ptrWindow = window; |
+ |
+ |
+ _ptrWindow = window; |
+ |
+ return 0; |
+} |
+ |
+VideoRenderCallback* |
+VideoRenderMacCarbonImpl::AddIncomingRenderStream(const uint32_t streamId, |
+ const uint32_t zOrder, |
+ const float left, |
+ const float top, |
+ const float right, |
+ const float bottom) |
+{ |
+ |
+ CriticalSectionScoped cs(&_renderMacCarbonCritsect); |
+ WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s", __FUNCTION__); |
+ VideoChannelAGL* AGLChannel = NULL; |
+ |
+ if(!_ptrWindow) |
+ { |
+ } |
+ |
+ if(!AGLChannel) |
+ { |
+ AGLChannel = _ptrCocoaRender->CreateNSGLChannel(streamId, zOrder, left, top, right, bottom); |
+ } |
+ |
+ return AGLChannel; |
+ |
+} |
+ |
+int32_t |
+VideoRenderMacCarbonImpl::DeleteIncomingRenderStream(const uint32_t streamId) |
+{ |
+ |
+ WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s:%d", __FUNCTION__, __LINE__); |
+ CriticalSectionScoped cs(&_renderMacCarbonCritsect); |
+ _ptrCarbonRender->DeleteAGLChannel(streamId); |
+ |
+ return 0; |
+} |
+ |
+int32_t |
+VideoRenderMacCarbonImpl::GetIncomingRenderStreamProperties(const uint32_t streamId, |
+ uint32_t& zOrder, |
+ float& left, |
+ float& top, |
+ float& right, |
+ float& bottom) const |
+{ |
+ return -1; |
+ return _ptrCarbonRender->GetChannelProperties(streamId, zOrder, left, top, right, bottom); |
+} |
+ |
+int32_t |
+VideoRenderMacCarbonImpl::StartRender() |
+{ |
+ return _ptrCarbonRender->StartRender(); |
+} |
+ |
+int32_t |
+VideoRenderMacCarbonImpl::StopRender() |
+{ |
+ return _ptrCarbonRender->StopRender(); |
+} |
+ |
+VideoRenderType |
+VideoRenderMacCarbonImpl::RenderType() |
+{ |
+ return kRenderCarbon; |
+} |
+ |
+RawVideoType |
+VideoRenderMacCarbonImpl::PerferedVideoType() |
+{ |
+ return kVideoI420; |
+} |
+ |
+bool |
+VideoRenderMacCarbonImpl::FullScreen() |
+{ |
+ return false; |
+} |
+ |
+int32_t |
+VideoRenderMacCarbonImpl::GetGraphicsMemory(uint64_t& totalGraphicsMemory, |
+ uint64_t& availableGraphicsMemory) const |
+{ |
+ totalGraphicsMemory = 0; |
+ availableGraphicsMemory = 0; |
+ return 0; |
+} |
+ |
+int32_t |
+VideoRenderMacCarbonImpl::GetScreenResolution(uint32_t& screenWidth, |
+ uint32_t& screenHeight) const |
+{ |
+ CriticalSectionScoped cs(&_renderMacCarbonCritsect); |
+ //NSScreen* mainScreen = [NSScreen mainScreen]; |
+ |
+ //NSRect frame = [mainScreen frame]; |
+ |
+ //screenWidth = frame.size.width; |
+ //screenHeight = frame.size.height; |
+ return 0; |
+} |
+ |
+uint32_t |
+VideoRenderMacCarbonImpl::RenderFrameRate(const uint32_t streamId) |
+{ |
+ CriticalSectionScoped cs(&_renderMacCarbonCritsect); |
+ return 0; |
+} |
+ |
+int32_t |
+VideoRenderMacCarbonImpl::SetStreamCropping(const uint32_t streamId, |
+ const float left, |
+ const float top, |
+ const float right, |
+ const float bottom) |
+{ |
+ return 0; |
+} |
+ |
+int32_t VideoRenderMacCarbonImpl::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 |
+VideoRenderMacCarbonImpl::SetTransparentBackground(const bool enable) |
+{ |
+ return 0; |
+} |
+ |
+int32_t VideoRenderMacCarbonImpl::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 0; |
+} |
+ |
+int32_t VideoRenderMacCarbonImpl::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; |
+} |
+ |
+ |
+} // namespace webrtc |
+ |
+#endif // CARBON_RENDERING |