/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef GFX_IMAGELAYERD3D10_H #define GFX_IMAGELAYERD3D10_H #include "LayerManagerD3D10.h" #include "ImageLayers.h" #include "ImageContainer.h" #include "yuv_convert.h" namespace mozilla { namespace layers { class ImageLayerD3D10 : public ImageLayer, public LayerD3D10 { public: ImageLayerD3D10(LayerManagerD3D10 *aManager) : ImageLayer(aManager, nullptr) , LayerD3D10(aManager) { mImplData = static_cast(this); } // LayerD3D10 Implementation virtual Layer* GetLayer(); virtual void RenderLayer(); void AllocateTexturesYCbCr(PlanarYCbCrImage *aImage); virtual already_AddRefed GetAsTexture(gfx::IntSize* aSize); private: ID3D10ShaderResourceView* GetImageSRView(Image* aImage, bool& aHasAlpha, IDXGIKeyedMutex **aMutex = nullptr); }; struct PlanarYCbCrD3D10BackendData : public ImageBackendData { nsRefPtr mYTexture; nsRefPtr mCrTexture; nsRefPtr mCbTexture; nsRefPtr mYView; nsRefPtr mCbView; nsRefPtr mCrView; }; struct TextureD3D10BackendData : public ImageBackendData { nsRefPtr mTexture; nsRefPtr mSRView; }; class RemoteDXGITextureImage : public Image { public: RemoteDXGITextureImage() : Image(nullptr, ImageFormat::REMOTE_IMAGE_DXGI_TEXTURE) {} virtual TemporaryRef GetAsSourceSurface() MOZ_OVERRIDE; mozilla::gfx::IntSize GetSize() { return mSize; } TextureD3D10BackendData *GetD3D10TextureBackendData(ID3D10Device *aDevice); mozilla::gfx::IntSize mSize; RemoteImageData::Format mFormat; HANDLE mHandle; }; } /* layers */ } /* mozilla */ #endif /* GFX_IMAGELAYERD3D10_H */