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