| 1004 | } |
| 1005 | |
| 1006 | static int create_session_params(AVCodecContext *avctx) |
| 1007 | { |
| 1008 | int err; |
| 1009 | VulkanEncodeH264Context *enc = avctx->priv_data; |
| 1010 | FFVulkanEncodeContext *ctx = &enc->common; |
| 1011 | FFVulkanContext *s = &ctx->s; |
| 1012 | FFVulkanFunctions *vk = &ctx->s.vkfn; |
| 1013 | |
| 1014 | VulkanH264Units vk_units = { 0 }; |
| 1015 | |
| 1016 | VkVideoEncodeH264SessionParametersAddInfoKHR h264_params_info; |
| 1017 | VkVideoEncodeH264SessionParametersCreateInfoKHR h264_params; |
| 1018 | |
| 1019 | /* Convert it to Vulkan */ |
| 1020 | err = base_unit_to_vk(avctx, &vk_units); |
| 1021 | if (err < 0) { |
| 1022 | av_log(avctx, AV_LOG_ERROR, "Unable to convert SPS/PPS units to Vulkan: %s\n", |
| 1023 | av_err2str(err)); |
| 1024 | return err; |
| 1025 | } |
| 1026 | |
| 1027 | /* Destroy the session params */ |
| 1028 | if (ctx->session_params) |
| 1029 | vk->DestroyVideoSessionParametersKHR(s->hwctx->act_dev, |
| 1030 | ctx->session_params, |
| 1031 | s->hwctx->alloc); |
| 1032 | |
| 1033 | h264_params_info = (VkVideoEncodeH264SessionParametersAddInfoKHR) { |
| 1034 | .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR, |
| 1035 | .pStdSPSs = &vk_units.vksps, |
| 1036 | .stdSPSCount = 1, |
| 1037 | .pStdPPSs = &vk_units.vkpps, |
| 1038 | .stdPPSCount = 1, |
| 1039 | }; |
| 1040 | h264_params = (VkVideoEncodeH264SessionParametersCreateInfoKHR) { |
| 1041 | .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR, |
| 1042 | .maxStdSPSCount = 1, |
| 1043 | .maxStdPPSCount = 1, |
| 1044 | .pParametersAddInfo = &h264_params_info, |
| 1045 | }; |
| 1046 | |
| 1047 | return ff_vulkan_encode_create_session_params(avctx, ctx, &h264_params); |
| 1048 | } |
| 1049 | |
| 1050 | static int parse_feedback_units(AVCodecContext *avctx, |
| 1051 | const uint8_t *data, size_t size, |
no test coverage detected