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/modules/video_render/linux/video_render_linux_impl.h" | |
12 | |
13 #include "webrtc/modules/video_render/linux/video_x11_render.h" | |
14 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" | |
15 #include "webrtc/system_wrappers/include/trace.h" | |
16 | |
17 #include <X11/Xlib.h> | |
18 | |
19 namespace webrtc { | |
20 | |
21 VideoRenderLinuxImpl::VideoRenderLinuxImpl( | |
22 const int32_t id, | |
23 const VideoRenderType videoRenderType
, | |
24 void* window, const bool fullscreen)
: | |
25 _id(id), | |
26 _renderLinuxCritsect( | |
27 *CriticalSectionWrapper::CreateCriticalSection(
)), | |
28 _ptrWindow(window), _ptrX11Render(NULL) | |
29 { | |
30 } | |
31 | |
32 VideoRenderLinuxImpl::~VideoRenderLinuxImpl() | |
33 { | |
34 if (_ptrX11Render) | |
35 delete _ptrX11Render; | |
36 | |
37 delete &_renderLinuxCritsect; | |
38 } | |
39 | |
40 int32_t VideoRenderLinuxImpl::Init() | |
41 { | |
42 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", | |
43 __FUNCTION__); | |
44 | |
45 CriticalSectionScoped cs(&_renderLinuxCritsect); | |
46 _ptrX11Render = new VideoX11Render((Window) _ptrWindow); | |
47 if (!_ptrX11Render) | |
48 { | |
49 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, | |
50 "%s", | |
51 "Failed to create instance of VideoX11Render object"); | |
52 return -1; | |
53 } | |
54 int retVal = _ptrX11Render->Init(); | |
55 if (retVal == -1) | |
56 { | |
57 return -1; | |
58 } | |
59 | |
60 return 0; | |
61 | |
62 } | |
63 | |
64 int32_t VideoRenderLinuxImpl::ChangeWindow(void* window) | |
65 { | |
66 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", | |
67 __FUNCTION__); | |
68 | |
69 CriticalSectionScoped cs(&_renderLinuxCritsect); | |
70 _ptrWindow = window; | |
71 | |
72 if (_ptrX11Render) | |
73 { | |
74 return _ptrX11Render->ChangeWindow((Window) window); | |
75 } | |
76 | |
77 return -1; | |
78 } | |
79 | |
80 VideoRenderCallback* VideoRenderLinuxImpl::AddIncomingRenderStream( | |
81 const uin
t32_t streamId, | |
82 const uin
t32_t zOrder, | |
83 const flo
at left, | |
84 const flo
at top, | |
85 const flo
at right, | |
86 const flo
at bottom) | |
87 { | |
88 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", | |
89 __FUNCTION__); | |
90 CriticalSectionScoped cs(&_renderLinuxCritsect); | |
91 | |
92 VideoRenderCallback* renderCallback = NULL; | |
93 if (_ptrX11Render) | |
94 { | |
95 VideoX11Channel* renderChannel = | |
96 _ptrX11Render->CreateX11RenderChannel(streamId, zOrder, left, | |
97 top, right, bottom); | |
98 if (!renderChannel) | |
99 { | |
100 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, | |
101 "Render channel creation failed for stream id: %d", | |
102 streamId); | |
103 return NULL; | |
104 } | |
105 renderCallback = (VideoRenderCallback *) renderChannel; | |
106 } | |
107 else | |
108 { | |
109 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, | |
110 "_ptrX11Render is NULL"); | |
111 return NULL; | |
112 } | |
113 return renderCallback; | |
114 } | |
115 | |
116 int32_t VideoRenderLinuxImpl::DeleteIncomingRenderStream( | |
117 const uint32_t st
reamId) | |
118 { | |
119 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", | |
120 __FUNCTION__); | |
121 CriticalSectionScoped cs(&_renderLinuxCritsect); | |
122 | |
123 if (_ptrX11Render) | |
124 { | |
125 return _ptrX11Render->DeleteX11RenderChannel(streamId); | |
126 } | |
127 return -1; | |
128 } | |
129 | |
130 int32_t VideoRenderLinuxImpl::GetIncomingRenderStreamProperties( | |
131 const uint
32_t streamId, | |
132 uint32_t&
zOrder, | |
133 float& lef
t, | |
134 float& top
, | |
135 float& rig
ht, | |
136 float& bot
tom) const | |
137 { | |
138 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", | |
139 __FUNCTION__); | |
140 CriticalSectionScoped cs(&_renderLinuxCritsect); | |
141 | |
142 if (_ptrX11Render) | |
143 { | |
144 return _ptrX11Render->GetIncomingStreamProperties(streamId, zOrder, | |
145 left, top, right, | |
146 bottom); | |
147 } | |
148 return -1; | |
149 } | |
150 | |
151 int32_t VideoRenderLinuxImpl::StartRender() | |
152 { | |
153 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", | |
154 __FUNCTION__); | |
155 return 0; | |
156 } | |
157 | |
158 int32_t VideoRenderLinuxImpl::StopRender() | |
159 { | |
160 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", | |
161 __FUNCTION__); | |
162 return 0; | |
163 } | |
164 | |
165 VideoRenderType VideoRenderLinuxImpl::RenderType() | |
166 { | |
167 return kRenderX11; | |
168 } | |
169 | |
170 RawVideoType VideoRenderLinuxImpl::PerferedVideoType() | |
171 { | |
172 return kVideoI420; | |
173 } | |
174 | |
175 bool VideoRenderLinuxImpl::FullScreen() | |
176 { | |
177 return false; | |
178 } | |
179 | |
180 int32_t VideoRenderLinuxImpl::GetGraphicsMemory( | |
181 uint64_t& /*totalGraphicsM
emory*/, | |
182 uint64_t& /*availableGraph
icsMemory*/) const | |
183 { | |
184 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, | |
185 "%s - not supported on Linux", __FUNCTION__); | |
186 return -1; | |
187 } | |
188 | |
189 int32_t VideoRenderLinuxImpl::GetScreenResolution( | |
190 uint32_t& /*screenWidth*
/, | |
191 uint32_t& /*screenHeight
*/) const | |
192 { | |
193 return -1; | |
194 } | |
195 | |
196 uint32_t VideoRenderLinuxImpl::RenderFrameRate(const uint32_t /*streamId*/) | |
197 { | |
198 return -1; | |
199 } | |
200 | |
201 int32_t VideoRenderLinuxImpl::SetStreamCropping( | |
202 const uint32_t /*streamId*
/, | |
203 const float /*left*/, | |
204 const float /*top*/, | |
205 const float /*right*/, | |
206 const float /*bottom*/) | |
207 { | |
208 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, | |
209 "%s - not supported on Linux", __FUNCTION__); | |
210 return -1; | |
211 } | |
212 | |
213 int32_t VideoRenderLinuxImpl::SetTransparentBackground(const bool /*enable*/) | |
214 { | |
215 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, | |
216 "%s - not supported on Linux", __FUNCTION__); | |
217 return -1; | |
218 } | |
219 | |
220 int32_t VideoRenderLinuxImpl::ConfigureRenderer( | |
221 const uint32_t streamId, | |
222 const unsigned int zOrder, | |
223 const float left, | |
224 const float top, | |
225 const float right, | |
226 const float bottom) | |
227 { | |
228 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, | |
229 "%s - not supported on Linux", __FUNCTION__); | |
230 return -1; | |
231 } | |
232 | |
233 int32_t VideoRenderLinuxImpl::SetText( | |
234 const uint8_t textId, | |
235 const uint8_t* text, | |
236 const int32_t textLength, | |
237 const uint32_t textColorRef, | |
238 const uint32_t backgroundColorRef, | |
239 const float left, const float top, | |
240 const float rigth, | |
241 const float bottom) | |
242 { | |
243 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, | |
244 "%s - not supported on Linux", __FUNCTION__); | |
245 return -1; | |
246 } | |
247 | |
248 int32_t VideoRenderLinuxImpl::SetBitmap(const void* bitMap, | |
249 const uint8_t pictureId, | |
250 const void* colorKey, | |
251 const float left, | |
252 const float top, | |
253 const float right, | |
254 const float bottom) | |
255 { | |
256 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, | |
257 "%s - not supported on Linux", __FUNCTION__); | |
258 return -1; | |
259 } | |
260 | |
261 } // namespace webrtc | |
OLD | NEW |