* [FFmpeg-devel] [PATCH] vulkan_decode: use the hwfc->user_opaque field to store the profile
@ 2023-06-18 12:19 Lynne
[not found] ` <NYDRcdf--3-9@lynne.ee-NYDRfjv----9>
0 siblings, 1 reply; 3+ messages in thread
From: Lynne @ 2023-06-18 12:19 UTC (permalink / raw)
To: Ffmpeg Devel
[-- Attachment #1: Type: text/plain, Size: 17 bytes --]
Patch attached.
[-- Attachment #2: 0001-vulkan_decode-use-the-hwfc-user_opaque-field-to-stor.patch --]
[-- Type: text/x-diff, Size: 10653 bytes --]
From fe6516e22880a067420a6e21a6928ad176f66b45 Mon Sep 17 00:00:00 2001
From: Lynne <dev@lynne.ee>
Date: Tue, 13 Jun 2023 06:10:20 +0200
Subject: [PATCH] vulkan_decode: use the hwfc->user_opaque field to store the
profile
---
libavcodec/vulkan_decode.c | 60 ++++++++++++++++++++++++--------------
libavcodec/vulkan_decode.h | 6 ++--
2 files changed, 41 insertions(+), 25 deletions(-)
diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c
index 6ba939da46..7ccee94b01 100644
--- a/libavcodec/vulkan_decode.c
+++ b/libavcodec/vulkan_decode.c
@@ -196,7 +196,6 @@ int ff_vk_decode_add_slice(AVCodecContext *avctx, FFVulkanDecodePicture *vp,
{
FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data;
FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data;
- FFVulkanDecodeProfileData *prof = &ctx->profile_data;
static const uint8_t startcode_prefix[3] = { 0x0, 0x0, 0x1 };
const size_t startcode_len = add_startcode ? sizeof(startcode_prefix) : 0;
@@ -206,8 +205,8 @@ int ff_vk_decode_add_slice(AVCodecContext *avctx, FFVulkanDecodePicture *vp,
FFVkVideoBuffer *vkbuf;
size_t new_size = vp->slices_size + startcode_len + size +
- prof->caps.minBitstreamBufferSizeAlignment;
- new_size = FFALIGN(new_size, prof->caps.minBitstreamBufferSizeAlignment);
+ ctx->caps.minBitstreamBufferSizeAlignment;
+ new_size = FFALIGN(new_size, ctx->caps.minBitstreamBufferSizeAlignment);
slice_off = av_fast_realloc(vp->slice_off, &vp->slice_off_max,
(nb + 1)*sizeof(slice_off));
@@ -295,7 +294,6 @@ int ff_vk_decode_frame(AVCodecContext *avctx,
FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data;
FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data;
- FFVulkanDecodeProfileData *prof = &ctx->profile_data;
FFVulkanFunctions *vk = &ctx->s.vkfn;
/* Output */
@@ -319,7 +317,7 @@ int ff_vk_decode_frame(AVCodecContext *avctx,
VkImageMemoryBarrier2 img_bar[37];
int nb_img_bar = 0;
size_t data_size = FFALIGN(vp->slices_size,
- prof->caps.minBitstreamBufferSizeAlignment);
+ ctx->caps.minBitstreamBufferSizeAlignment);
FFVkExecContext *exec = ff_vk_exec_get(&ctx->exec_pool);
@@ -640,10 +638,10 @@ static VkResult vulkan_setup_profile(AVCodecContext *avctx,
VkVideoDecodeH264CapabilitiesKHR *h264_caps,
VkVideoDecodeH265CapabilitiesKHR *h265_caps,
VkVideoDecodeAV1CapabilitiesMESA *av1_caps,
+ VkVideoCapabilitiesKHR *caps,
+ VkVideoDecodeCapabilitiesKHR *dec_caps,
int cur_profile)
{
- VkVideoCapabilitiesKHR *caps = &prof->caps;
- VkVideoDecodeCapabilitiesKHR *dec_caps = &prof->dec_caps;
VkVideoDecodeUsageInfoKHR *usage = &prof->usage;
VkVideoProfileInfoKHR *profile = &prof->profile;
VkVideoProfileListInfoKHR *profile_list = &prof->profile_list;
@@ -708,6 +706,7 @@ static VkResult vulkan_setup_profile(AVCodecContext *avctx,
static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_ref,
enum AVPixelFormat *pix_fmt, VkFormat *vk_fmt,
+ FFVulkanDecodeProfileData *prof,
int *dpb_dedicate)
{
VkResult ret;
@@ -724,9 +723,8 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_
FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data;
FFVulkanFunctions *vk = &ctx->s.vkfn;
- FFVulkanDecodeProfileData *prof = &ctx->profile_data;
- VkVideoCapabilitiesKHR *caps = &prof->caps;
- VkVideoDecodeCapabilitiesKHR *dec_caps = &prof->dec_caps;
+ VkVideoCapabilitiesKHR *caps = &ctx->caps;
+ VkVideoDecodeCapabilitiesKHR *dec_caps = &ctx->dec_caps;
VkVideoDecodeH264CapabilitiesKHR h264_caps = {
.sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR,
@@ -765,6 +763,8 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_
&h264_caps,
&h265_caps,
&av1_caps,
+ caps,
+ dec_caps,
cur_profile);
if (ret == VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR &&
avctx->flags & AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH &&
@@ -779,6 +779,8 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_
&h264_caps,
&h265_caps,
&av1_caps,
+ caps,
+ dec_caps,
cur_profile);
}
@@ -965,6 +967,11 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_
return 0;
}
+static void free_profile_data(AVHWFramesContext *hwfc)
+{
+ av_free(hwfc->user_opaque);
+}
+
int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
{
VkFormat vkfmt;
@@ -972,7 +979,6 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
AVHWFramesContext *frames_ctx = (AVHWFramesContext*)hw_frames_ctx->data;
AVVulkanFramesContext *hwfc = frames_ctx->hwctx;
FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data;
- FFVulkanDecodeShared *ctx;
FFVulkanDecodeProfileData *prof;
frames_ctx->sw_format = AV_PIX_FMT_NONE;
@@ -981,15 +987,19 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
if (err < 0)
return err;
- ctx = (FFVulkanDecodeShared *)dec->shared_ref->data;
- prof = &ctx->profile_data;
+ prof = av_mallocz(sizeof(FFVulkanDecodeProfileData));
+ if (!prof)
+ return AVERROR(ENOMEM);
err = vulkan_decode_get_profile(avctx, hw_frames_ctx,
&frames_ctx->sw_format, &vkfmt,
- &dedicated_dpb);
+ prof, &dedicated_dpb);
if (err < 0)
return err;
+ frames_ctx->user_opaque = prof;
+ frames_ctx->free = free_profile_data;
+
frames_ctx->width = avctx->width;
frames_ctx->height = avctx->height;
frames_ctx->format = AV_PIX_FMT_VULKAN;
@@ -1032,10 +1042,10 @@ int ff_vk_decode_init(AVCodecContext *avctx)
VkResult ret;
FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data;
FFVulkanDecodeShared *ctx;
- FFVulkanDecodeProfileData *prof;
FFVulkanContext *s;
FFVulkanFunctions *vk;
FFVkQueueFamilyCtx qf_dec;
+ const VkVideoProfileListInfoKHR *profile_list;
VkVideoDecodeH264SessionParametersCreateInfoKHR h264_params = {
.sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR,
@@ -1069,7 +1079,6 @@ int ff_vk_decode_init(AVCodecContext *avctx)
/* Initialize contexts */
ctx = (FFVulkanDecodeShared *)dec->shared_ref->data;
- prof = &ctx->profile_data;
s = &ctx->s;
vk = &ctx->s.vkfn;
@@ -1080,6 +1089,13 @@ int ff_vk_decode_init(AVCodecContext *avctx)
s->device = (AVHWDeviceContext *)s->frames->device_ref->data;
s->hwctx = s->device->hwctx;
+ profile_list = ff_vk_find_struct(s->hwfc->create_pnext,
+ VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR);
+ if (!profile_list) {
+ av_log(avctx, AV_LOG_ERROR, "Profile list missing from frames context!");
+ return AVERROR(EINVAL);
+ }
+
err = ff_vk_load_props(s);
if (err < 0)
goto fail;
@@ -1101,13 +1117,13 @@ int ff_vk_decode_init(AVCodecContext *avctx)
session_create.flags = 0x0;
session_create.queueFamilyIndex = s->hwctx->queue_family_decode_index;
- session_create.maxCodedExtent = prof->caps.maxCodedExtent;
- session_create.maxDpbSlots = prof->caps.maxDpbSlots;
- session_create.maxActiveReferencePictures = prof->caps.maxActiveReferencePictures;
+ session_create.maxCodedExtent = ctx->caps.maxCodedExtent;
+ session_create.maxDpbSlots = ctx->caps.maxDpbSlots;
+ session_create.maxActiveReferencePictures = ctx->caps.maxActiveReferencePictures;
session_create.pictureFormat = s->hwfc->format[0];
session_create.referencePictureFormat = session_create.pictureFormat;
session_create.pStdHeaderVersion = dec_ext[avctx->codec_id];
- session_create.pVideoProfile = &prof->profile_list.pProfiles[0];
+ session_create.pVideoProfile = &profile_list->pProfiles[0];
/* Create decode exec context.
* 2 async contexts per thread was experimentally determined to be optimal
@@ -1152,14 +1168,14 @@ int ff_vk_decode_init(AVCodecContext *avctx)
dpb_frames->height = s->frames->height;
dpb_hwfc = dpb_frames->hwctx;
- dpb_hwfc->create_pnext = (void *)&prof->profile_list;
+ dpb_hwfc->create_pnext = (void *)profile_list;
dpb_hwfc->format[0] = s->hwfc->format[0];
dpb_hwfc->tiling = VK_IMAGE_TILING_OPTIMAL;
dpb_hwfc->usage = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR |
VK_IMAGE_USAGE_SAMPLED_BIT; /* Shuts validator up. */
if (dec->layered_dpb)
- dpb_hwfc->nb_layers = prof->caps.maxDpbSlots;
+ dpb_hwfc->nb_layers = ctx->caps.maxDpbSlots;
err = av_hwframe_ctx_init(ctx->dpb_hwfc_ref);
if (err < 0)
diff --git a/libavcodec/vulkan_decode.h b/libavcodec/vulkan_decode.h
index 681d2476cd..3ac103f6b4 100644
--- a/libavcodec/vulkan_decode.h
+++ b/libavcodec/vulkan_decode.h
@@ -26,8 +26,6 @@
#include "vulkan_video.h"
typedef struct FFVulkanDecodeProfileData {
- VkVideoCapabilitiesKHR caps;
- VkVideoDecodeCapabilitiesKHR dec_caps;
VkVideoDecodeH264ProfileInfoKHR h264_profile;
VkVideoDecodeH264ProfileInfoKHR h265_profile;
VkVideoDecodeAV1ProfileInfoMESA av1_profile;
@@ -40,7 +38,9 @@ typedef struct FFVulkanDecodeShared {
FFVulkanContext s;
FFVkVideoCommon common;
FFVkExecPool exec_pool;
- FFVulkanDecodeProfileData profile_data;
+
+ VkVideoCapabilitiesKHR caps;
+ VkVideoDecodeCapabilitiesKHR dec_caps;
AVBufferRef *dpb_hwfc_ref; /* Only used for dedicated_dpb */
--
2.40.1
[-- Attachment #3: Type: text/plain, Size: 251 bytes --]
_______________________________________________
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.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [FFmpeg-devel] [PATCH] vulkan_decode: use the hwfc->user_opaque field to store the profile
[not found] ` <NYDRcdf--3-9@lynne.ee-NYDRfjv----9>
@ 2023-06-18 12:33 ` Lynne
2023-06-22 16:27 ` Lynne
1 sibling, 0 replies; 3+ messages in thread
From: Lynne @ 2023-06-18 12:33 UTC (permalink / raw)
To: FFmpeg development discussions and patches
[-- Attachment #1: Type: text/plain, Size: 113 bytes --]
Jun 18, 2023, 14:20 by dev@lynne.ee:
> Patch attached.
>
Forgot to git add -p to fix a memory leak on failure.
[-- Attachment #2: 0001-vulkan_decode-use-the-hwfc-user_opaque-field-to-stor.patch --]
[-- Type: text/x-diff, Size: 10659 bytes --]
From 26159eb0772d51800740c6221f7ee1c44e01aa6e Mon Sep 17 00:00:00 2001
From: Lynne <dev@lynne.ee>
Date: Tue, 13 Jun 2023 06:10:20 +0200
Subject: [PATCH] vulkan_decode: use the hwfc->user_opaque field to store the
profile
---
libavcodec/vulkan_decode.c | 64 ++++++++++++++++++++++++--------------
libavcodec/vulkan_decode.h | 6 ++--
2 files changed, 44 insertions(+), 26 deletions(-)
diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c
index 6ba939da46..3c348c533f 100644
--- a/libavcodec/vulkan_decode.c
+++ b/libavcodec/vulkan_decode.c
@@ -196,7 +196,6 @@ int ff_vk_decode_add_slice(AVCodecContext *avctx, FFVulkanDecodePicture *vp,
{
FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data;
FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data;
- FFVulkanDecodeProfileData *prof = &ctx->profile_data;
static const uint8_t startcode_prefix[3] = { 0x0, 0x0, 0x1 };
const size_t startcode_len = add_startcode ? sizeof(startcode_prefix) : 0;
@@ -206,8 +205,8 @@ int ff_vk_decode_add_slice(AVCodecContext *avctx, FFVulkanDecodePicture *vp,
FFVkVideoBuffer *vkbuf;
size_t new_size = vp->slices_size + startcode_len + size +
- prof->caps.minBitstreamBufferSizeAlignment;
- new_size = FFALIGN(new_size, prof->caps.minBitstreamBufferSizeAlignment);
+ ctx->caps.minBitstreamBufferSizeAlignment;
+ new_size = FFALIGN(new_size, ctx->caps.minBitstreamBufferSizeAlignment);
slice_off = av_fast_realloc(vp->slice_off, &vp->slice_off_max,
(nb + 1)*sizeof(slice_off));
@@ -295,7 +294,6 @@ int ff_vk_decode_frame(AVCodecContext *avctx,
FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data;
FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data;
- FFVulkanDecodeProfileData *prof = &ctx->profile_data;
FFVulkanFunctions *vk = &ctx->s.vkfn;
/* Output */
@@ -319,7 +317,7 @@ int ff_vk_decode_frame(AVCodecContext *avctx,
VkImageMemoryBarrier2 img_bar[37];
int nb_img_bar = 0;
size_t data_size = FFALIGN(vp->slices_size,
- prof->caps.minBitstreamBufferSizeAlignment);
+ ctx->caps.minBitstreamBufferSizeAlignment);
FFVkExecContext *exec = ff_vk_exec_get(&ctx->exec_pool);
@@ -640,10 +638,10 @@ static VkResult vulkan_setup_profile(AVCodecContext *avctx,
VkVideoDecodeH264CapabilitiesKHR *h264_caps,
VkVideoDecodeH265CapabilitiesKHR *h265_caps,
VkVideoDecodeAV1CapabilitiesMESA *av1_caps,
+ VkVideoCapabilitiesKHR *caps,
+ VkVideoDecodeCapabilitiesKHR *dec_caps,
int cur_profile)
{
- VkVideoCapabilitiesKHR *caps = &prof->caps;
- VkVideoDecodeCapabilitiesKHR *dec_caps = &prof->dec_caps;
VkVideoDecodeUsageInfoKHR *usage = &prof->usage;
VkVideoProfileInfoKHR *profile = &prof->profile;
VkVideoProfileListInfoKHR *profile_list = &prof->profile_list;
@@ -708,6 +706,7 @@ static VkResult vulkan_setup_profile(AVCodecContext *avctx,
static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_ref,
enum AVPixelFormat *pix_fmt, VkFormat *vk_fmt,
+ FFVulkanDecodeProfileData *prof,
int *dpb_dedicate)
{
VkResult ret;
@@ -724,9 +723,8 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_
FFVulkanDecodeShared *ctx = (FFVulkanDecodeShared *)dec->shared_ref->data;
FFVulkanFunctions *vk = &ctx->s.vkfn;
- FFVulkanDecodeProfileData *prof = &ctx->profile_data;
- VkVideoCapabilitiesKHR *caps = &prof->caps;
- VkVideoDecodeCapabilitiesKHR *dec_caps = &prof->dec_caps;
+ VkVideoCapabilitiesKHR *caps = &ctx->caps;
+ VkVideoDecodeCapabilitiesKHR *dec_caps = &ctx->dec_caps;
VkVideoDecodeH264CapabilitiesKHR h264_caps = {
.sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_KHR,
@@ -765,6 +763,8 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_
&h264_caps,
&h265_caps,
&av1_caps,
+ caps,
+ dec_caps,
cur_profile);
if (ret == VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR &&
avctx->flags & AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH &&
@@ -779,6 +779,8 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_
&h264_caps,
&h265_caps,
&av1_caps,
+ caps,
+ dec_caps,
cur_profile);
}
@@ -965,6 +967,11 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_
return 0;
}
+static void free_profile_data(AVHWFramesContext *hwfc)
+{
+ av_free(hwfc->user_opaque);
+}
+
int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
{
VkFormat vkfmt;
@@ -972,7 +979,6 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
AVHWFramesContext *frames_ctx = (AVHWFramesContext*)hw_frames_ctx->data;
AVVulkanFramesContext *hwfc = frames_ctx->hwctx;
FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data;
- FFVulkanDecodeShared *ctx;
FFVulkanDecodeProfileData *prof;
frames_ctx->sw_format = AV_PIX_FMT_NONE;
@@ -981,14 +987,20 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
if (err < 0)
return err;
- ctx = (FFVulkanDecodeShared *)dec->shared_ref->data;
- prof = &ctx->profile_data;
+ prof = av_mallocz(sizeof(FFVulkanDecodeProfileData));
+ if (!prof)
+ return AVERROR(ENOMEM);
err = vulkan_decode_get_profile(avctx, hw_frames_ctx,
&frames_ctx->sw_format, &vkfmt,
- &dedicated_dpb);
- if (err < 0)
+ prof, &dedicated_dpb);
+ if (err < 0) {
+ av_free(prof);
return err;
+ }
+
+ frames_ctx->user_opaque = prof;
+ frames_ctx->free = free_profile_data;
frames_ctx->width = avctx->width;
frames_ctx->height = avctx->height;
@@ -1032,10 +1044,10 @@ int ff_vk_decode_init(AVCodecContext *avctx)
VkResult ret;
FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data;
FFVulkanDecodeShared *ctx;
- FFVulkanDecodeProfileData *prof;
FFVulkanContext *s;
FFVulkanFunctions *vk;
FFVkQueueFamilyCtx qf_dec;
+ const VkVideoProfileListInfoKHR *profile_list;
VkVideoDecodeH264SessionParametersCreateInfoKHR h264_params = {
.sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR,
@@ -1069,7 +1081,6 @@ int ff_vk_decode_init(AVCodecContext *avctx)
/* Initialize contexts */
ctx = (FFVulkanDecodeShared *)dec->shared_ref->data;
- prof = &ctx->profile_data;
s = &ctx->s;
vk = &ctx->s.vkfn;
@@ -1080,6 +1091,13 @@ int ff_vk_decode_init(AVCodecContext *avctx)
s->device = (AVHWDeviceContext *)s->frames->device_ref->data;
s->hwctx = s->device->hwctx;
+ profile_list = ff_vk_find_struct(s->hwfc->create_pnext,
+ VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR);
+ if (!profile_list) {
+ av_log(avctx, AV_LOG_ERROR, "Profile list missing from frames context!");
+ return AVERROR(EINVAL);
+ }
+
err = ff_vk_load_props(s);
if (err < 0)
goto fail;
@@ -1101,13 +1119,13 @@ int ff_vk_decode_init(AVCodecContext *avctx)
session_create.flags = 0x0;
session_create.queueFamilyIndex = s->hwctx->queue_family_decode_index;
- session_create.maxCodedExtent = prof->caps.maxCodedExtent;
- session_create.maxDpbSlots = prof->caps.maxDpbSlots;
- session_create.maxActiveReferencePictures = prof->caps.maxActiveReferencePictures;
+ session_create.maxCodedExtent = ctx->caps.maxCodedExtent;
+ session_create.maxDpbSlots = ctx->caps.maxDpbSlots;
+ session_create.maxActiveReferencePictures = ctx->caps.maxActiveReferencePictures;
session_create.pictureFormat = s->hwfc->format[0];
session_create.referencePictureFormat = session_create.pictureFormat;
session_create.pStdHeaderVersion = dec_ext[avctx->codec_id];
- session_create.pVideoProfile = &prof->profile_list.pProfiles[0];
+ session_create.pVideoProfile = &profile_list->pProfiles[0];
/* Create decode exec context.
* 2 async contexts per thread was experimentally determined to be optimal
@@ -1152,14 +1170,14 @@ int ff_vk_decode_init(AVCodecContext *avctx)
dpb_frames->height = s->frames->height;
dpb_hwfc = dpb_frames->hwctx;
- dpb_hwfc->create_pnext = (void *)&prof->profile_list;
+ dpb_hwfc->create_pnext = (void *)profile_list;
dpb_hwfc->format[0] = s->hwfc->format[0];
dpb_hwfc->tiling = VK_IMAGE_TILING_OPTIMAL;
dpb_hwfc->usage = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR |
VK_IMAGE_USAGE_SAMPLED_BIT; /* Shuts validator up. */
if (dec->layered_dpb)
- dpb_hwfc->nb_layers = prof->caps.maxDpbSlots;
+ dpb_hwfc->nb_layers = ctx->caps.maxDpbSlots;
err = av_hwframe_ctx_init(ctx->dpb_hwfc_ref);
if (err < 0)
diff --git a/libavcodec/vulkan_decode.h b/libavcodec/vulkan_decode.h
index 681d2476cd..3ac103f6b4 100644
--- a/libavcodec/vulkan_decode.h
+++ b/libavcodec/vulkan_decode.h
@@ -26,8 +26,6 @@
#include "vulkan_video.h"
typedef struct FFVulkanDecodeProfileData {
- VkVideoCapabilitiesKHR caps;
- VkVideoDecodeCapabilitiesKHR dec_caps;
VkVideoDecodeH264ProfileInfoKHR h264_profile;
VkVideoDecodeH264ProfileInfoKHR h265_profile;
VkVideoDecodeAV1ProfileInfoMESA av1_profile;
@@ -40,7 +38,9 @@ typedef struct FFVulkanDecodeShared {
FFVulkanContext s;
FFVkVideoCommon common;
FFVkExecPool exec_pool;
- FFVulkanDecodeProfileData profile_data;
+
+ VkVideoCapabilitiesKHR caps;
+ VkVideoDecodeCapabilitiesKHR dec_caps;
AVBufferRef *dpb_hwfc_ref; /* Only used for dedicated_dpb */
--
2.40.1
[-- Attachment #3: Type: text/plain, Size: 251 bytes --]
_______________________________________________
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.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [FFmpeg-devel] [PATCH] vulkan_decode: use the hwfc->user_opaque field to store the profile
[not found] ` <NYDRcdf--3-9@lynne.ee-NYDRfjv----9>
2023-06-18 12:33 ` Lynne
@ 2023-06-22 16:27 ` Lynne
1 sibling, 0 replies; 3+ messages in thread
From: Lynne @ 2023-06-22 16:27 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Jun 18, 2023, 14:20 by dev@lynne.ee:
> Patch attached.
>
Pushed, alongside the 3 other memleak-fixing patches.
_______________________________________________
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.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-06-22 16:27 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-18 12:19 [FFmpeg-devel] [PATCH] vulkan_decode: use the hwfc->user_opaque field to store the profile Lynne
[not found] ` <NYDRcdf--3-9@lynne.ee-NYDRfjv----9>
2023-06-18 12:33 ` Lynne
2023-06-22 16:27 ` Lynne
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git