1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7 #include "RenderTextureHostWrapper.h"
8
9 #include "mozilla/gfx/Logging.h"
10 #include "mozilla/webrender/RenderThread.h"
11
12 namespace mozilla {
13 namespace wr {
14
RenderTextureHostWrapper(ExternalImageId aExternalImageId)15 RenderTextureHostWrapper::RenderTextureHostWrapper(
16 ExternalImageId aExternalImageId)
17 : mExternalImageId(aExternalImageId) {
18 MOZ_COUNT_CTOR_INHERITED(RenderTextureHostWrapper, RenderTextureHost);
19 }
20
~RenderTextureHostWrapper()21 RenderTextureHostWrapper::~RenderTextureHostWrapper() {
22 MOZ_COUNT_DTOR_INHERITED(RenderTextureHostWrapper, RenderTextureHost);
23 }
24
EnsureTextureHost() const25 void RenderTextureHostWrapper::EnsureTextureHost() const {
26 if (!mTextureHost) {
27 mTextureHost = RenderThread::Get()->GetRenderTexture(mExternalImageId);
28 MOZ_ASSERT(mTextureHost);
29 if (!mTextureHost) {
30 gfxCriticalNoteOnce << "Failed to get RenderTextureHost for extId:"
31 << AsUint64(mExternalImageId);
32 }
33 }
34 }
35
Lock(uint8_t aChannelIndex,gl::GLContext * aGL,wr::ImageRendering aRendering)36 wr::WrExternalImage RenderTextureHostWrapper::Lock(
37 uint8_t aChannelIndex, gl::GLContext* aGL, wr::ImageRendering aRendering) {
38 EnsureTextureHost();
39 if (!mTextureHost) {
40 return InvalidToWrExternalImage();
41 }
42
43 return mTextureHost->Lock(aChannelIndex, aGL, aRendering);
44 }
45
Unlock()46 void RenderTextureHostWrapper::Unlock() {
47 if (mTextureHost) {
48 mTextureHost->Unlock();
49 }
50 }
51
ClearCachedResources()52 void RenderTextureHostWrapper::ClearCachedResources() {
53 if (mTextureHost) {
54 mTextureHost->ClearCachedResources();
55 }
56 }
57
58 RenderMacIOSurfaceTextureHost*
AsRenderMacIOSurfaceTextureHost()59 RenderTextureHostWrapper::AsRenderMacIOSurfaceTextureHost() {
60 EnsureTextureHost();
61 if (!mTextureHost) {
62 return nullptr;
63 }
64 return mTextureHost->AsRenderMacIOSurfaceTextureHost();
65 }
66
AsRenderDXGITextureHost()67 RenderDXGITextureHost* RenderTextureHostWrapper::AsRenderDXGITextureHost() {
68 EnsureTextureHost();
69 if (!mTextureHost) {
70 return nullptr;
71 }
72 return mTextureHost->AsRenderDXGITextureHost();
73 }
74
75 RenderDXGIYCbCrTextureHost*
AsRenderDXGIYCbCrTextureHost()76 RenderTextureHostWrapper::AsRenderDXGIYCbCrTextureHost() {
77 EnsureTextureHost();
78 if (!mTextureHost) {
79 return nullptr;
80 }
81 return mTextureHost->AsRenderDXGIYCbCrTextureHost();
82 }
83
EnsureRenderTextureHostSWGL() const84 RenderTextureHostSWGL* RenderTextureHostWrapper::EnsureRenderTextureHostSWGL()
85 const {
86 EnsureTextureHost();
87 if (!mTextureHost) {
88 return nullptr;
89 }
90 return mTextureHost->AsRenderTextureHostSWGL();
91 }
92
GetPlaneCount() const93 size_t RenderTextureHostWrapper::GetPlaneCount() const {
94 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
95 return swglHost->GetPlaneCount();
96 }
97 return 0;
98 }
99
GetFormat() const100 gfx::SurfaceFormat RenderTextureHostWrapper::GetFormat() const {
101 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
102 return swglHost->GetFormat();
103 }
104 return gfx::SurfaceFormat::UNKNOWN;
105 }
106
GetColorDepth() const107 gfx::ColorDepth RenderTextureHostWrapper::GetColorDepth() const {
108 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
109 return swglHost->GetColorDepth();
110 }
111 return gfx::ColorDepth::COLOR_8;
112 }
113
GetYUVColorSpace() const114 gfx::YUVRangedColorSpace RenderTextureHostWrapper::GetYUVColorSpace() const {
115 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
116 return swglHost->GetYUVColorSpace();
117 }
118 return gfx::YUVRangedColorSpace::Default;
119 }
120
MapPlane(RenderCompositor * aCompositor,uint8_t aChannelIndex,PlaneInfo & aPlaneInfo)121 bool RenderTextureHostWrapper::MapPlane(RenderCompositor* aCompositor,
122 uint8_t aChannelIndex,
123 PlaneInfo& aPlaneInfo) {
124 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
125 return swglHost->MapPlane(aCompositor, aChannelIndex, aPlaneInfo);
126 }
127 return false;
128 }
129
UnmapPlanes()130 void RenderTextureHostWrapper::UnmapPlanes() {
131 if (RenderTextureHostSWGL* swglHost = EnsureRenderTextureHostSWGL()) {
132 swglHost->UnmapPlanes();
133 }
134 }
135
136 } // namespace wr
137 } // namespace mozilla
138