Bug 1639874 - Fix YCbCrTextureClientAllocationHelper::IsCompatible() r=jrmuizel

IsCompatible() also needs to check YStride and CbCrStride. They also affect to buffer size.

Differential Revision: https://phabricator.services.mozilla.com/D76323
This commit is contained in:
sotaro 2020-05-21 18:53:42 +00:00
Родитель cbb73e22c8
Коммит 6d4116acb8
6 изменённых файлов: 47 добавлений и 2 удалений

Просмотреть файл

@ -227,6 +227,14 @@ Maybe<gfx::IntSize> BufferTextureData::GetCbCrSize() const {
return ImageDataSerializer::CbCrSizeFromBufferDescriptor(mDescriptor);
}
Maybe<int32_t> BufferTextureData::GetYStride() const {
return ImageDataSerializer::YStrideFromBufferDescriptor(mDescriptor);
}
Maybe<int32_t> BufferTextureData::GetCbCrStride() const {
return ImageDataSerializer::CbCrStrideFromBufferDescriptor(mDescriptor);
}
Maybe<gfx::YUVColorSpace> BufferTextureData::GetYUVColorSpace() const {
return ImageDataSerializer::YUVColorSpaceFromBufferDescriptor(mDescriptor);
}

Просмотреть файл

@ -61,6 +61,10 @@ class BufferTextureData : public TextureData {
Maybe<gfx::IntSize> GetCbCrSize() const;
Maybe<int32_t> GetYStride() const;
Maybe<int32_t> GetCbCrStride() const;
Maybe<gfx::YUVColorSpace> GetYUVColorSpace() const;
Maybe<gfx::ColorDepth> GetColorDepth() const;

Просмотреть файл

@ -154,7 +154,31 @@ Maybe<gfx::IntSize> CbCrSizeFromBufferDescriptor(
case BufferDescriptor::TYCbCrDescriptor:
return Some(aDescriptor.get_YCbCrDescriptor().cbCrSize());
default:
MOZ_CRASH("GFX: CbCrSizeFromBufferDescriptor");
MOZ_CRASH("GFX: CbCrSizeFromBufferDescriptor");
}
}
Maybe<int32_t> YStrideFromBufferDescriptor(
const BufferDescriptor& aDescriptor) {
switch (aDescriptor.type()) {
case BufferDescriptor::TRGBDescriptor:
return Nothing();
case BufferDescriptor::TYCbCrDescriptor:
return Some(aDescriptor.get_YCbCrDescriptor().yStride());
default:
MOZ_CRASH("GFX: YStrideFromBufferDescriptor");
}
}
Maybe<int32_t> CbCrStrideFromBufferDescriptor(
const BufferDescriptor& aDescriptor) {
switch (aDescriptor.type()) {
case BufferDescriptor::TRGBDescriptor:
return Nothing();
case BufferDescriptor::TYCbCrDescriptor:
return Some(aDescriptor.get_YCbCrDescriptor().cbCrStride());
default:
MOZ_CRASH("GFX: CbCrStrideFromBufferDescriptor");
}
}

Просмотреть файл

@ -60,6 +60,11 @@ gfx::IntSize SizeFromBufferDescriptor(const BufferDescriptor& aDescriptor);
Maybe<gfx::IntSize> CbCrSizeFromBufferDescriptor(
const BufferDescriptor& aDescriptor);
Maybe<int32_t> YStrideFromBufferDescriptor(const BufferDescriptor& aDescriptor);
Maybe<int32_t> CbCrStrideFromBufferDescriptor(
const BufferDescriptor& aDescriptor);
Maybe<gfx::YUVColorSpace> YUVColorSpaceFromBufferDescriptor(
const BufferDescriptor& aDescriptor);

Просмотреть файл

@ -83,6 +83,10 @@ bool YCbCrTextureClientAllocationHelper::IsCompatible(
if (!bufferData || aTextureClient->GetSize() != mData.mYSize ||
bufferData->GetCbCrSize().isNothing() ||
bufferData->GetCbCrSize().ref() != mData.mCbCrSize ||
bufferData->GetYStride().isNothing() ||
bufferData->GetYStride().ref() != mData.mYStride ||
bufferData->GetCbCrStride().isNothing() ||
bufferData->GetCbCrStride().ref() != mData.mCbCrStride ||
bufferData->GetYUVColorSpace().isNothing() ||
bufferData->GetYUVColorSpace().ref() != mData.mYUVColorSpace ||
bufferData->GetColorDepth().isNothing() ||

Просмотреть файл

@ -46,7 +46,7 @@ SharedPlanarYCbCrImage::~SharedPlanarYCbCrImage() {
TextureClientRecycleAllocator* SharedPlanarYCbCrImage::RecycleAllocator() {
static const uint32_t MAX_POOLED_VIDEO_COUNT = 5;
if (!mRecycleAllocator && mCompositable && mCompositable) {
if (!mRecycleAllocator && mCompositable) {
if (!mCompositable->HasTextureClientRecycler()) {
// Initialize TextureClientRecycler
mCompositable->GetTextureClientRecycler()->SetMaxPoolSize(