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 |