| 375 | } |
| 376 | |
| 377 | static int create_empty_session_parameters(AVCodecContext *avctx, |
| 378 | FFVulkanDecodeShared *ctx, |
| 379 | VkVideoSessionParametersKHR *empty_session_params) |
| 380 | { |
| 381 | if (avctx->codec_id == AV_CODEC_ID_VP9) |
| 382 | return 0; |
| 383 | |
| 384 | VkVideoDecodeH264SessionParametersCreateInfoKHR h264_params = { |
| 385 | .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR, |
| 386 | }; |
| 387 | VkVideoDecodeH265SessionParametersCreateInfoKHR h265_params = { |
| 388 | .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR, |
| 389 | }; |
| 390 | StdVideoAV1SequenceHeader av1_empty_seq = { 0 }; |
| 391 | VkVideoDecodeAV1SessionParametersCreateInfoKHR av1_params = { |
| 392 | .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR, |
| 393 | .pStdSequenceHeader = &av1_empty_seq, |
| 394 | }; |
| 395 | VkVideoSessionParametersCreateInfoKHR session_params_create = { |
| 396 | .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR, |
| 397 | .pNext = avctx->codec_id == AV_CODEC_ID_H264 ? (void *)&h264_params : |
| 398 | avctx->codec_id == AV_CODEC_ID_HEVC ? (void *)&h265_params : |
| 399 | avctx->codec_id == AV_CODEC_ID_AV1 ? (void *)&av1_params : |
| 400 | NULL, |
| 401 | .videoSession = ctx->common.session, |
| 402 | }; |
| 403 | |
| 404 | VkResult ret; |
| 405 | FFVulkanContext *s = &ctx->s; |
| 406 | FFVulkanFunctions *vk = &s->vkfn; |
| 407 | ret = vk->CreateVideoSessionParametersKHR(s->hwctx->act_dev, &session_params_create, |
| 408 | s->hwctx->alloc, empty_session_params); |
| 409 | if (ret != VK_SUCCESS) { |
| 410 | av_log(avctx, AV_LOG_ERROR, "Unable to create empty Vulkan video session parameters: %s!\n", |
| 411 | ff_vk_ret2str(ret)); |
| 412 | return AVERROR_EXTERNAL; |
| 413 | } |
| 414 | |
| 415 | return 0; |
| 416 | } |
| 417 | |
| 418 | static int decode_reset(AVCodecContext *avctx, FFVulkanDecodeShared *ctx) |
| 419 | { |
no test coverage detected