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

Xu, Guangxin guangxin.xu at intel.com
Thu Mar 11 10:53:12 EET 2021


> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of
> Guangxin Xu
> Sent: Friday, March 5, 2021 9:46 AM
> To: FFmpeg development discussions and patches <ffmpeg-
> devel at ffmpeg.org>
> Subject: Re: [FFmpeg-devel] [PATCH] avutils/hwcontext_qsv: set the source
> device in qsv_device_create
> 
> On Tue, Feb 23, 2021 at 9:34 AM Guangxin Xu <oddstone at gmail.com> wrote:
> 
> >
> >
> > 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  :)
> >
> Hi softworkz,
> Could you help merge this?
> thanks
> 
Hmm, this patch will failed for "make fate-hwdevice V=2"
It because Qsv's internal->source_device is vaapi.  
When we derivation qsv to vaapi, and derivation back again, it will create a new qsv device.

Hi Mark,
Can we remove this test for qsv and vaapi? Or could you suggest a better way for me?
https://github.com/FFmpeg/FFmpeg/blob/069d2b4a50a6eb2f925f36884e6b9bd9a1e54670/libavutil/tests/hwdevice.c#L75

thanks

...
Successfully tested derivation vaapi -> qsv.
Test passed for vaapi with device :0.
Device type qsv successfully created.
Derivation qsv to vaapi succeeded, but derivation back again did not return the original device.
Test failed for qsv with default options.
Attempted to test 2 device types: 1 passed, 1 failed, 0 skipped.
make: *** [tests/Makefile:256: fate-hwdevice] Error 1
> 
> >> 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".
> >
> >
> _______________________________________________
> 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