22 #define ASPECT_2PLANE (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT)
23 #define ASPECT_3PLANE (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT)
36 { VK_FORMAT_R16G16B16A16_UNORM,
AV_PIX_FMT_XV36, VK_IMAGE_ASPECT_COLOR_BIT },
37 { VK_FORMAT_B8G8R8A8_UNORM,
AV_PIX_FMT_BGRA, VK_IMAGE_ASPECT_COLOR_BIT },
38 { VK_FORMAT_R8G8B8A8_UNORM,
AV_PIX_FMT_RGBA, VK_IMAGE_ASPECT_COLOR_BIT },
45 { VK_FORMAT_B8G8R8A8_UNORM,
AV_PIX_FMT_BGR0, VK_IMAGE_ASPECT_COLOR_BIT },
46 { VK_FORMAT_R8G8B8A8_UNORM,
AV_PIX_FMT_RGB0, VK_IMAGE_ASPECT_COLOR_BIT },
90 { VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
AV_PIX_FMT_Y210, VK_IMAGE_ASPECT_COLOR_BIT },
91 { VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
AV_PIX_FMT_Y212, VK_IMAGE_ASPECT_COLOR_BIT },
108 return VK_IMAGE_ASPECT_NONE;
113 if (
desc->nb_components == 1)
114 return VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR;
115 else if (!
desc->log2_chroma_w && !
desc->log2_chroma_h)
116 return VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR;
117 else if (!
desc->log2_chroma_w &&
desc->log2_chroma_h == 1)
118 return VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR;
119 else if (
desc->log2_chroma_w == 1 &&
desc->log2_chroma_h == 1)
120 return VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR;
121 return VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_KHR;
127 case 8:
return VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR;
128 case 10:
return VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR;
129 case 12:
return VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR;
132 return VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR;
138 case STD_VIDEO_H264_LEVEL_IDC_1_0:
return 10;
139 case STD_VIDEO_H264_LEVEL_IDC_1_1:
return 11;
140 case STD_VIDEO_H264_LEVEL_IDC_1_2:
return 12;
141 case STD_VIDEO_H264_LEVEL_IDC_1_3:
return 13;
142 case STD_VIDEO_H264_LEVEL_IDC_2_0:
return 20;
143 case STD_VIDEO_H264_LEVEL_IDC_2_1:
return 21;
144 case STD_VIDEO_H264_LEVEL_IDC_2_2:
return 22;
145 case STD_VIDEO_H264_LEVEL_IDC_3_0:
return 30;
146 case STD_VIDEO_H264_LEVEL_IDC_3_1:
return 31;
147 case STD_VIDEO_H264_LEVEL_IDC_3_2:
return 32;
148 case STD_VIDEO_H264_LEVEL_IDC_4_0:
return 40;
149 case STD_VIDEO_H264_LEVEL_IDC_4_1:
return 41;
150 case STD_VIDEO_H264_LEVEL_IDC_4_2:
return 42;
151 case STD_VIDEO_H264_LEVEL_IDC_5_0:
return 50;
152 case STD_VIDEO_H264_LEVEL_IDC_5_1:
return 51;
153 case STD_VIDEO_H264_LEVEL_IDC_5_2:
return 52;
154 case STD_VIDEO_H264_LEVEL_IDC_6_0:
return 60;
155 case STD_VIDEO_H264_LEVEL_IDC_6_1:
return 61;
157 case STD_VIDEO_H264_LEVEL_IDC_6_2:
return 62;
164 case STD_VIDEO_H265_LEVEL_IDC_1_0:
return 10;
165 case STD_VIDEO_H265_LEVEL_IDC_2_0:
return 20;
166 case STD_VIDEO_H265_LEVEL_IDC_2_1:
return 21;
167 case STD_VIDEO_H265_LEVEL_IDC_3_0:
return 30;
168 case STD_VIDEO_H265_LEVEL_IDC_3_1:
return 31;
169 case STD_VIDEO_H265_LEVEL_IDC_4_0:
return 40;
170 case STD_VIDEO_H265_LEVEL_IDC_4_1:
return 41;
171 case STD_VIDEO_H265_LEVEL_IDC_5_0:
return 50;
172 case STD_VIDEO_H265_LEVEL_IDC_5_1:
return 51;
173 case STD_VIDEO_H265_LEVEL_IDC_6_0:
return 60;
174 case STD_VIDEO_H265_LEVEL_IDC_6_1:
return 61;
176 case STD_VIDEO_H265_LEVEL_IDC_6_2:
return 62;
204 void *create_pNext,
size_t size)
244 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
261 FFVkVideoCommon *common)
265 if (common->session) {
266 vk->DestroyVideoSessionKHR(
s->hwctx->act_dev, common->session,
268 common->session = VK_NULL_HANDLE;
271 if (common->nb_mem && common->mem)
272 for (
int i = 0;
i < common->nb_mem;
i++)
273 vk->FreeMemory(
s->hwctx->act_dev, common->mem[
i],
s->hwctx->alloc);
281 FFVkVideoCommon *common,
282 VkVideoSessionCreateInfoKHR *session_create)
287 VkVideoSessionMemoryRequirementsKHR *mem =
NULL;
288 VkBindVideoSessionMemoryInfoKHR *bind_mem =
NULL;
291 ret = vk->CreateVideoSessionKHR(
s->hwctx->act_dev, session_create,
292 s->hwctx->alloc, &common->session);
293 if (
ret != VK_SUCCESS)
297 ret = vk->GetVideoSessionMemoryRequirementsKHR(
s->hwctx->act_dev,
301 if (
ret != VK_SUCCESS) {
307 common->mem =
av_mallocz(
sizeof(*common->mem)*common->nb_mem);
312 mem =
av_mallocz(
sizeof(*mem)*common->nb_mem);
317 bind_mem =
av_mallocz(
sizeof(*bind_mem)*common->nb_mem);
324 for (
int i = 0;
i < common->nb_mem;
i++) {
325 mem[
i] = (VkVideoSessionMemoryRequirementsKHR) {
326 .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR,
331 ret = vk->GetVideoSessionMemoryRequirementsKHR(
s->hwctx->act_dev,
332 common->session, &common->nb_mem,
334 if (
ret != VK_SUCCESS) {
341 for (
int i = 0;
i < common->nb_mem;
i++) {
343 UINT32_MAX,
NULL,
NULL, &common->mem[
i]);
347 bind_mem[
i] = (VkBindVideoSessionMemoryInfoKHR) {
348 .sType = VK_STRUCTURE_TYPE_BIND_VIDEO_SESSION_MEMORY_INFO_KHR,
349 .memory = common->mem[
i],
350 .memoryBindIndex = mem[
i].memoryBindIndex,
352 .memorySize = mem[
i].memoryRequirements.size,
356 bind_mem[
i].memorySize, bind_mem[
i].memoryBindIndex);
360 ret = vk->BindVideoSessionMemoryKHR(
s->hwctx->act_dev, common->session,
361 common->nb_mem, bind_mem);
362 if (
ret != VK_SUCCESS) {