diff mbox series

[FFmpeg-devel,1/2] avutil/hwcontext_vulkan: add get_proc_addr option

Message ID tencent_34AB034EBC709B2D4E9A8440B09A869F7308@qq.com
State New
Headers show
Series [FFmpeg-devel,1/2] avutil/hwcontext_vulkan: add get_proc_addr option | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Zhao Zhili Nov. 1, 2023, 4:56 p.m. UTC
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(+)

Comments

Anton Khirnov Nov. 1, 2023, 6:12 p.m. UTC | #1
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.
Zhao Zhili Nov. 2, 2023, 1:50 a.m. UTC | #2
> 在 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
Zhao Zhili Nov. 3, 2023, 7:09 a.m. UTC | #3
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 mbox series

Patch

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)