Message ID | tencent_34AB034EBC709B2D4E9A8440B09A869F7308@qq.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel,1/2] avutil/hwcontext_vulkan: add get_proc_addr option | expand |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
Quoting Zhao Zhili (2023-11-01 17:56:46) > From: Zhao Zhili <zhilizhao@tencent.com> > > It allows to pass SDL_Vulkan_GetVkGetInstanceProcAddr to hwcontext. > --- > libavutil/hwcontext_vulkan.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c > index 8481427b42..155fe37a33 100644 > --- a/libavutil/hwcontext_vulkan.c > +++ b/libavutil/hwcontext_vulkan.c > @@ -747,7 +747,21 @@ static int create_instance(AVHWDeviceContext *ctx, AVDictionary *opts) > .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, > .pApplicationInfo = &application_info, > }; > + AVDictionaryEntry *opt_d; > + > + opt_d = av_dict_get(opts, "get_proc_addr", NULL, 0); > + if (opt_d) { > + char *end = NULL; > + uintptr_t addr = strtoull(opt_d->value, &end, 16); This is madness.
> 在 2023年11月2日,上午2:12,Anton Khirnov <anton@khirnov.net> 写道: > > Quoting Zhao Zhili (2023-11-01 17:56:46) >> From: Zhao Zhili <zhilizhao@tencent.com> >> >> It allows to pass SDL_Vulkan_GetVkGetInstanceProcAddr to hwcontext. >> --- >> libavutil/hwcontext_vulkan.c | 14 ++++++++++++++ >> 1 file changed, 14 insertions(+) >> >> diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c >> index 8481427b42..155fe37a33 100644 >> --- a/libavutil/hwcontext_vulkan.c >> +++ b/libavutil/hwcontext_vulkan.c >> @@ -747,7 +747,21 @@ static int create_instance(AVHWDeviceContext *ctx, AVDictionary *opts) >> .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, >> .pApplicationInfo = &application_info, >> }; >> + AVDictionaryEntry *opt_d; >> + >> + opt_d = av_dict_get(opts, "get_proc_addr", NULL, 0); >> + if (opt_d) { >> + char *end = NULL; >> + uintptr_t addr = strtoull(opt_d->value, &end, 16); > > This is madness. Yes it is. Any better idea? I can try to pass vulkan lib path, but it might impossible to get it in a portable way. > > -- > Anton Khirnov > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email
Hi Lynne, > On Nov 2, 2023, at 09:50, Zhao Zhili <quinkblack@foxmail.com> wrote: > > >> 在 2023年11月2日,上午2:12,Anton Khirnov <anton@khirnov.net> 写道: >> >> Quoting Zhao Zhili (2023-11-01 17:56:46) >>> From: Zhao Zhili <zhilizhao@tencent.com> >>> >>> It allows to pass SDL_Vulkan_GetVkGetInstanceProcAddr to hwcontext. >>> --- >>> libavutil/hwcontext_vulkan.c | 14 ++++++++++++++ >>> 1 file changed, 14 insertions(+) >>> >>> diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c >>> index 8481427b42..155fe37a33 100644 >>> --- a/libavutil/hwcontext_vulkan.c >>> +++ b/libavutil/hwcontext_vulkan.c >>> @@ -747,7 +747,21 @@ static int create_instance(AVHWDeviceContext *ctx, AVDictionary *opts) >>> .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, >>> .pApplicationInfo = &application_info, >>> }; >>> + AVDictionaryEntry *opt_d; >>> + >>> + opt_d = av_dict_get(opts, "get_proc_addr", NULL, 0); >>> + if (opt_d) { >>> + char *end = NULL; >>> + uintptr_t addr = strtoull(opt_d->value, &end, 16); >> >> This is madness. > > Yes it is. Any better idea? > > I can try to pass vulkan lib path, but it might impossible to get it in a portable way. What do you think on this case? How to pass get_proc_addr to create_instance from external? We can add an option to set lib path, but it’s not that flexible. > >> >> -- >> Anton Khirnov >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email >
diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 8481427b42..155fe37a33 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -747,7 +747,21 @@ static int create_instance(AVHWDeviceContext *ctx, AVDictionary *opts) .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, .pApplicationInfo = &application_info, }; + AVDictionaryEntry *opt_d; + + opt_d = av_dict_get(opts, "get_proc_addr", NULL, 0); + if (opt_d) { + char *end = NULL; + uintptr_t addr = strtoull(opt_d->value, &end, 16); + if (end != opt_d->value) { + hwctx->get_proc_addr = (PFN_vkGetInstanceProcAddr)addr; + } else { + av_log(ctx, AV_LOG_ERROR, "Invalid get_proc_addr option value %s\n", + opt_d->value); + return AVERROR(EINVAL); + } + } if (!hwctx->get_proc_addr) { err = load_libvulkan(ctx); if (err < 0)
From: Zhao Zhili <zhilizhao@tencent.com> It allows to pass SDL_Vulkan_GetVkGetInstanceProcAddr to hwcontext. --- libavutil/hwcontext_vulkan.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)