diff --git a/gfx/2d/Tools.h b/gfx/2d/Tools.h index 520a56bacb48..041e92303a88 100644 --- a/gfx/2d/Tools.h +++ b/gfx/2d/Tools.h @@ -92,7 +92,6 @@ BytesPerPixel(SurfaceFormat aFormat) case SurfaceFormat::A8: return 1; case SurfaceFormat::R5G6B5_UINT16: - case SurfaceFormat::A16: return 2; case SurfaceFormat::R8G8B8: case SurfaceFormat::B8G8R8: @@ -107,19 +106,6 @@ BytesPerPixel(SurfaceFormat aFormat) } } -static inline SurfaceFormat -SurfaceFormatForAlphaDepth(uint32_t aDepth) -{ - if (aDepth == 8) { - return SurfaceFormat::A8; - } else if (aDepth == 10 || - aDepth == 12) { - return SurfaceFormat::A16; - } - MOZ_ASSERT_UNREACHABLE("Unsupported alpha depth"); - return SurfaceFormat::UNKNOWN; -} - static inline bool IsOpaqueFormat(SurfaceFormat aFormat) { switch (aFormat) { diff --git a/gfx/2d/Types.h b/gfx/2d/Types.h index 0810ff963840..fd106bfa8087 100644 --- a/gfx/2d/Types.h +++ b/gfx/2d/Types.h @@ -56,7 +56,6 @@ enum class SurfaceFormat : int8_t { // This one is a single-byte, so endianness isn't an issue. A8, - A16, R8G8, diff --git a/gfx/layers/BufferTexture.cpp b/gfx/layers/BufferTexture.cpp index 4b5ca38aa311..04cb1d0bf79f 100644 --- a/gfx/layers/BufferTexture.cpp +++ b/gfx/layers/BufferTexture.cpp @@ -159,7 +159,6 @@ BufferTextureData* BufferTextureData::CreateForYCbCrWithBufferSize(KnowsCompositor* aAllocator, int32_t aBufferSize, YUVColorSpace aYUVColorSpace, - uint32_t aDepth, TextureFlags aTextureFlags) { if (aBufferSize == 0 || !gfx::Factory::CheckBufferSize(aBufferSize)) { @@ -172,10 +171,9 @@ BufferTextureData::CreateForYCbCrWithBufferSize(KnowsCompositor* aAllocator, // Initialize the metadata with something, even if it will have to be rewritten // afterwards since we don't know the dimensions of the texture at this point. - BufferDescriptor desc = YCbCrDescriptor(gfx::IntSize(), 0, gfx::IntSize(), 0, + BufferDescriptor desc = YCbCrDescriptor(gfx::IntSize(), gfx::IntSize(), 0, 0, 0, StereoMode::MONO, aYUVColorSpace, - aDepth, hasIntermediateBuffer); return CreateInternal(aAllocator ? aAllocator->GetTextureForwarder() : nullptr, @@ -185,16 +183,12 @@ BufferTextureData::CreateForYCbCrWithBufferSize(KnowsCompositor* aAllocator, BufferTextureData* BufferTextureData::CreateForYCbCr(KnowsCompositor* aAllocator, gfx::IntSize aYSize, - uint32_t aYStride, gfx::IntSize aCbCrSize, - uint32_t aCbCrStride, StereoMode aStereoMode, YUVColorSpace aYUVColorSpace, - uint32_t aDepth, TextureFlags aTextureFlags) { - uint32_t bufSize = ImageDataSerializer::ComputeYCbCrBufferSize( - aYSize, aYStride, aCbCrSize, aCbCrStride); + uint32_t bufSize = ImageDataSerializer::ComputeYCbCrBufferSize(aYSize, aCbCrSize); if (bufSize == 0) { return nullptr; } @@ -202,30 +196,20 @@ BufferTextureData::CreateForYCbCr(KnowsCompositor* aAllocator, uint32_t yOffset; uint32_t cbOffset; uint32_t crOffset; - ImageDataSerializer::ComputeYCbCrOffsets(aYStride, aYSize.height, - aCbCrStride, aCbCrSize.height, - yOffset, cbOffset, crOffset); + ImageDataSerializer::ComputeYCbCrOffsets(aYSize.width, aYSize.height, + aCbCrSize.width, aCbCrSize.height, + yOffset, cbOffset, crOffset); - bool hasIntermediateBuffer = - aAllocator - ? ComputeHasIntermediateBuffer(gfx::SurfaceFormat::YUV, - aAllocator->GetCompositorBackendType()) - : true; + bool hasIntermediateBuffer = aAllocator ? ComputeHasIntermediateBuffer(gfx::SurfaceFormat::YUV, + aAllocator->GetCompositorBackendType()) + : true; - YCbCrDescriptor descriptor = YCbCrDescriptor(aYSize, aYStride, - aCbCrSize, aCbCrStride, - yOffset, cbOffset, crOffset, - aStereoMode, - aYUVColorSpace, - aDepth, + YCbCrDescriptor descriptor = YCbCrDescriptor(aYSize, aCbCrSize, yOffset, cbOffset, + crOffset, aStereoMode, aYUVColorSpace, hasIntermediateBuffer); - return CreateInternal(aAllocator ? aAllocator->GetTextureForwarder() - : nullptr, - descriptor, - gfx::BackendType::NONE, - bufSize, - aTextureFlags); + return CreateInternal(aAllocator ? aAllocator->GetTextureForwarder() : nullptr, descriptor, + gfx::BackendType::NONE, bufSize, aTextureFlags); } void @@ -270,12 +254,6 @@ BufferTextureData::GetYUVColorSpace() const return ImageDataSerializer::YUVColorSpaceFromBufferDescriptor(mDescriptor); } -Maybe -BufferTextureData::GetDepth() const -{ - return ImageDataSerializer::DepthFromBufferDescriptor(mDescriptor); -} - Maybe BufferTextureData::GetStereoMode() const { @@ -373,17 +351,17 @@ BufferTextureData::BorrowMappedYCbCrData(MappedYCbCrTextureData& aMap) aMap.y.data = data + desc.yOffset(); aMap.y.size = ySize; - aMap.y.stride = desc.yStride(); + aMap.y.stride = ySize.width; aMap.y.skip = 0; aMap.cb.data = data + desc.cbOffset(); aMap.cb.size = cbCrSize; - aMap.cb.stride = desc.cbCrStride(); + aMap.cb.stride = cbCrSize.width; aMap.cb.skip = 0; aMap.cr.data = data + desc.crOffset(); aMap.cr.size = cbCrSize; - aMap.cr.stride = desc.cbCrStride(); + aMap.cr.stride = cbCrSize.width; aMap.cr.skip = 0; return true; diff --git a/gfx/layers/BufferTexture.h b/gfx/layers/BufferTexture.h index dd78aa8b351a..2999d1d944be 100644 --- a/gfx/layers/BufferTexture.h +++ b/gfx/layers/BufferTexture.h @@ -30,12 +30,9 @@ public: static BufferTextureData* CreateForYCbCr(KnowsCompositor* aAllocator, gfx::IntSize aYSize, - uint32_t aYStride, gfx::IntSize aCbCrSize, - uint32_t aCbCrStride, StereoMode aStereoMode, YUVColorSpace aYUVColorSpace, - uint32_t aDepth, TextureFlags aTextureFlags); // It is generally better to use CreateForYCbCr instead. @@ -44,7 +41,6 @@ public: static BufferTextureData* CreateForYCbCrWithBufferSize(KnowsCompositor* aAllocator, int32_t aSize, YUVColorSpace aYUVColorSpace, - uint32_t aDepth, TextureFlags aTextureFlags); virtual bool Lock(OpenMode aMode) override { return true; } @@ -71,8 +67,6 @@ public: Maybe GetYUVColorSpace() const; - Maybe GetDepth() const; - Maybe GetStereoMode() const; protected: diff --git a/gfx/layers/Effects.h b/gfx/layers/Effects.h index f6f7f094fe07..d4d459c76b20 100644 --- a/gfx/layers/Effects.h +++ b/gfx/layers/Effects.h @@ -161,16 +161,14 @@ struct EffectRGB : public TexturedEffect struct EffectYCbCr : public TexturedEffect { - EffectYCbCr(TextureSource *aSource, YUVColorSpace aYUVColorSpace, uint32_t aDepth, gfx::SamplingFilter aSamplingFilter) + EffectYCbCr(TextureSource *aSource, YUVColorSpace aYUVColorSpace, gfx::SamplingFilter aSamplingFilter) : TexturedEffect(EffectTypes::YCBCR, aSource, false, aSamplingFilter) , mYUVColorSpace(aYUVColorSpace) - , mDepth(aDepth) {} virtual const char* Name() { return "EffectYCbCr"; } YUVColorSpace mYUVColorSpace; - uint32_t mDepth; }; struct EffectNV12 : public TexturedEffect @@ -272,8 +270,7 @@ CreateTexturedEffect(TextureHost* aHost, RefPtr result; if (aHost->GetReadFormat() == gfx::SurfaceFormat::YUV) { MOZ_ASSERT(aHost->GetYUVColorSpace() != YUVColorSpace::UNKNOWN); - result = new EffectYCbCr( - aSource, aHost->GetYUVColorSpace(), aHost->GetDepth(), aSamplingFilter); + result = new EffectYCbCr(aSource, aHost->GetYUVColorSpace(), aSamplingFilter); } else { result = CreateTexturedEffect(aHost->GetReadFormat(), aSource, diff --git a/gfx/layers/ImageDataSerializer.cpp b/gfx/layers/ImageDataSerializer.cpp index 8e6c3a4cbe1f..08ed83bd9957 100644 --- a/gfx/layers/ImageDataSerializer.cpp +++ b/gfx/layers/ImageDataSerializer.cpp @@ -71,12 +71,18 @@ ComputeYCbCrBufferSize(const gfx::IntSize& aYSize, int32_t aYStride, !gfx::Factory::AllowedSurfaceSize(IntSize(aCbCrStride, aCbCrSize.height))) { return 0; } - // Overflow checks are performed in AllowedSurfaceSize return GetAlignedStride<4>(aYSize.height, aYStride) + 2 * GetAlignedStride<4>(aCbCrSize.height, aCbCrStride); } +// Minimum required shmem size in bytes +uint32_t +ComputeYCbCrBufferSize(const gfx::IntSize& aYSize, const gfx::IntSize& aCbCrSize) +{ + return ComputeYCbCrBufferSize(aYSize, aYSize.width, aCbCrSize, aCbCrSize.width); +} + uint32_t ComputeYCbCrBufferSize(uint32_t aBufferSize) { @@ -130,6 +136,7 @@ Maybe CbCrSizeFromBufferDescriptor(const BufferDescriptor& aDescri } Maybe YUVColorSpaceFromBufferDescriptor(const BufferDescriptor& aDescriptor) +{ { switch (aDescriptor.type()) { case BufferDescriptor::TRGBDescriptor: @@ -137,20 +144,9 @@ Maybe YUVColorSpaceFromBufferDescriptor(const BufferDescriptor& a case BufferDescriptor::TYCbCrDescriptor: return Some(aDescriptor.get_YCbCrDescriptor().yUVColorSpace()); default: - MOZ_CRASH("GFX: YUVColorSpaceFromBufferDescriptor"); + MOZ_CRASH("GFX: CbCrSizeFromBufferDescriptor"); } } - -Maybe DepthFromBufferDescriptor(const BufferDescriptor& aDescriptor) -{ - switch (aDescriptor.type()) { - case BufferDescriptor::TRGBDescriptor: - return Nothing(); - case BufferDescriptor::TYCbCrDescriptor: - return Some(aDescriptor.get_YCbCrDescriptor().depth()); - default: - MOZ_CRASH("GFX: DepthFromBufferDescriptor"); - } } Maybe StereoModeFromBufferDescriptor(const BufferDescriptor& aDescriptor) @@ -161,7 +157,7 @@ Maybe StereoModeFromBufferDescriptor(const BufferDescriptor& aDescri case BufferDescriptor::TYCbCrDescriptor: return Some(aDescriptor.get_YCbCrDescriptor().stereoMode()); default: - MOZ_CRASH("GFX: StereoModeFromBufferDescriptor"); + MOZ_CRASH("GFX: CbCrSizeFromBufferDescriptor"); } } @@ -184,6 +180,9 @@ already_AddRefed DataSourceSurfaceFromYCbCrDescriptor(uint8_t* aBuffer, const YCbCrDescriptor& aDescriptor, gfx::DataSourceSurface* aSurface) { gfx::IntSize ySize = aDescriptor.ySize(); + gfx::IntSize cbCrSize = aDescriptor.cbCrSize(); + int32_t yStride = ySize.width; + int32_t cbCrStride = cbCrSize.width; RefPtr result; if (aSurface) { @@ -210,15 +209,14 @@ DataSourceSurfaceFromYCbCrDescriptor(uint8_t* aBuffer, const YCbCrDescriptor& aD layers::PlanarYCbCrData ycbcrData; ycbcrData.mYChannel = GetYChannel(aBuffer, aDescriptor); - ycbcrData.mYStride = aDescriptor.yStride(); + ycbcrData.mYStride = yStride; ycbcrData.mYSize = ySize; ycbcrData.mCbChannel = GetCbChannel(aBuffer, aDescriptor); ycbcrData.mCrChannel = GetCrChannel(aBuffer, aDescriptor); - ycbcrData.mCbCrStride = aDescriptor.cbCrStride(); - ycbcrData.mCbCrSize = aDescriptor.cbCrSize(); + ycbcrData.mCbCrStride = cbCrStride; + ycbcrData.mCbCrSize = cbCrSize; ycbcrData.mPicSize = ySize; ycbcrData.mYUVColorSpace = aDescriptor.yUVColorSpace(); - ycbcrData.mDepth = aDescriptor.depth(); gfx::ConvertYCbCrToRGB(ycbcrData, gfx::SurfaceFormat::B8G8R8X8, @@ -239,18 +237,21 @@ ConvertAndScaleFromYCbCrDescriptor(uint8_t* aBuffer, int32_t aStride) { MOZ_ASSERT(aBuffer); + gfx::IntSize ySize = aDescriptor.ySize(); + gfx::IntSize cbCrSize = aDescriptor.cbCrSize(); + int32_t yStride = ySize.width; + int32_t cbCrStride = cbCrSize.width; layers::PlanarYCbCrData ycbcrData; ycbcrData.mYChannel = GetYChannel(aBuffer, aDescriptor); - ycbcrData.mYStride = aDescriptor.yStride();; - ycbcrData.mYSize = aDescriptor.ySize(); + ycbcrData.mYStride = yStride; + ycbcrData.mYSize = ySize; ycbcrData.mCbChannel = GetCbChannel(aBuffer, aDescriptor); ycbcrData.mCrChannel = GetCrChannel(aBuffer, aDescriptor); - ycbcrData.mCbCrStride = aDescriptor.cbCrStride(); - ycbcrData.mCbCrSize = aDescriptor.cbCrSize(); - ycbcrData.mPicSize = aDescriptor.ySize(); + ycbcrData.mCbCrStride = cbCrStride; + ycbcrData.mCbCrSize = cbCrSize; + ycbcrData.mPicSize = ySize; ycbcrData.mYUVColorSpace = aDescriptor.yUVColorSpace(); - ycbcrData.mDepth = aDescriptor.depth(); gfx::ConvertYCbCrToRGB(ycbcrData, aDestFormat, aDestSize, aDestBuffer, aStride); } diff --git a/gfx/layers/ImageDataSerializer.h b/gfx/layers/ImageDataSerializer.h index f1d306729dba..53a589d21d95 100644 --- a/gfx/layers/ImageDataSerializer.h +++ b/gfx/layers/ImageDataSerializer.h @@ -45,6 +45,9 @@ uint32_t ComputeYCbCrBufferSize(const gfx::IntSize& aYSize, int32_t aYStride, const gfx::IntSize& aCbCrSize, int32_t aCbCrStride); +uint32_t ComputeYCbCrBufferSize(const gfx::IntSize& aYSize, + const gfx::IntSize& aCbCrSize); + uint32_t ComputeYCbCrBufferSize(uint32_t aBufferSize); void ComputeYCbCrOffsets(int32_t yStride, int32_t yHeight, @@ -59,8 +62,6 @@ Maybe CbCrSizeFromBufferDescriptor(const BufferDescriptor& aDescri Maybe YUVColorSpaceFromBufferDescriptor(const BufferDescriptor& aDescriptor); -Maybe DepthFromBufferDescriptor(const BufferDescriptor& aDescriptor); - Maybe StereoModeFromBufferDescriptor(const BufferDescriptor& aDescriptor); uint8_t* GetYChannel(uint8_t* aBuffer, const YCbCrDescriptor& aDescriptor); diff --git a/gfx/layers/client/ImageClient.cpp b/gfx/layers/client/ImageClient.cpp index bcec7e7803fc..cc9dd207e7e8 100644 --- a/gfx/layers/client/ImageClient.cpp +++ b/gfx/layers/client/ImageClient.cpp @@ -101,11 +101,8 @@ ImageClient::CreateTextureClientForImage(Image* aImage, KnowsCompositor* aForwar return nullptr; } texture = TextureClient::CreateForYCbCr(aForwarder, - data->mYSize, data->mYStride, - data->mCbCrSize, data->mCbCrStride, - data->mStereoMode, + data->mYSize, data->mCbCrSize, data->mStereoMode, data->mYUVColorSpace, - data->mDepth, TextureFlags::DEFAULT); if (!texture) { return nullptr; diff --git a/gfx/layers/client/TextureClient.cpp b/gfx/layers/client/TextureClient.cpp index 03c3b961bea3..fd11ce9736f0 100644 --- a/gfx/layers/client/TextureClient.cpp +++ b/gfx/layers/client/TextureClient.cpp @@ -1256,12 +1256,9 @@ TextureClient::CreateForRawBufferAccess(LayersIPCChannel* aAllocator, already_AddRefed TextureClient::CreateForYCbCr(KnowsCompositor* aAllocator, gfx::IntSize aYSize, - uint32_t aYStride, gfx::IntSize aCbCrSize, - uint32_t aCbCrStride, StereoMode aStereoMode, YUVColorSpace aYUVColorSpace, - uint32_t aDepth, TextureFlags aTextureFlags) { if (!aAllocator || !aAllocator->GetLayersIPCActor()->IPCOpen()) { @@ -1272,12 +1269,9 @@ TextureClient::CreateForYCbCr(KnowsCompositor* aAllocator, return nullptr; } - TextureData* data = - BufferTextureData::CreateForYCbCr(aAllocator, - aYSize, aYStride, - aCbCrSize, aCbCrStride, - aStereoMode, aYUVColorSpace, - aDepth, aTextureFlags); + TextureData* data = BufferTextureData::CreateForYCbCr(aAllocator, aYSize, aCbCrSize, + aStereoMode, aYUVColorSpace, + aTextureFlags); if (!data) { return nullptr; } @@ -1291,15 +1285,15 @@ already_AddRefed TextureClient::CreateForYCbCrWithBufferSize(KnowsCompositor* aAllocator, size_t aSize, YUVColorSpace aYUVColorSpace, - uint32_t aDepth, TextureFlags aTextureFlags) { if (!aAllocator || !aAllocator->GetLayersIPCActor()->IPCOpen()) { return nullptr; } - TextureData* data = BufferTextureData::CreateForYCbCrWithBufferSize( - aAllocator, aSize, aYUVColorSpace, aDepth, aTextureFlags); + TextureData* data = + BufferTextureData::CreateForYCbCrWithBufferSize(aAllocator, aSize, aYUVColorSpace, + aTextureFlags); if (!data) { return nullptr; } @@ -1308,28 +1302,26 @@ TextureClient::CreateForYCbCrWithBufferSize(KnowsCompositor* aAllocator, aAllocator->GetTextureForwarder()); } -TextureClient::TextureClient(TextureData* aData, - TextureFlags aFlags, - LayersIPCChannel* aAllocator) - : AtomicRefCountedWithFinalize("TextureClient") - , mAllocator(aAllocator) - , mActor(nullptr) - , mData(aData) - , mFlags(aFlags) - , mOpenMode(OpenMode::OPEN_NONE) +TextureClient::TextureClient(TextureData* aData, TextureFlags aFlags, LayersIPCChannel* aAllocator) +: AtomicRefCountedWithFinalize("TextureClient") +, mAllocator(aAllocator) +, mActor(nullptr) +, mData(aData) +, mFlags(aFlags) +, mOpenMode(OpenMode::OPEN_NONE) #ifdef DEBUG - , mExpectedDtRefs(0) +, mExpectedDtRefs(0) #endif - , mIsLocked(false) - , mIsReadLocked(false) - , mUpdated(false) - , mAddedToCompositableClient(false) - , mWorkaroundAnnoyingSharedSurfaceLifetimeIssues(false) - , mWorkaroundAnnoyingSharedSurfaceOwnershipIssues(false) - , mFwdTransactionId(0) - , mSerial(++sSerialCounter) +, mIsLocked(false) +, mIsReadLocked(false) +, mUpdated(false) +, mAddedToCompositableClient(false) +, mWorkaroundAnnoyingSharedSurfaceLifetimeIssues(false) +, mWorkaroundAnnoyingSharedSurfaceOwnershipIssues(false) +, mFwdTransactionId(0) +, mSerial(++sSerialCounter) #ifdef GFX_DEBUG_TRACK_CLIENTS_IN_POOL - , mPoolTracker(nullptr) +, mPoolTracker(nullptr) #endif { mData->FillInfo(mInfo); @@ -1765,18 +1757,14 @@ UpdateYCbCrTextureClient(TextureClient* aTexture, const PlanarYCbCrData& aData) srcData.y.size = aData.mYSize; srcData.y.stride = aData.mYStride; srcData.y.skip = aData.mYSkip; - MOZ_ASSERT(aData.mDepth == 8 || (aData.mDepth > 8 && aData.mDepth <= 16)); - srcData.y.bytesPerPixel = (aData.mDepth > 8) ? 2 : 1; srcData.cb.data = aData.mCbChannel; srcData.cb.size = aData.mCbCrSize; srcData.cb.stride = aData.mCbCrStride; srcData.cb.skip = aData.mCbSkip; - srcData.cb.bytesPerPixel = (aData.mDepth > 8) ? 2 : 1; srcData.cr.data = aData.mCrChannel; srcData.cr.size = aData.mCbCrSize; srcData.cr.stride = aData.mCbCrStride; srcData.cr.skip = aData.mCrSkip; - srcData.cr.bytesPerPixel = (aData.mDepth > 8) ? 2 : 1; srcData.metadata = nullptr; if (!srcData.CopyInto(mapped)) { @@ -1821,19 +1809,15 @@ MappedYCbCrChannelData::CopyInto(MappedYCbCrChannelData& aDst) // fast-ish path memcpy(aDst.data + i * aDst.stride, data + i * stride, - size.width * bytesPerPixel); + size.width); } else { // slow path uint8_t* src = data + i * stride; uint8_t* dst = aDst.data + i * aDst.stride; for (int32_t j = 0; j < size.width; ++j) { - for (uint32_t k = 0; k < bytesPerPixel; ++k) { - *dst = *src; - src += 1; - dst += 1; - } - src += skip; - dst += aDst.skip; + *dst = *src; + src += 1 + skip; + dst += 1 + aDst.skip; } } } diff --git a/gfx/layers/client/TextureClient.h b/gfx/layers/client/TextureClient.h index 605bcd5d70a7..df816bbf126c 100644 --- a/gfx/layers/client/TextureClient.h +++ b/gfx/layers/client/TextureClient.h @@ -139,7 +139,6 @@ struct MappedYCbCrChannelData gfx::IntSize size; int32_t stride; int32_t skip; - uint32_t bytesPerPixel; bool CopyInto(MappedYCbCrChannelData& aDst); }; @@ -348,12 +347,9 @@ public: static already_AddRefed CreateForYCbCr(KnowsCompositor* aAllocator, gfx::IntSize aYSize, - uint32_t aYStride, gfx::IntSize aCbCrSize, - uint32_t aCbCrStride, StereoMode aStereoMode, YUVColorSpace aYUVColorSpace, - uint32_t aDepth, TextureFlags aTextureFlags); // Creates and allocates a TextureClient (can be accessed through raw @@ -373,7 +369,6 @@ public: CreateForYCbCrWithBufferSize(KnowsCompositor* aAllocator, size_t aSize, YUVColorSpace aYUVColorSpace, - uint32_t aDepth, TextureFlags aTextureFlags); // Creates and allocates a TextureClient of the same type. diff --git a/gfx/layers/client/TextureClientRecycleAllocator.cpp b/gfx/layers/client/TextureClientRecycleAllocator.cpp index 2c06fa189005..fcfc0e99578a 100644 --- a/gfx/layers/client/TextureClientRecycleAllocator.cpp +++ b/gfx/layers/client/TextureClientRecycleAllocator.cpp @@ -108,8 +108,6 @@ YCbCrTextureClientAllocationHelper::IsCompatible(TextureClient* aTextureClient) bufferData->GetCbCrSize().ref() != mData.mCbCrSize || bufferData->GetYUVColorSpace().isNothing() || bufferData->GetYUVColorSpace().ref() != mData.mYUVColorSpace || - bufferData->GetDepth().isNothing() || - bufferData->GetDepth().ref() != mData.mDepth || bufferData->GetStereoMode().isNothing() || bufferData->GetStereoMode().ref() != mData.mStereoMode) { return false; @@ -121,11 +119,9 @@ already_AddRefed YCbCrTextureClientAllocationHelper::Allocate(KnowsCompositor* aAllocator) { return TextureClient::CreateForYCbCr(aAllocator, - mData.mYSize, mData.mYStride, - mData.mCbCrSize, mData.mCbCrStride, + mData.mYSize, mData.mCbCrSize, mData.mStereoMode, mData.mYUVColorSpace, - mData.mDepth, mTextureFlags); } diff --git a/gfx/layers/composite/TextureHost.cpp b/gfx/layers/composite/TextureHost.cpp index efd311cd4288..bb429a364e96 100644 --- a/gfx/layers/composite/TextureHost.cpp +++ b/gfx/layers/composite/TextureHost.cpp @@ -446,7 +446,7 @@ TextureSource::Name() const MOZ_CRASH("GFX: TextureSource without class name"); return "TextureSource"; } - + BufferTextureHost::BufferTextureHost(const BufferDescriptor& aDesc, TextureFlags aFlags) : TextureHost(aFlags) @@ -880,16 +880,6 @@ BufferTextureHost::GetYUVColorSpace() const return YUVColorSpace::UNKNOWN; } -uint32_t -BufferTextureHost::GetDepth() const -{ - if (mFormat == gfx::SurfaceFormat::YUV) { - const YCbCrDescriptor& desc = mDescriptor.get_YCbCrDescriptor(); - return desc.depth(); - } - return 8; -} - bool BufferTextureHost::UploadIfNeeded() { @@ -996,19 +986,19 @@ BufferTextureHost::Upload(nsIntRegion *aRegion) RefPtr tempY = gfx::Factory::CreateWrappingDataSourceSurface(ImageDataSerializer::GetYChannel(buf, desc), - desc.yStride(), + desc.ySize().width, desc.ySize(), - SurfaceFormatForAlphaDepth(desc.depth())); + gfx::SurfaceFormat::A8); RefPtr tempCb = gfx::Factory::CreateWrappingDataSourceSurface(ImageDataSerializer::GetCbChannel(buf, desc), - desc.cbCrStride(), + desc.cbCrSize().width, desc.cbCrSize(), - SurfaceFormatForAlphaDepth(desc.depth())); + gfx::SurfaceFormat::A8); RefPtr tempCr = gfx::Factory::CreateWrappingDataSourceSurface(ImageDataSerializer::GetCrChannel(buf, desc), - desc.cbCrStride(), + desc.cbCrSize().width, desc.cbCrSize(), - SurfaceFormatForAlphaDepth(desc.depth())); + gfx::SurfaceFormat::A8); // We don't support partial updates for Y U V textures NS_ASSERTION(!aRegion, "Unsupported partial updates for YCbCr textures"); if (!tempY || diff --git a/gfx/layers/composite/TextureHost.h b/gfx/layers/composite/TextureHost.h index a3d6bc00b971..8e808903a7d0 100644 --- a/gfx/layers/composite/TextureHost.h +++ b/gfx/layers/composite/TextureHost.h @@ -438,11 +438,6 @@ public: virtual YUVColorSpace GetYUVColorSpace() const { return YUVColorSpace::UNKNOWN; } - /** - * Return the bit depth of the image. Used with YUV textures. - */ - virtual uint32_t GetDepth() const { return 8; } - /** * Called during the transaction. The TextureSource may or may not be composited. * @@ -737,8 +732,6 @@ public: virtual YUVColorSpace GetYUVColorSpace() const override; - virtual uint32_t GetDepth() const override; - virtual gfx::IntSize GetSize() const override { return mSize; } virtual already_AddRefed GetAsSurface() override; diff --git a/gfx/layers/ipc/LayersSurfaces.ipdlh b/gfx/layers/ipc/LayersSurfaces.ipdlh index f1f84e6cc1c0..e4d296b32f88 100644 --- a/gfx/layers/ipc/LayersSurfaces.ipdlh +++ b/gfx/layers/ipc/LayersSurfaces.ipdlh @@ -100,15 +100,12 @@ struct RGBDescriptor { struct YCbCrDescriptor { IntSize ySize; - uint32_t yStride; IntSize cbCrSize; - uint32_t cbCrStride; uint32_t yOffset; uint32_t cbOffset; uint32_t crOffset; StereoMode stereoMode; YUVColorSpace yUVColorSpace; - uint32_t depth; bool hasIntermediateBuffer; }; diff --git a/gfx/layers/ipc/SharedPlanarYCbCrImage.cpp b/gfx/layers/ipc/SharedPlanarYCbCrImage.cpp index 8a82c8964a66..1688a86046d4 100644 --- a/gfx/layers/ipc/SharedPlanarYCbCrImage.cpp +++ b/gfx/layers/ipc/SharedPlanarYCbCrImage.cpp @@ -113,21 +113,13 @@ SharedPlanarYCbCrImage::AdoptData(const Data& aData) uint32_t crOffset = aData.mCrChannel - base; auto fwd = mCompositable->GetForwarder(); - bool hasIntermediateBuffer = ComputeHasIntermediateBuffer( - gfx::SurfaceFormat::YUV, fwd->GetCompositorBackendType()); + bool hasIntermediateBuffer = ComputeHasIntermediateBuffer(gfx::SurfaceFormat::YUV, + fwd->GetCompositorBackendType()); - static_cast(mTextureClient->GetInternalData()) - ->SetDesciptor(YCbCrDescriptor(aData.mYSize, - aData.mYStride, - aData.mCbCrSize, - aData.mCbCrStride, - yOffset, - cbOffset, - crOffset, - aData.mStereoMode, - aData.mYUVColorSpace, - aData.mDepth, - hasIntermediateBuffer)); + static_cast(mTextureClient->GetInternalData())->SetDesciptor( + YCbCrDescriptor(aData.mYSize, aData.mCbCrSize, yOffset, cbOffset, crOffset, + aData.mStereoMode, aData.mYUVColorSpace, hasIntermediateBuffer) + ); return true; } @@ -183,20 +175,18 @@ SharedPlanarYCbCrImage::Allocate(PlanarYCbCrData& aData) mData.mPicSize = aData.mPicSize; mData.mStereoMode = aData.mStereoMode; mData.mYUVColorSpace = aData.mYUVColorSpace; - mData.mDepth = aData.mDepth; // those members are not always equal to aData's, due to potentially different // packing. mData.mYSkip = 0; mData.mCbSkip = 0; mData.mCrSkip = 0; - mData.mYStride = aData.mYStride; - mData.mCbCrStride = aData.mCbCrStride; + mData.mYStride = mData.mYSize.width; + mData.mCbCrStride = mData.mCbCrSize.width; // do not set mBuffer like in PlanarYCbCrImage because the later // will try to manage this memory without knowing it belongs to a // shmem. - mBufferSize = ImageDataSerializer::ComputeYCbCrBufferSize( - mData.mYSize, mData.mYStride, mData.mCbCrSize, mData.mCbCrStride); + mBufferSize = ImageDataSerializer::ComputeYCbCrBufferSize(mData.mYSize, mData.mCbCrSize); mSize = mData.mPicSize; mOrigin = gfx::IntPoint(aData.mPicX, aData.mPicY); diff --git a/gfx/tests/gtest/TestTextures.cpp b/gfx/tests/gtest/TestTextures.cpp index 06c43d4bae9f..5c6820a1e180 100644 --- a/gfx/tests/gtest/TestTextures.cpp +++ b/gfx/tests/gtest/TestTextures.cpp @@ -262,7 +262,6 @@ TEST(Layers, TextureYCbCrSerialization) { clientData.mCbCrStride = cbSurface->Stride(); clientData.mStereoMode = StereoMode::MONO; clientData.mYUVColorSpace = YUVColorSpace::BT601; - clientData.mDepth = 8; clientData.mYSkip = 0; clientData.mCbSkip = 0; clientData.mCrSkip = 0; @@ -291,9 +290,9 @@ TEST(Layers, TextureYCbCrSerialization) { return; } - RefPtr client = TextureClient::CreateForYCbCr(imageBridge, clientData.mYSize, clientData.mYStride, clientData.mCbCrSize, clientData.mCbCrStride, + RefPtr client = TextureClient::CreateForYCbCr(imageBridge, clientData.mYSize, clientData.mCbCrSize, StereoMode::MONO, YUVColorSpace::BT601, - 8, TextureFlags::DEALLOCATE_CLIENT); + TextureFlags::DEALLOCATE_CLIENT); TestTextureClientYCbCr(client, clientData); diff --git a/gfx/tests/gtest/TextureHelper.h b/gfx/tests/gtest/TextureHelper.h index 144a237b17d4..eea7ac66132b 100644 --- a/gfx/tests/gtest/TextureHelper.h +++ b/gfx/tests/gtest/TextureHelper.h @@ -62,14 +62,9 @@ CreateYCbCrTextureClientWithBackend(LayersBackend aLayersBackend) // Create YCbCrTexture for basice backend. if (aLayersBackend == LayersBackend::LAYERS_BASIC) { - return TextureClient::CreateForYCbCr(nullptr, - clientData.mYSize, - clientData.mYStride, - clientData.mCbCrSize, - clientData.mCbCrStride, - StereoMode::MONO, + return TextureClient::CreateForYCbCr(nullptr, clientData.mYSize, + clientData.mCbCrSize, StereoMode::MONO, YUVColorSpace::BT601, - 8, TextureFlags::DEALLOCATE_CLIENT); }