On Thu, Mar 28, 2019 at 12:03 PM Linjie Fu <linjie...@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...@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? _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".