forked from FFmpeg/FFmpeg
lavu/hwcontext_qsv: specify Shift for each format
We can't get Shift from bit depth for some formats in the SDK. For example, bit depth is 10, however Shift is 0 for Y410 (XV30 in FFmpeg). In order to support these formats in the next commits, this patch specified Shift for each format Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
This commit is contained in:
parent
c962c78901
commit
1496e7c173
1 changed files with 19 additions and 8 deletions
|
@ -109,20 +109,21 @@ typedef struct QSVFramesContext {
|
|||
static const struct {
|
||||
enum AVPixelFormat pix_fmt;
|
||||
uint32_t fourcc;
|
||||
uint16_t mfx_shift;
|
||||
} supported_pixel_formats[] = {
|
||||
{ AV_PIX_FMT_NV12, MFX_FOURCC_NV12 },
|
||||
{ AV_PIX_FMT_BGRA, MFX_FOURCC_RGB4 },
|
||||
{ AV_PIX_FMT_P010, MFX_FOURCC_P010 },
|
||||
{ AV_PIX_FMT_PAL8, MFX_FOURCC_P8 },
|
||||
{ AV_PIX_FMT_NV12, MFX_FOURCC_NV12, 0 },
|
||||
{ AV_PIX_FMT_BGRA, MFX_FOURCC_RGB4, 0 },
|
||||
{ AV_PIX_FMT_P010, MFX_FOURCC_P010, 1 },
|
||||
{ AV_PIX_FMT_PAL8, MFX_FOURCC_P8, 0 },
|
||||
#if CONFIG_VAAPI
|
||||
{ AV_PIX_FMT_YUYV422,
|
||||
MFX_FOURCC_YUY2 },
|
||||
MFX_FOURCC_YUY2, 0 },
|
||||
{ AV_PIX_FMT_Y210,
|
||||
MFX_FOURCC_Y210 },
|
||||
MFX_FOURCC_Y210, 1 },
|
||||
// VUYX is used for VAAPI child device,
|
||||
// the SDK only delares support for AYUV
|
||||
{ AV_PIX_FMT_VUYX,
|
||||
MFX_FOURCC_AYUV },
|
||||
MFX_FOURCC_AYUV, 0 },
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -170,6 +171,16 @@ static uint32_t qsv_fourcc_from_pix_fmt(enum AVPixelFormat pix_fmt)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static uint16_t qsv_shift_from_pix_fmt(enum AVPixelFormat pix_fmt)
|
||||
{
|
||||
for (int i = 0; i < FF_ARRAY_ELEMS(supported_pixel_formats); i++) {
|
||||
if (supported_pixel_formats[i].pix_fmt == pix_fmt)
|
||||
return supported_pixel_formats[i].mfx_shift;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if CONFIG_D3D11VA
|
||||
static uint32_t qsv_get_d3d11va_bind_flags(int mem_type)
|
||||
{
|
||||
|
@ -503,7 +514,7 @@ static int qsv_init_surface(AVHWFramesContext *ctx, mfxFrameSurface1 *surf)
|
|||
|
||||
surf->Info.BitDepthLuma = desc->comp[0].depth;
|
||||
surf->Info.BitDepthChroma = desc->comp[0].depth;
|
||||
surf->Info.Shift = desc->comp[0].depth > 8;
|
||||
surf->Info.Shift = qsv_shift_from_pix_fmt(ctx->sw_format);
|
||||
|
||||
if (desc->log2_chroma_w && desc->log2_chroma_h)
|
||||
surf->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
|
||||
|
|
Loading…
Add table
Reference in a new issue