gecko-dev/gfx/ycbcr/YCbCrUtils.h
Lee Salzman 9ff6a3947e Bug 1750858 - Respect mPicSize in WebRender. r=sotaro
This makes WR properly handle mPicSize when RenderBufferTextureHost is used.
The main change is that we need to take care to pass in display().Size() from
the descriptor, and then further use that to carefully limit the size of the
CbCr texture, as it doesn't necessarily maintain an appropriate half-sized
scale with respect to the Y texture if it is padded.

Given that mPicSize should now actually work, we should no longer need any
of the previous mCroppedSize mechanisms that were added to work around this,
and so they are removed in this patch.

Differential Revision: https://phabricator.services.mozilla.com/D139267
2022-02-22 17:56:30 +00:00

53 lines
1.9 KiB
C++

/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef Y_CB_CR_UTILS_H_
#define Y_CB_CR_UTILS_H_
#include "mozilla/gfx/Types.h"
#include "ImageContainer.h"
namespace mozilla {
namespace gfx {
IntSize GetCroppedCbCrSize(const IntSize& aYSize, const IntSize& aCbCrSize,
const IntSize& aDisplaySize);
void
GetYCbCrToRGBDestFormatAndSize(const layers::PlanarYCbCrData& aData,
SurfaceFormat& aSuggestedFormat,
IntSize& aSuggestedSize);
void
ConvertYCbCrToRGB(const layers::PlanarYCbCrData& aData,
const SurfaceFormat& aDestFormat,
const IntSize& aDestSize,
unsigned char* aDestBuffer,
int32_t aStride);
using PremultFunc = int (*)(const uint8_t* src_argb, int src_stride_argb,
uint8_t* dst_argb, int dst_stride_argb, int width,
int height);
void ConvertYCbCrAToARGB(const layers::PlanarYCbCrData& aYCbCr,
const layers::PlanarAlphaData& aAlpha,
const SurfaceFormat& aDestFormat,
const IntSize& aDestSize,
unsigned char* aDestBuffer,
int32_t aStride, PremultFunc premultiplyAlphaOp);
void
ConvertI420AlphaToARGB(const uint8_t* aSrcY,
const uint8_t* aSrcU,
const uint8_t* aSrcV,
const uint8_t* aSrcA,
int aSrcStrideYA, int aSrcStrideUV,
uint8_t* aDstARGB, int aDstStrideARGB,
int aWidth, int aHeight);
} // namespace gfx
} // namespace mozilla
#endif /* Y_CB_CR_UTILS_H_ */