| 1154 | } |
| 1155 | |
| 1156 | static int create_session_params(AVCodecContext *avctx) |
| 1157 | { |
| 1158 | int err; |
| 1159 | VulkanEncodeH265Context *enc = avctx->priv_data; |
| 1160 | FFVulkanEncodeContext *ctx = &enc->common; |
| 1161 | FFVulkanContext *s = &ctx->s; |
| 1162 | FFVulkanFunctions *vk = &ctx->s.vkfn; |
| 1163 | |
| 1164 | VulkanH265Units vk_units = { 0 }; |
| 1165 | |
| 1166 | VkVideoEncodeH265SessionParametersAddInfoKHR h265_params_info; |
| 1167 | VkVideoEncodeH265SessionParametersCreateInfoKHR h265_params; |
| 1168 | |
| 1169 | /* Convert it to Vulkan */ |
| 1170 | err = base_unit_to_vk(avctx, &vk_units); |
| 1171 | if (err < 0) { |
| 1172 | av_log(avctx, AV_LOG_ERROR, "Unable to convert SPS/PPS units to Vulkan: %s\n", |
| 1173 | av_err2str(err)); |
| 1174 | return err; |
| 1175 | } |
| 1176 | |
| 1177 | /* Destroy the session params */ |
| 1178 | if (ctx->session_params) |
| 1179 | vk->DestroyVideoSessionParametersKHR(s->hwctx->act_dev, |
| 1180 | ctx->session_params, |
| 1181 | s->hwctx->alloc); |
| 1182 | |
| 1183 | h265_params_info = (VkVideoEncodeH265SessionParametersAddInfoKHR) { |
| 1184 | .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR, |
| 1185 | .pStdSPSs = &vk_units.sps, |
| 1186 | .stdSPSCount = 1, |
| 1187 | .pStdPPSs = &vk_units.pps, |
| 1188 | .stdPPSCount = 1, |
| 1189 | .pStdVPSs = &vk_units.vps, |
| 1190 | .stdVPSCount = 1, |
| 1191 | }; |
| 1192 | h265_params = (VkVideoEncodeH265SessionParametersCreateInfoKHR) { |
| 1193 | .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR, |
| 1194 | .maxStdSPSCount = 1, |
| 1195 | .maxStdPPSCount = 1, |
| 1196 | .maxStdVPSCount = 1, |
| 1197 | .pParametersAddInfo = &h265_params_info, |
| 1198 | }; |
| 1199 | |
| 1200 | return ff_vulkan_encode_create_session_params(avctx, ctx, &h265_params); |
| 1201 | } |
| 1202 | |
| 1203 | static int parse_feedback_units(AVCodecContext *avctx, |
| 1204 | const uint8_t *data, size_t size, |
no test coverage detected