[FFmpeg-devel] [PATCH, v2 1/2] lavc/qsvdec: add decode support for HEVC 4:2:2 8-bit and 10-bit

Fu, Linjie linjie.fu at intel.com
Tue Apr 14 18:10:02 EEST 2020


> From: Fu, Linjie <linjie.fu at intel.com>
> Sent: Wednesday, February 26, 2020 16:39
> To: ffmpeg-devel at ffmpeg.org
> Cc: Fu, Linjie <linjie.fu at intel.com>
> Subject: [PATCH,v2 1/2] lavc/qsvdec: add decode support for HEVC 4:2:2 8-bit
> and 10-bit
> 
> Enables HEVC Range Extension decoding support (Linux) for 4:2:2 8/10 bit
> on ICL+ (gen11 +) platform.
> 
> Signed-off-by: Linjie Fu <linjie.fu at intel.com>
> ---
> [v2]: restrict to support on Linux.
> 
>  libavcodec/qsv.c          | 16 ++++++++++++++++
>  libavutil/hwcontext_qsv.c | 24 ++++++++++++++++++++++++
>  2 files changed, 40 insertions(+)
> 
> diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
> index db98c75..171a8d6 100644
> --- a/libavcodec/qsv.c
> +++ b/libavcodec/qsv.c
> @@ -195,6 +195,12 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t
> fourcc)
>      case MFX_FOURCC_NV12: return AV_PIX_FMT_NV12;
>      case MFX_FOURCC_P010: return AV_PIX_FMT_P010;
>      case MFX_FOURCC_P8:   return AV_PIX_FMT_PAL8;
> +#if CONFIG_VAAPI
> +    case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422;
> +#if QSV_VERSION_ATLEAST(1, 27)
> +    case MFX_FOURCC_Y210: return AV_PIX_FMT_Y210;
> +#endif
> +#endif
>      }
>      return AV_PIX_FMT_NONE;
>  }
> @@ -211,6 +217,16 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format,
> uint32_t *fourcc)
>      case AV_PIX_FMT_P010:
>          *fourcc = MFX_FOURCC_P010;
>          return AV_PIX_FMT_P010;
> +#if CONFIG_VAAPI
> +    case AV_PIX_FMT_YUV422P:
> +        *fourcc = MFX_FOURCC_YUY2;
> +        return AV_PIX_FMT_YUYV422;
> +#if QSV_VERSION_ATLEAST(1, 27)
> +    case AV_PIX_FMT_YUV422P10:
> +        *fourcc = MFX_FOURCC_Y210;
> +        return AV_PIX_FMT_Y210;
> +#endif
> +#endif
>      default:
>          return AVERROR(ENOSYS);
>      }
> diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c
> index b1b6740..4306c6e3 100644
> --- a/libavutil/hwcontext_qsv.c
> +++ b/libavutil/hwcontext_qsv.c
> @@ -44,6 +44,10 @@
>  #include "pixdesc.h"
>  #include "time.h"
> 
> +#define QSV_VERSION_ATLEAST(MAJOR, MINOR)   \
> +    (MFX_VERSION_MAJOR > (MAJOR) ||         \
> +     MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >=
> (MINOR))
> +
>  typedef struct QSVDevicePriv {
>      AVBufferRef *child_device_ctx;
>  } QSVDevicePriv;
> @@ -103,6 +107,14 @@ static const struct {
>      { AV_PIX_FMT_BGRA, MFX_FOURCC_RGB4 },
>      { AV_PIX_FMT_P010, MFX_FOURCC_P010 },
>      { AV_PIX_FMT_PAL8, MFX_FOURCC_P8   },
> +#if CONFIG_VAAPI
> +    { AV_PIX_FMT_YUYV422,
> +                       MFX_FOURCC_YUY2 },
> +#if QSV_VERSION_ATLEAST(1, 27)
> +    { AV_PIX_FMT_Y210,
> +                       MFX_FOURCC_Y210 },
> +#endif
> +#endif
>  };
> 
>  static uint32_t qsv_fourcc_from_pix_fmt(enum AVPixelFormat pix_fmt)
> @@ -773,7 +785,19 @@ static int map_frame_to_surface(const AVFrame
> *frame, mfxFrameSurface1 *surface)
>          surface->Data.R = frame->data[0] + 2;
>          surface->Data.A = frame->data[0] + 3;
>          break;
> +#if CONFIG_VAAPI
> +    case AV_PIX_FMT_YUYV422:
> +        surface->Data.Y = frame->data[0];
> +        surface->Data.U = frame->data[0] + 1;
> +        surface->Data.V = frame->data[0] + 3;
> +        break;
> 
> +    case AV_PIX_FMT_Y210:
> +        surface->Data.Y16 = (mfxU16 *)frame->data[0];
> +        surface->Data.U16 = (mfxU16 *)frame->data[0] + 1;
> +        surface->Data.V16 = (mfxU16 *)frame->data[0] + 3;
> +        break;
> +#endif
>      default:
>          return MFX_ERR_UNSUPPORTED;
>      }
> --
Ping for the patch set for 422 8/10 bit:
https://patchwork.ffmpeg.org/project/ffmpeg/patch/1582706369-32704-1-git-send-email-linjie.fu@intel.com/
https://patchwork.ffmpeg.org/project/ffmpeg/patch/1582706402-439-1-git-send-email-linjie.fu@intel.com/




More information about the ffmpeg-devel mailing list