[FFmpeg-devel] [PATCH] avutils/hwcontext_qsv: set the source device in qsv_device_create

Guangxin Xu oddstone at gmail.com
Tue Feb 23 03:34:58 EET 2021


On Mon, Feb 22, 2021 at 5:17 PM Soft Works <softworkz at hotmail.com> wrote:

>
>
> > -----Original Message-----
> > From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of Xu
> > Guangxin
> > Sent: Monday, February 22, 2021 9:45 AM
> > To: ffmpeg-devel at ffmpeg.org
> > Cc: Xu Guangxin <guangxin.xu at intel.com>
> > Subject: [FFmpeg-devel] [PATCH] avutils/hwcontext_qsv: set the source
> > device in qsv_device_create
> >
> > opencl_device_derive only handles AV_HWDEVICE_TYPE_VAAPI.
> > We need a source device for qsv.
> >
> > this will fix following pipeline:
> > ffmpeg -init_hw_device vaapi=intel:/dev/dri/renderD128 -init_hw_device
> > opencl=ocl at intel -hwaccel qsv -c:v h264_qsv -hwaccel_output_format qsv
> -i
> > $input -filter_hw_device ocl -vf
> > 'hwmap=derive_device=opencl,format=opencl,unsharp_opencl,hwmap=der
> > ive_device=qsv:reverse=1:extra_hw_frames=32'  -c:v hevc_qsv  -y test.h265
> > ---
> >  libavutil/hwcontext_qsv.c | 8 +++++++-
> >  1 file changed, 7 insertions(+), 1 deletion(-)
> >
> > diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index
> > 35a944f8f8..af3ee32cac 100644
> > --- a/libavutil/hwcontext_qsv.c
> > +++ b/libavutil/hwcontext_qsv.c
> > @@ -1269,7 +1269,13 @@ static int qsv_device_create(AVHWDeviceContext
> > *ctx, const char *device,
> >
> >      impl = choose_implementation(device);
> >
> > -    return qsv_device_derive_from_child(ctx, impl, child_device, 0);
> > +    ret = qsv_device_derive_from_child(ctx, impl, child_device, 0);
> > +    if (ret == 0) {
> > +        ctx->internal->source_device =
> av_buffer_ref(priv->child_device_ctx);
> > +        if (!ctx->internal->source_device)
> > +            ret = AVERROR(ENOMEM);
> > +    }
> > +    return ret;
> >  }
>
> That's funny, I made almost the same change only two days ago:
>
>     impl = choose_implementation(device);
>     ret = qsv_device_derive_from_child(ctx, impl, child_device, 0);
>     if (ret >= 0)
>         ctx->internal->source_device =
> av_buffer_ref(priv->child_device_ctx);
>
>     return ret;
>
>
> From my POV, this change is correct and required.
>
Glad to hear this. Thanks for the endorsement  :)

>
> softworkz
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list