> 在 2024年2月23日,上午9:20,Zhao Zhili <quinkbl...@foxmail.com> 写道: > > >> 在 2024年2月23日,上午4:19,Gnattu OC via ffmpeg-devel <ffmpeg-devel@ffmpeg.org> 写道: >> >> Actually, if you examine the `hwcontext_videotoolbox.c` file, you will find >> that the current function for `vt_device_create` is essentially a no-op: it >> only returns an error if a user attempts to select a device, otherwise it >> just returns. This is generally how VideoToolbox works. If the >> `create_device` function is already a no-op, then the derive operation will >> certainly also be a no-op. > > Device derive means inter operation between different hwcontext, which > doesn’t supported by videotoolbox yet, so a no-op implementation for now is > misleading. > > I’m trying to implement opencl and videotoolbox inter operation, the no-op > implementation can make sense afterwards.
I mean a real implementation of device derive. > >> All other hardware filters can utilize the derive API, and there are use >> cases that depend on this API. Thus, it seems inappropriate to me that >> VideoToolbox users cannot use the derive API just because VideoToolbox does >> not require any device creation. >> >>> A libavfilter API user will set the correct hw_device_ctx on each filter >>> and your use-case will work properly >> >> Can't this just be the modification of the `hwupload` filter? Instead of >> derive, the user just set the which initialized hardware to use, as >> `-init_hw_device` can already be called multiple times and creating alias >> for each hardware. >> >>>> On Feb 23, 2024, at 03:50, Mark Thompson <s...@jkqxz.net> wrote: >>> >>> On 22/02/2024 19:39, ChenLiucheng via ffmpeg-devel wrote: >>>>> On Feb 23, 2024, at 03:28, Mark Thompson <s...@jkqxz.net> wrote: >>>>> >>>>>> On 22/02/2024 18:46, gnattu via ffmpeg-devel wrote: >>>>>>> There is no device context to be setup, nor devices to be >>>>>>> selected with VideoToolbox. Just a simple return would allow >>>>>>> us to use derived device in filters like >>>>>>> `hwupload=derive_device=videotoolbox` >>>>>>> Signed-off-by: Gnattu OC <gnatt...@me.com> >>>>>>> --- >>>>>>> libavutil/hwcontext_videotoolbox.c | 9 +++++++++ >>>>>>> 1 file changed, 9 insertions(+) >>>>>>> diff --git a/libavutil/hwcontext_videotoolbox.c >>>>>>> b/libavutil/hwcontext_videotoolbox.c >>>>>>> index fe469dc161..d13199eca7 100644 >>>>>>> --- a/libavutil/hwcontext_videotoolbox.c >>>>>>> +++ b/libavutil/hwcontext_videotoolbox.c >>>>>>> @@ -759,6 +759,14 @@ static int vt_device_create(AVHWDeviceContext >>>>>>> *ctx, const char *device, >>>>>>> return 0; >>>>>>> } >>>>>>> +static int vt_device_derive(AVHWDeviceContext *device_ctx, >>>>>>> + AVHWDeviceContext *src_ctx, AVDictionary >>>>>>> *opts, >>>>>>> + int flags) >>>>>>> +{ >>>>>>> + // There is no context to be setup with VT, just return. >>>>>>> + return 0; >>>>>>> +} >>>>>>> + >>>>>>> const HWContextType ff_hwcontext_type_videotoolbox = { >>>>>>> .type = AV_HWDEVICE_TYPE_VIDEOTOOLBOX, >>>>>>> .name = "videotoolbox", >>>>>>> @@ -766,6 +774,7 @@ const HWContextType ff_hwcontext_type_videotoolbox >>>>>>> = { >>>>>>> .frames_priv_size = sizeof(VTFramesContext), >>>>>>> .device_create = vt_device_create, >>>>>>> + .device_derive = vt_device_derive, >>>>>>> .frames_hwctx_size = sizeof(AVVTFramesContext), >>>>>>> .frames_init = vt_frames_init, >>>>>>> .frames_get_buffer = vt_get_buffer, >>>>>> >>>>>> This derivation behaviour doesn't make any sense inside libavutil. >>>>>> Features which are only for the ffmpeg utility should be implemented >>>>>> inside the ffmpeg utility. >>>>>> >>>>>> (Also, try -init_hw_device.) >>>>>> >>>> Well this does make sense. >>>> >>>> If only one type of hardware device is in use, then `-init_hw_device` will >>>> suffice. However, if we use hardware filters with different device types, >>>> such as OpenCL, and we want to switch to a VideoToolbox filter later in >>>> the chain, we will have a issue. Since there is no `hwmap` between OpenCL >>>> and VideoToolbox, we need to perform a `hwdownload` followed by a >>>> `hwupload`. If the `derive_device` option cannot be used with `hwupload` >>>> due to `device_derive` not being implemented, the filter will struggle to >>>> find the correct device for uploading. It may attempt to upload to the >>>> OpenCL device without `device_derive` set if it comes after an OpenCL >>>> filter. >>>> >>> >>> Yes, it is unfortunate that the ffmpeg utility is missing this feature. >>> >>> A libavfilter API user will set the correct hw_device_ctx on each filter >>> and your use-case will work properly, but the ffmpeg utility does not fully >>> expose the functionality of libavfilter to be able to do this. >>> >>> This is mostly for syntax reasons; implementation would be straightforward. >>> If you can think of a good way to represent this in options to the ffmpeg >>> utility (which doesn't become too horrible with escaping) then I would very >>> much welcome suggestions. >>> >>> Thanks, >>> >>> - 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". >> >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.o _______________________________________________ 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".