Bug 1490415 - prevent creating a GPUVideoTextureHost with a null wrapped texture; r=sotaro

Differential Revision: https://phabricator.services.mozilla.com/D5563
This commit is contained in:
Alex Gaynor
2018-09-12 00:17:10 +00:00
parent dfef5d66ac
commit 4f11cff232
3 changed files with 23 additions and 5 deletions

View File

@@ -13,11 +13,11 @@ namespace mozilla {
namespace layers {
GPUVideoTextureHost::GPUVideoTextureHost(TextureFlags aFlags,
const SurfaceDescriptorGPUVideo& aDescriptor)
TextureHost* aWrappedTextureHost)
: TextureHost(aFlags)
, mWrappedTextureHost(aWrappedTextureHost)
{
MOZ_COUNT_CTOR(GPUVideoTextureHost);
mWrappedTextureHost = VideoBridgeParent::GetSingleton()->LookupTexture(aDescriptor.handle());
}
GPUVideoTextureHost::~GPUVideoTextureHost()
@@ -25,6 +25,19 @@ GPUVideoTextureHost::~GPUVideoTextureHost()
MOZ_COUNT_DTOR(GPUVideoTextureHost);
}
GPUVideoTextureHost*
GPUVideoTextureHost::CreateFromDescriptor(
TextureFlags aFlags,
const SurfaceDescriptorGPUVideo& aDescriptor)
{
TextureHost* wrappedTextureHost =
VideoBridgeParent::GetSingleton()->LookupTexture(aDescriptor.handle());
if (!wrappedTextureHost) {
return nullptr;
}
return new GPUVideoTextureHost(aFlags, wrappedTextureHost);
}
bool
GPUVideoTextureHost::Lock()
{

View File

@@ -15,8 +15,10 @@ namespace layers {
class GPUVideoTextureHost : public TextureHost
{
public:
GPUVideoTextureHost(TextureFlags aFlags,
static GPUVideoTextureHost* CreateFromDescriptor(
TextureFlags aFlags,
const SurfaceDescriptorGPUVideo& aDescriptor);
virtual ~GPUVideoTextureHost();
virtual void DeallocateDeviceData() override {}
@@ -65,6 +67,8 @@ public:
virtual bool SupportsWrNativeTexture() override;
protected:
GPUVideoTextureHost(TextureFlags aFlags, TextureHost* aWrappedTextureHost);
RefPtr<TextureHost> mWrappedTextureHost;
};

View File

@@ -336,7 +336,8 @@ CreateBackendIndependentTextureHost(const SurfaceDescriptor& aDesc,
break;
}
case SurfaceDescriptor::TSurfaceDescriptorGPUVideo: {
result = new GPUVideoTextureHost(aFlags, aDesc.get_SurfaceDescriptorGPUVideo());
result = GPUVideoTextureHost::CreateFromDescriptor(
aFlags, aDesc.get_SurfaceDescriptorGPUVideo());
break;
}
#ifdef XP_WIN