[FFmpeg-devel] [PATCH] lavc/vaapi_decode: add va_profile format map support for HEVC_REXT

Fu, Linjie linjie.fu at intel.com
Thu Mar 28 07:19:10 EET 2019


> -----Original Message-----
> From: mypopy at gmail.com [mailto:mypopy at gmail.com]
> Sent: Thursday, March 28, 2019 13:03
> To: FFmpeg development discussions and patches <ffmpeg-
> devel at ffmpeg.org>
> Cc: Fu, Linjie <linjie.fu at intel.com>
> Subject: Re: [FFmpeg-devel] [PATCH] lavc/vaapi_decode: add va_profile
> format map support for HEVC_REXT
> 
> On Thu, Mar 28, 2019 at 12:03 PM Linjie Fu <linjie.fu at intel.com> wrote:
> >
> > HEVC_REXT will be map to {VAProfileHEVCMain422_10,
> VAProfileHEVCMain444,
> > VAProfileHEVCMain444_10} in vaapi_profile_map[], since need to be
> distinguished
> > to select the exact va_profile.
> >
> > Add va_profile -> AV_PIX_FMT map for FF_PROFILE_HEVC_REXT to match
> the
> > exact va_profile.
> >
> > Signed-off-by: Linjie Fu <linjie.fu at intel.com>
> > ---
> >  libavcodec/vaapi_decode.c | 29 +++++++++++++++++++++++++----
> >  1 file changed, 25 insertions(+), 4 deletions(-)
> >
> > diff --git a/libavcodec/vaapi_decode.c b/libavcodec/vaapi_decode.c
> > index 015154b879..1cb8683b7c 100644
> > --- a/libavcodec/vaapi_decode.c
> > +++ b/libavcodec/vaapi_decode.c
> > @@ -414,6 +414,18 @@ static const struct {
> >  #undef MAP
> >  };
> >
> > +static const struct {
> > +    VAProfile va_profile;
> > +    enum AVPixelFormat pix_fmt;
> > +} rext_format_map[] = {
> > +#define MAP(vp, av) { VAProfileHEVCMain ## vp, AV_PIX_FMT_ ## av }
> > +    MAP(422_10,  YUYV422),
> > +    MAP(422_10,  YUV422P10LE),
> > +    MAP(444,     YUV444P),
> > +    MAP(444_10,  YUV444P10LE),
> > +#undef MAP
> > +};
> > +
> >  /*
> >   * Set *va_config and the frames_ref fields from the current codec
> parameters
> >   * in avctx.
> > @@ -426,7 +438,7 @@ static int
> vaapi_decode_make_config(AVCodecContext *avctx,
> >      AVVAAPIHWConfig       *hwconfig    = NULL;
> >      AVHWFramesConstraints *constraints = NULL;
> >      VAStatus vas;
> > -    int err, i, j;
> > +    int err, i, j, k;
> >      const AVCodecDescriptor *codec_desc;
> >      VAProfile *profile_list = NULL, matched_va_profile;
> >      int profile_count, exact_match, matched_ff_profile;
> > @@ -467,13 +479,22 @@ static int
> vaapi_decode_make_config(AVCodecContext *avctx,
> >          if (avctx->profile == vaapi_profile_map[i].codec_profile ||
> >              vaapi_profile_map[i].codec_profile == FF_PROFILE_UNKNOWN)
> >              profile_match = 1;
> > -        for (j = 0; j < profile_count; j++) {
> > -            if (vaapi_profile_map[i].va_profile == profile_list[j]) {
> > +        if (avctx->profile == FF_PROFILE_HEVC_REXT) {
> > +            /* find the exact va_profile for HEVC_REXT */
> > +            for (j = 0; j < FF_ARRAY_ELEMS(rext_format_map); j++) {
> > +                if (avctx->pix_fmt == rext_format_map[j].pix_fmt)
> > +                   break;
> > +            }
> > +            if (vaapi_profile_map[i].va_profile !=
> rext_format_map[j].va_profile)
> > +                continue;
> > +        }
> > +        for (k = 0; k < profile_count; k++) {
> > +            if (vaapi_profile_map[i].va_profile == profile_list[k]) {
> >                  exact_match = profile_match;
> >                  break;
> >              }
> >          }
> > -        if (j < profile_count) {
> > +        if (k < profile_count) {
> >              matched_va_profile = vaapi_profile_map[i].va_profile;
> >              matched_ff_profile = vaapi_profile_map[i].codec_profile;
> >              if (exact_match)
> > --
> 
> What  intel platform supported HEVCMain422 or 444?
Will be supported [ICE LAKE+].


More information about the ffmpeg-devel mailing list