| 1255 | } |
| 1256 | |
| 1257 | static int init_base_units(AVCodecContext *avctx) |
| 1258 | { |
| 1259 | int err; |
| 1260 | VkResult ret; |
| 1261 | VulkanEncodeH265Context *enc = avctx->priv_data; |
| 1262 | FFVulkanEncodeContext *ctx = &enc->common; |
| 1263 | FFVulkanContext *s = &ctx->s; |
| 1264 | FFVulkanFunctions *vk = &ctx->s.vkfn; |
| 1265 | |
| 1266 | VkVideoEncodeH265SessionParametersGetInfoKHR h265_params_info; |
| 1267 | VkVideoEncodeSessionParametersGetInfoKHR params_info; |
| 1268 | VkVideoEncodeH265SessionParametersFeedbackInfoKHR h265_params_feedback; |
| 1269 | VkVideoEncodeSessionParametersFeedbackInfoKHR params_feedback; |
| 1270 | |
| 1271 | void *data = NULL; |
| 1272 | size_t data_size = 0; |
| 1273 | |
| 1274 | /* Generate SPS/PPS unit info */ |
| 1275 | err = init_sequence_headers(avctx); |
| 1276 | if (err < 0) { |
| 1277 | av_log(avctx, AV_LOG_ERROR, "Unable to initialize SPS/PPS units: %s\n", |
| 1278 | av_err2str(err)); |
| 1279 | return err; |
| 1280 | } |
| 1281 | |
| 1282 | /* Create session parameters from them */ |
| 1283 | err = create_session_params(avctx); |
| 1284 | if (err < 0) |
| 1285 | return err; |
| 1286 | |
| 1287 | h265_params_info = (VkVideoEncodeH265SessionParametersGetInfoKHR) { |
| 1288 | .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR, |
| 1289 | .writeStdSPS = 1, |
| 1290 | .writeStdPPS = 1, |
| 1291 | .writeStdVPS = 1, |
| 1292 | .stdSPSId = enc->units.raw_sps.sps_seq_parameter_set_id, |
| 1293 | .stdPPSId = enc->units.raw_pps.pps_pic_parameter_set_id, |
| 1294 | .stdVPSId = enc->units.raw_vps.vps_video_parameter_set_id, |
| 1295 | }; |
| 1296 | params_info = (VkVideoEncodeSessionParametersGetInfoKHR) { |
| 1297 | .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR, |
| 1298 | .pNext = &h265_params_info, |
| 1299 | .videoSessionParameters = ctx->session_params, |
| 1300 | }; |
| 1301 | |
| 1302 | h265_params_feedback = (VkVideoEncodeH265SessionParametersFeedbackInfoKHR) { |
| 1303 | .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR, |
| 1304 | }; |
| 1305 | params_feedback = (VkVideoEncodeSessionParametersFeedbackInfoKHR) { |
| 1306 | .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR, |
| 1307 | .pNext = &h265_params_feedback, |
| 1308 | }; |
| 1309 | |
| 1310 | ret = vk->GetEncodedVideoSessionParametersKHR(s->hwctx->act_dev, ¶ms_info, |
| 1311 | ¶ms_feedback, |
| 1312 | &data_size, data); |
| 1313 | if (ret == VK_INCOMPLETE || |
| 1314 | (ret == VK_SUCCESS) && (data_size > 0)) { |
no test coverage detected