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/. */
7 #include "RenderTextureHostWrapper.h"
9 #include "mozilla/gfx/Logging.h"
10 #include "mozilla/layers/RemoteTextureMap.h"
11 #include "mozilla/webrender/RenderThread.h"
16 RenderTextureHostWrapper::RenderTextureHostWrapper(
17 ExternalImageId aExternalImageId
)
18 : mExternalImageId(aExternalImageId
) {
19 MOZ_COUNT_CTOR_INHERITED(RenderTextureHostWrapper
, RenderTextureHost
);
23 RenderTextureHostWrapper::~RenderTextureHostWrapper() {
24 MOZ_COUNT_DTOR_INHERITED(RenderTextureHostWrapper
, RenderTextureHost
);
27 void RenderTextureHostWrapper::EnsureTextureHost() const {
32 mTextureHost
= RenderThread::Get()->GetRenderTexture(mExternalImageId
);
33 MOZ_ASSERT(mTextureHost
);
35 gfxCriticalNoteOnce
<< "Failed to get RenderTextureHost for extId:"
36 << AsUint64(mExternalImageId
);
40 wr::WrExternalImage
RenderTextureHostWrapper::Lock(uint8_t aChannelIndex
,
43 return InvalidToWrExternalImage();
46 return mTextureHost
->Lock(aChannelIndex
, aGL
);
49 void RenderTextureHostWrapper::Unlock() {
51 mTextureHost
->Unlock();
55 std::pair
<gfx::Point
, gfx::Point
> RenderTextureHostWrapper::GetUvCoords(
56 gfx::IntSize aTextureSize
) const {
58 return mTextureHost
->GetUvCoords(aTextureSize
);
60 return RenderTextureHost::GetUvCoords(aTextureSize
);
63 void RenderTextureHostWrapper::ClearCachedResources() {
65 mTextureHost
->ClearCachedResources();
69 void RenderTextureHostWrapper::PrepareForUse() {
73 mTextureHost
->PrepareForUse();
76 void RenderTextureHostWrapper::NotifyForUse() {
80 mTextureHost
->NotifyForUse();
83 void RenderTextureHostWrapper::NotifyNotUsed() {
87 mTextureHost
->NotifyNotUsed();
90 bool RenderTextureHostWrapper::SyncObjectNeeded() { return false; }
92 RenderMacIOSurfaceTextureHost
*
93 RenderTextureHostWrapper::AsRenderMacIOSurfaceTextureHost() {
97 return mTextureHost
->AsRenderMacIOSurfaceTextureHost();
100 RenderDXGITextureHost
* RenderTextureHostWrapper::AsRenderDXGITextureHost() {
104 return mTextureHost
->AsRenderDXGITextureHost();
107 RenderDXGIYCbCrTextureHost
*
108 RenderTextureHostWrapper::AsRenderDXGIYCbCrTextureHost() {
112 return mTextureHost
->AsRenderDXGIYCbCrTextureHost();
115 RenderDcompSurfaceTextureHost
*
116 RenderTextureHostWrapper::AsRenderDcompSurfaceTextureHost() {
120 return mTextureHost
->AsRenderDcompSurfaceTextureHost();
123 RenderTextureHostSWGL
* RenderTextureHostWrapper::AsRenderTextureHostSWGL() {
127 return mTextureHost
->AsRenderTextureHostSWGL();
130 RenderAndroidHardwareBufferTextureHost
*
131 RenderTextureHostWrapper::AsRenderAndroidHardwareBufferTextureHost() {
135 return mTextureHost
->AsRenderAndroidHardwareBufferTextureHost();
138 RenderAndroidSurfaceTextureHost
*
139 RenderTextureHostWrapper::AsRenderAndroidSurfaceTextureHost() {
143 return mTextureHost
->AsRenderAndroidSurfaceTextureHost();
146 RenderTextureHostSWGL
* RenderTextureHostWrapper::EnsureRenderTextureHostSWGL()
151 return mTextureHost
->AsRenderTextureHostSWGL();
154 void RenderTextureHostWrapper::SetIsSoftwareDecodedVideo() {
158 return mTextureHost
->SetIsSoftwareDecodedVideo();
161 bool RenderTextureHostWrapper::IsSoftwareDecodedVideo() {
165 return mTextureHost
->IsSoftwareDecodedVideo();
168 size_t RenderTextureHostWrapper::GetPlaneCount() const {
169 if (RenderTextureHostSWGL
* swglHost
= EnsureRenderTextureHostSWGL()) {
170 return swglHost
->GetPlaneCount();
175 gfx::SurfaceFormat
RenderTextureHostWrapper::GetFormat() const {
176 if (RenderTextureHostSWGL
* swglHost
= EnsureRenderTextureHostSWGL()) {
177 return swglHost
->GetFormat();
179 return gfx::SurfaceFormat::UNKNOWN
;
182 gfx::ColorDepth
RenderTextureHostWrapper::GetColorDepth() const {
183 if (RenderTextureHostSWGL
* swglHost
= EnsureRenderTextureHostSWGL()) {
184 return swglHost
->GetColorDepth();
186 return gfx::ColorDepth::COLOR_8
;
189 gfx::YUVRangedColorSpace
RenderTextureHostWrapper::GetYUVColorSpace() const {
190 if (RenderTextureHostSWGL
* swglHost
= EnsureRenderTextureHostSWGL()) {
191 return swglHost
->GetYUVColorSpace();
193 return gfx::YUVRangedColorSpace::Default
;
196 bool RenderTextureHostWrapper::MapPlane(RenderCompositor
* aCompositor
,
197 uint8_t aChannelIndex
,
198 PlaneInfo
& aPlaneInfo
) {
199 if (RenderTextureHostSWGL
* swglHost
= EnsureRenderTextureHostSWGL()) {
200 return swglHost
->MapPlane(aCompositor
, aChannelIndex
, aPlaneInfo
);
205 void RenderTextureHostWrapper::UnmapPlanes() {
206 if (RenderTextureHostSWGL
* swglHost
= EnsureRenderTextureHostSWGL()) {
207 swglHost
->UnmapPlanes();
212 } // namespace mozilla