[FFmpeg-devel] [PATCH 3/3] Map 444 pix fmts to new VdpYCbCr types defined in VDPAU.

James Almer jamrial at gmail.com
Fri Apr 26 16:42:51 EEST 2019


On 4/26/2019 1:13 AM, ManojGuptaBonda wrote:
> New VdpYCbCr Formats VDP_YCBCR_FORMAT_Y_U_V_444 and,
> VDP_YCBCR_FORMAT_Y_UV_444 have been added in VDPAU to be used in
> get/putbits for YUV 4:4:4 surfaces. Earlier mapping of
> AV_PIX_FMT_YUV444P to VDP_YCBCR_FORMAT_YV12 is not valid.
> 
> Hence this Change maps AV_PIX_FMT_YUV444P to VDP_YCBCR_FORMAT_Y_U_V_444
> to access the YUV 4:4:4 surface via read-back API's of VDPAU.
> ---
>  libavutil/hwcontext_vdpau.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/libavutil/hwcontext_vdpau.c b/libavutil/hwcontext_vdpau.c
> index c11c3cfdab..786a51f802 100644
> --- a/libavutil/hwcontext_vdpau.c
> +++ b/libavutil/hwcontext_vdpau.c
> @@ -73,8 +73,8 @@ static const VDPAUPixFmtMap pix_fmts_422[] = {
>  };
>  
>  static const VDPAUPixFmtMap pix_fmts_444[] = {
> -    { VDP_YCBCR_FORMAT_YV12, AV_PIX_FMT_YUV444P },
> -    { 0,                     AV_PIX_FMT_NONE,   },
> +    { VDP_YCBCR_FORMAT_Y_U_V_444, AV_PIX_FMT_YUV444P },

No need for an #ifdef here and below, like in the previous patch?

> +    { 0,                          AV_PIX_FMT_NONE,   },
>  };
>  
>  static const struct {
> @@ -349,7 +349,7 @@ static int vdpau_transfer_data_from(AVHWFramesContext *ctx, AVFrame *dst,
>          return AVERROR(EINVAL);
>      }
>  
> -    if (vdpau_format == VDP_YCBCR_FORMAT_YV12)
> +    if ((vdpau_format == VDP_YCBCR_FORMAT_YV12) || (vdpau_format == VDP_YCBCR_FORMAT_Y_U_V_444))
>          FFSWAP(void*, data[1], data[2]);
>  
>      err = priv->get_data(surf, vdpau_format, data, linesize);
> @@ -400,7 +400,7 @@ static int vdpau_transfer_data_to(AVHWFramesContext *ctx, AVFrame *dst,
>          return AVERROR(EINVAL);
>      }
>  
> -    if (vdpau_format == VDP_YCBCR_FORMAT_YV12)
> +    if ((vdpau_format == VDP_YCBCR_FORMAT_YV12) || (vdpau_format == VDP_YCBCR_FORMAT_Y_U_V_444))
>          FFSWAP(const void*, data[1], data[2]);
>  
>      err = priv->put_data(surf, vdpau_format, data, linesize);
> 



More information about the ffmpeg-devel mailing list