diff options
author | ManojGuptaBonda <mbonda@nvidia.com> | 2019-05-04 02:27:53 +0530 |
---|---|---|
committer | Philip Langdale <philipl@overt.org> | 2019-05-05 11:35:35 -0700 |
commit | d617d54efa146ddd81309c6236ca561ae1914698 (patch) | |
tree | 53fbe4ddfa6b35f6ba046180ff9c3a6b44c6fb19 /libavutil/hwcontext_vdpau.c | |
parent | 8cf5f948f24aef163fc57c3115440ef2d9c6cfd9 (diff) | |
download | ffmpeg-d617d54efa146ddd81309c6236ca561ae1914698.tar.gz |
avutil/hwcontext_vdpau: Map 444 pix fmts to new VdpYCbCr types
New VdpYCbCr Formats VDP_YCBCR_FORMAT_Y_U_V_444 and,
VDP_YCBCR_FORMAT_Y_UV_444 have been added in VDPAU with libvdpau-1.2
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.
Diffstat (limited to 'libavutil/hwcontext_vdpau.c')
-rw-r--r-- | libavutil/hwcontext_vdpau.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/libavutil/hwcontext_vdpau.c b/libavutil/hwcontext_vdpau.c index c11c3cfdab..6b8c1d5f76 100644 --- a/libavutil/hwcontext_vdpau.c +++ b/libavutil/hwcontext_vdpau.c @@ -73,8 +73,10 @@ 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, }, +#ifdef VDP_YCBCR_FORMAT_Y_U_V_444 + { VDP_YCBCR_FORMAT_Y_U_V_444, AV_PIX_FMT_YUV444P }, +#endif + { 0, AV_PIX_FMT_NONE, }, }; static const struct { @@ -349,7 +351,11 @@ 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) +#ifdef VDP_YCBCR_FORMAT_Y_U_V_444 + || (vdpau_format == VDP_YCBCR_FORMAT_Y_U_V_444) +#endif + ) FFSWAP(void*, data[1], data[2]); err = priv->get_data(surf, vdpau_format, data, linesize); @@ -400,7 +406,11 @@ 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) +#ifdef VDP_YCBCR_FORMAT_Y_U_V_444 + || (vdpau_format == VDP_YCBCR_FORMAT_Y_U_V_444) +#endif + ) FFSWAP(const void*, data[1], data[2]); err = priv->put_data(surf, vdpau_format, data, linesize); |