зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
cbb73e22c8
Коммит
6d4116acb8
|
@ -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(
|
||||
|
|
Загрузка…
Ссылка в новой задаче