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

2019-03-29 Thread Fu, Linjie
> -Original Message-
> From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf
> Of Mark Thompson
> Sent: Friday, March 29, 2019 07:34
> To: ffmpeg-devel@ffmpeg.org
> Subject: Re: [FFmpeg-devel] [PATCH] lavc/vaapi_decode: add va_profile
> format map support for HEVC_REXT
> 
> On 28/03/2019 04:03, Linjie Fu 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 
> > ---
> >  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),
> 
> This doesn't work - you can't guess the rext profile from the chroma format
> and bit depth information, because the profiles are all overlapping (see table
> A.1).
> 
> You need to use the profile constraint flags to determine it - this lookup is
> implemented by ff_h265_get_profile(), but you'll need to extract all the flags
> to put into it.
> 
Thanks for the advice Mark, and I think these constraint flags should be parsed 
firstly in decode_profile_tier_level():
https://github.com/FFmpeg/FFmpeg/blob/9dece050ef01c70df1ac74a04da3548b3c0d79a9/libavcodec/hevc_ps.c#L265

Currently, they are skipped when parsing the sps:
skip_bits(gb, 16); // XXX_reserved_zero_44bits[0..15]
skip_bits(gb, 16); // XXX_reserved_zero_44bits[16..31]
skip_bits(gb, 12); // XXX_reserved_zero_44bits[32..43]
Will it be acceptable to add these flags in common hevc parser function for the 
usage in VAAPI decode? 

> > +#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;
> > +}
> 
> Codec-specific stuff probably shouldn't be hidden in the middle of the
> generic code like this.

Got your point and I add this to avoid redundant map query, for other codecs, 
codec_id and codec_profile are enough to determine the exact va_profile.
Any advice for coping with this situation?
(Did you mean finding some other methods to modify in vaapi_hevc.c, because all
 vaapi decoders are sharing same init funcion)

> > +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_co

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

2019-03-28 Thread Li, Zhong


> -Original Message-
> From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf
> Of Fu, Linjie
> Sent: Friday, March 29, 2019 9:21 AM
> To: FFmpeg development discussions and patches
> 
> Subject: Re: [FFmpeg-devel] [PATCH] lavc/vaapi_decode: add va_profile
> format map support for HEVC_REXT
> 
> > -Original Message-
> > From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On
> Behalf
> > Of Michael Niedermayer
> > Sent: Friday, March 29, 2019 01:48
> > To: FFmpeg development discussions and patches  > de...@ffmpeg.org>
> > 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:53PM +0800, Linjie Fu 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 
> > > ---
> > >  libavcodec/vaapi_decode.c | 29 +
> > >  1 file changed, 25 insertions(+), 4 deletions(-)
> >
> > breaks build
> >
> > libavcodec/vaapi_decode.c:409:7: error: ‘VAProfileHEVCMain422_10’
> > undeclared here (not in a function)
> >  MAP(422_10,  YUYV422),
> >^
> > libavcodec/vaapi_decode.c:411:7: error: ‘VAProfileHEVCMain444’
> > undeclared here (not in a function)
> >  MAP(444, YUV444P),
> >^
> > libavcodec/vaapi_decode.c:412:7: error: ‘VAProfileHEVCMain444_10’
> > undeclared here (not in a function)
> >  MAP(444_10,  YUV444P10LE),
> >^
> > make: *** [libavcodec/vaapi_decode.o] Error 1
> 
> I'm not quite sure why it happens.
> In va/va.h,  VAProfile for Main422_10, Main444, Main444_10 is declared:
> VAProfileHEVCMain422_10 = 24,
> VAProfileHEVCMain422_12 = 25,
> VAProfileHEVCMain444 = 26,
> VAProfileHEVCMain444_10  = 27,
> https://github.com/intel/libva/blob/c98b06d2b8c00dc4df628488b672711b3
> f0eb118/va/va.h#L380

The reason should be you are working on different vaapi version, you are 
working a latest one, but Michael is working on an older one.
Probably you need to check vaapi version of compile, and always keep mind of 
old version compatibility. 

___
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".

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

2019-03-28 Thread Fu, Linjie
> -Original Message-
> From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf
> Of Michael Niedermayer
> Sent: Friday, March 29, 2019 01:48
> To: FFmpeg development discussions and patches  de...@ffmpeg.org>
> 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:53PM +0800, Linjie Fu 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 
> > ---
> >  libavcodec/vaapi_decode.c | 29 +
> >  1 file changed, 25 insertions(+), 4 deletions(-)
> 
> breaks build
> 
> libavcodec/vaapi_decode.c:409:7: error: ‘VAProfileHEVCMain422_10’
> undeclared here (not in a function)
>  MAP(422_10,  YUYV422),
>^
> libavcodec/vaapi_decode.c:411:7: error: ‘VAProfileHEVCMain444’ undeclared
> here (not in a function)
>  MAP(444, YUV444P),
>^
> libavcodec/vaapi_decode.c:412:7: error: ‘VAProfileHEVCMain444_10’
> undeclared here (not in a function)
>  MAP(444_10,  YUV444P10LE),
>^
> make: *** [libavcodec/vaapi_decode.o] Error 1

I'm not quite sure why it happens.
In va/va.h,  VAProfile for Main422_10, Main444, Main444_10 is declared:
VAProfileHEVCMain422_10 = 24,
VAProfileHEVCMain422_12 = 25,
VAProfileHEVCMain444 = 26,
VAProfileHEVCMain444_10  = 27,
https://github.com/intel/libva/blob/c98b06d2b8c00dc4df628488b672711b3f0eb118/va/va.h#L380

___
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".

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

2019-03-28 Thread Mark Thompson
On 28/03/2019 04:03, Linjie Fu 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 
> ---
>  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),

This doesn't work - you can't guess the rext profile from the chroma format and 
bit depth information, because the profiles are all overlapping (see table A.1).

You need to use the profile constraint flags to determine it - this lookup is 
implemented by ff_h265_get_profile(), but you'll need to extract all the flags 
to put into it.

> +#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;
> +}

Codec-specific stuff probably shouldn't be hidden in the middle of the generic 
code like this.

> +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)
> 

When will it be possible to get hardware which supports these profiles?

- Mark
___
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".

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

2019-03-28 Thread Michael Niedermayer
On Thu, Mar 28, 2019 at 12:03:53PM +0800, Linjie Fu 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 
> ---
>  libavcodec/vaapi_decode.c | 29 +
>  1 file changed, 25 insertions(+), 4 deletions(-)

breaks build

libavcodec/vaapi_decode.c:409:7: error: ‘VAProfileHEVCMain422_10’ undeclared 
here (not in a function)
 MAP(422_10,  YUYV422),
   ^
libavcodec/vaapi_decode.c:411:7: error: ‘VAProfileHEVCMain444’ undeclared here 
(not in a function)
 MAP(444, YUV444P),
   ^
libavcodec/vaapi_decode.c:412:7: error: ‘VAProfileHEVCMain444_10’ undeclared 
here (not in a function)
 MAP(444_10,  YUV444P10LE),
   ^
make: *** [libavcodec/vaapi_decode.o] Error 1


[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Modern terrorism, a quick summary: Need oil, start war with country that
has oil, kill hundread thousand in war. Let country fall into chaos,
be surprised about raise of fundamantalists. Drop more bombs, kill more
people, be surprised about them taking revenge and drop even more bombs
and strip your own citizens of their rights and freedoms. to be continued


signature.asc
Description: PGP signature
___
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".

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

2019-03-27 Thread Fu, Linjie
> -Original Message-
> From: myp...@gmail.com [mailto:myp...@gmail.com]
> Sent: Thursday, March 28, 2019 13:03
> To: FFmpeg development discussions and patches  de...@ffmpeg.org>
> Cc: Fu, Linjie 
> 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  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 
> > ---
> >  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+].
___
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".

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

2019-03-27 Thread myp...@gmail.com
On Thu, Mar 28, 2019 at 12:03 PM Linjie Fu  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 
> ---
>  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".

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

2019-03-27 Thread Linjie Fu
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 
---
 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)
-- 
2.17.1

___
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".