[FFmpeg-devel] [PATCH 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX

James Almer jamrial at gmail.com
Mon Aug 29 14:17:52 EEST 2022


On 8/29/2022 4:27 AM, Xiang, Haihao wrote:
> From: Haihao Xiang <haihao.xiang at intel.com>
> 
> AV_PIX_FMT_VUYX is used in FFmpeg for 8bit 4:4:4 content on Intel HW,
> and MFX_FOURCC_AYUV is used in the SDK

Sounds like you want the VUYA pixfmt instead.

> ---
>   libavutil/hwcontext_qsv.c | 8 ++++++++
>   1 file changed, 8 insertions(+)
> 
> diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
> index 510f422562..a3350eae0f 100644
> --- a/libavutil/hwcontext_qsv.c
> +++ b/libavutil/hwcontext_qsv.c
> @@ -119,6 +119,8 @@ static const struct {
>                          MFX_FOURCC_YUY2 },
>       { AV_PIX_FMT_Y210,
>                          MFX_FOURCC_Y210 },
> +    { AV_PIX_FMT_VUYX,
> +                       MFX_FOURCC_AYUV },
>   #endif
>   };
>   
> @@ -1502,6 +1504,12 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface)
>           surface->Data.U16 = (mfxU16 *)frame->data[0] + 1;
>           surface->Data.V16 = (mfxU16 *)frame->data[0] + 3;
>           break;
> +    case AV_PIX_FMT_VUYX:
> +        surface->Data.V = frame->data[0];
> +        surface->Data.U = frame->data[0] + 1;
> +        surface->Data.Y = frame->data[0] + 2;
> +        surface->Data.A = frame->data[0] + 3;

This will go wrong with VUYX. You need to use AV_PIX_FMT_VUYA.

> +        break;
>   #endif
>       default:
>           return MFX_ERR_UNSUPPORTED;


More information about the ffmpeg-devel mailing list