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 |