diff --git a/gfx/layers/D3D11YCbCrImage.cpp b/gfx/layers/D3D11YCbCrImage.cpp index 590d55fcb9..de2d209d28 100644 --- a/gfx/layers/D3D11YCbCrImage.cpp +++ b/gfx/layers/D3D11YCbCrImage.cpp @@ -71,7 +71,7 @@ D3D11YCbCrImage::SetData(KnowsCompositor* aAllocator, return false; } - mt->Enter(); + D3D11MTAutoEnter mtAutoEnter(mt.forget()); RefPtr ctx; allocator->GetDevice()->GetImmediateContext(getter_AddRefs(ctx)); @@ -99,9 +99,7 @@ D3D11YCbCrImage::SetData(KnowsCompositor* aAllocator, aData.mCbCrStride, aData.mCbCrStride * aData.mCbCrSize.height); - mt->Leave(); - - return true; +return true; } IntSize @@ -162,21 +160,7 @@ D3D11YCbCrImage::GetAsSourceSurface() return nullptr; } - class D3D11MTAutoEnter - { - public: - explicit D3D11MTAutoEnter(already_AddRefed aMT) - : mMT(aMT) - { - mMT->Enter(); - } - ~D3D11MTAutoEnter() - { - mMT->Leave(); - } - private: - RefPtr mMT; - } mtAutoEnter(mt.forget()); + D3D11MTAutoEnter mtAutoEnter(mt.forget()); texY->GetDesc(&desc); desc.BindFlags = 0; diff --git a/gfx/layers/IMFYCbCrImage.cpp b/gfx/layers/IMFYCbCrImage.cpp index e0f64b9c65..9890fb1e68 100644 --- a/gfx/layers/IMFYCbCrImage.cpp +++ b/gfx/layers/IMFYCbCrImage.cpp @@ -201,11 +201,10 @@ IMFYCbCrImage::GetTextureClient(KnowsCompositor* aForwarder) return mTextureClient; } - RefPtr device = - gfx::DeviceManagerDx::Get()->GetContentDevice(); + RefPtr device = gfx::DeviceManagerDx::Get()->GetContentDevice(); + if (!device) { - device = - gfx::DeviceManagerDx::Get()->GetCompositorDevice(); + device = gfx::DeviceManagerDx::Get()->GetCompositorDevice(); } LayersBackend backend = aForwarder->GetCompositorBackendType(); @@ -274,7 +273,7 @@ IMFYCbCrImage::GetTextureClient(KnowsCompositor* aForwarder) AutoLockD3D11Texture lockCr(textureCr); AutoLockD3D11Texture lockCb(textureCb); - mt->Enter(); + D3D11MTAutoEnter mtAutoEnter(mt.forget()); RefPtr ctx; device->GetImmediateContext((ID3D11DeviceContext**)getter_AddRefs(ctx)); @@ -290,8 +289,6 @@ IMFYCbCrImage::GetTextureClient(KnowsCompositor* aForwarder) box.bottom = mData.mCbCrSize.height; ctx->UpdateSubresource(textureCb, 0, &box, mData.mCbChannel, mData.mCbCrStride, 0); ctx->UpdateSubresource(textureCr, 0, &box, mData.mCrChannel, mData.mCbCrStride, 0); - - mt->Leave(); } mTextureClient = TextureClient::CreateWithData( diff --git a/gfx/layers/d3d11/TextureD3D11.h b/gfx/layers/d3d11/TextureD3D11.h index 001444fae1..86db51df13 100644 --- a/gfx/layers/d3d11/TextureD3D11.h +++ b/gfx/layers/d3d11/TextureD3D11.h @@ -461,6 +461,20 @@ private: RefPtr mMutex; }; +class D3D11MTAutoEnter +{ +public: + explicit D3D11MTAutoEnter(already_AddRefed aMT) + : mMT(aMT) + { + mMT->Enter(); + } + ~D3D11MTAutoEnter() { mMT->Leave(); } + +private: + RefPtr mMT; +}; + } }