[FFmpeg-devel] [PATCH v1] avcodec/vaapi: set more flags for VASurfaceAttrib

Wang, Fei W fei.w.wang at intel.com
Wed Nov 20 04:40:04 EET 2019


> On Tue, Nov 19, 2019 at 4:24 PM Wangfei <fei.w.wang at intel.com> wrote:
> >
> > flags and value.type is needed when pass VASurfaceAttrib to driver.
> > Otherwise the attribute will be considered invalid in driver.
> >
> > Signed-off-by: Wangfei <fei.w.wang at intel.com>
> > ---
> >  libavcodec/vaapi_decode.c | 2 ++
> >  1 file changed, 2 insertions(+)
> >
> > diff --git a/libavcodec/vaapi_decode.c b/libavcodec/vaapi_decode.c
> > index 69512e1d45..a93aba5a5d 100644
> > --- a/libavcodec/vaapi_decode.c
> > +++ b/libavcodec/vaapi_decode.c
> > @@ -350,6 +350,8 @@ static int
> > vaapi_decode_find_best_format(AVCodecContext *avctx,
> >
> >          ctx->pixel_format_attribute = (VASurfaceAttrib) {
> >              .type          = VASurfaceAttribPixelFormat,
> > +            .flags         = VA_SURFACE_ATTRIB_SETTABLE,
> > +            .value.type    = VAGenericValueTypeInteger,
> I can't found any description in libva about this part, do you have any other
> docs?
I checked the logic of vaCreateSurfaces implementation in media-driver, it will check flags and value.type in VASurfaceAttrib when using it. If leaks of the info, it will consider the attribute is invalid or assert(in this case, flags checked first, so no assert occurred.):
https://github.com/intel/media-driver/blob/8a8b8ae263a04cb5dd384d4625215cf296d2cc59/media_driver/linux/common/ddi/media_libva.cpp#L2149

On the other hand, there is another place in ffmpeg-vaapi that sets VASurfaceAttrib, and it filled flags and value.type:
https://github.com/FFmpeg/FFmpeg/blob/d73f06270600c37c74beeceac37f593838ced383/libavutil/hwcontext_vaapi.c#L527
So I believe here we need do the same thing.

> >              .value.value.i = best_fourcc,
> >          };
> >
> > --
> > 2.17.1
> >


More information about the ffmpeg-devel mailing list