62 VkVideoReferenceSlotInfoKHR *ref_slot,
63 VkVideoPictureResourceInfoKHR *
ref,
64 VkVideoDecodeH264DpbSlotInfoKHR *vkh264_ref,
65 StdVideoDecodeH264ReferenceInfo *h264_ref,
67 int is_field,
int picture_structure)
82 uint32_t used = 0, free_slots;
86 if ((
h->DPB[
i].reference &
PICT_FRAME) && p && p->decoded)
87 used |= 1U << p->slot;
92 hp->
slot = free_slots ?
ff_ctz(free_slots) :
ctx->caps.maxDpbSlots;
93 if (hp->
slot >=
ctx->caps.maxDpbSlots) {
95 "stream's references\n");
105 picture_structure &= hp->
decoded;
106 if (!picture_structure)
112 if ((*p)->hwaccel_picture_private == hp)
121 *h264_ref = (StdVideoDecodeH264ReferenceInfo) {
124 .flags = (StdVideoDecodeH264ReferenceInfoFlags) {
125 .top_field_flag = is_field ? !!(picture_structure &
PICT_TOP_FIELD) : 0,
139 *vkh264_ref = (VkVideoDecodeH264DpbSlotInfoKHR) {
140 .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR,
141 .pStdReferenceInfo = h264_ref,
144 *
ref = (VkVideoPictureResourceInfoKHR) {
145 .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
146 .codedOffset = (VkOffset2D){ 0, 0 },
147 .codedExtent = (VkExtent2D){ pic->
f->
width, pic->
f->
height },
148 .baseArrayLayer =
ctx->common.layered_dpb ? hp->
slot : 0,
149 .imageViewBinding = vkpic->
view.
ref,
152 *ref_slot = (VkVideoReferenceSlotInfoKHR) {
153 .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
155 .slotIndex = hp->
slot,
156 .pPictureResource =
ref,
192 StdVideoH264ScalingLists *vksps_scaling,
193 StdVideoH264HrdParameters *vksps_vui_header,
194 StdVideoH264SequenceParameterSetVui *vksps_vui,
195 StdVideoH264SequenceParameterSet *vksps)
197 *vksps_scaling = (StdVideoH264ScalingLists) {
198 .scaling_list_present_mask =
sps->scaling_matrix_present_mask,
199 .use_default_scaling_matrix_mask = 0,
202 for (
int i = 0;
i < STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS;
i++)
203 for (
int j = 0; j < STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS; j++)
206 for (
int i = 0;
i < STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS;
i++)
207 for (
int j = 0; j < STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS; j++)
208 vksps_scaling->ScalingList8x8[
i][j] =
211 *vksps_vui_header = (StdVideoH264HrdParameters) {
212 .cpb_cnt_minus1 =
sps->cpb_cnt - 1,
213 .bit_rate_scale =
sps->bit_rate_scale,
214 .initial_cpb_removal_delay_length_minus1 =
sps->initial_cpb_removal_delay_length - 1,
215 .cpb_removal_delay_length_minus1 =
sps->cpb_removal_delay_length - 1,
216 .dpb_output_delay_length_minus1 =
sps->dpb_output_delay_length - 1,
217 .time_offset_length =
sps->time_offset_length,
220 for (
int i = 0;
i <
sps->cpb_cnt;
i++) {
221 vksps_vui_header->bit_rate_value_minus1[
i] =
sps->bit_rate_value[
i] - 1;
222 vksps_vui_header->cpb_size_value_minus1[
i] =
sps->cpb_size_value[
i] - 1;
223 vksps_vui_header->cbr_flag[
i] = (
sps->cpr_flag >>
i) & 0x1;
226 *vksps_vui = (StdVideoH264SequenceParameterSetVui) {
227 .aspect_ratio_idc =
sps->vui.aspect_ratio_idc,
228 .sar_width =
sps->vui.sar.num,
229 .sar_height =
sps->vui.sar.den,
230 .video_format =
sps->vui.video_format,
231 .colour_primaries =
sps->vui.colour_primaries,
232 .transfer_characteristics =
sps->vui.transfer_characteristics,
233 .matrix_coefficients =
sps->vui.matrix_coeffs,
234 .num_units_in_tick =
sps->num_units_in_tick,
235 .time_scale =
sps->time_scale,
236 .pHrdParameters = vksps_vui_header,
237 .max_num_reorder_frames =
sps->num_reorder_frames,
238 .max_dec_frame_buffering =
sps->max_dec_frame_buffering,
239 .flags = (StdVideoH264SpsVuiFlags) {
240 .aspect_ratio_info_present_flag =
sps->vui.aspect_ratio_info_present_flag,
241 .overscan_info_present_flag =
sps->vui.overscan_info_present_flag,
242 .overscan_appropriate_flag =
sps->vui.overscan_appropriate_flag,
243 .video_signal_type_present_flag =
sps->vui.video_signal_type_present_flag,
244 .video_full_range_flag =
sps->vui.video_full_range_flag,
245 .color_description_present_flag =
sps->vui.colour_description_present_flag,
246 .chroma_loc_info_present_flag =
sps->vui.chroma_loc_info_present_flag,
247 .timing_info_present_flag =
sps->timing_info_present_flag,
248 .fixed_frame_rate_flag =
sps->fixed_frame_rate_flag,
249 .bitstream_restriction_flag =
sps->bitstream_restriction_flag,
250 .nal_hrd_parameters_present_flag =
sps->nal_hrd_parameters_present_flag,
251 .vcl_hrd_parameters_present_flag =
sps->vcl_hrd_parameters_present_flag,
255 *vksps = (StdVideoH264SequenceParameterSet) {
256 .profile_idc =
sps->profile_idc,
258 .seq_parameter_set_id =
sps->sps_id,
259 .chroma_format_idc =
sps->chroma_format_idc,
260 .bit_depth_luma_minus8 =
sps->bit_depth_luma - 8,
261 .bit_depth_chroma_minus8 =
sps->bit_depth_chroma - 8,
262 .log2_max_frame_num_minus4 =
sps->log2_max_frame_num - 4,
263 .pic_order_cnt_type =
sps->poc_type,
264 .log2_max_pic_order_cnt_lsb_minus4 =
sps->poc_type ? 0 :
sps->log2_max_poc_lsb - 4,
265 .offset_for_non_ref_pic =
sps->offset_for_non_ref_pic,
266 .offset_for_top_to_bottom_field =
sps->offset_for_top_to_bottom_field,
267 .num_ref_frames_in_pic_order_cnt_cycle =
sps->poc_cycle_length,
268 .max_num_ref_frames =
sps->ref_frame_count,
269 .pic_width_in_mbs_minus1 =
sps->mb_width - 1,
270 .pic_height_in_map_units_minus1 = (
sps->mb_height/(2 -
sps->frame_mbs_only_flag)) - 1,
271 .frame_crop_left_offset =
sps->crop_left,
272 .frame_crop_right_offset =
sps->crop_right,
273 .frame_crop_top_offset =
sps->crop_top,
274 .frame_crop_bottom_offset =
sps->crop_bottom,
275 .flags = (StdVideoH264SpsFlags) {
276 .constraint_set0_flag = (
sps->constraint_set_flags >> 0) & 0x1,
277 .constraint_set1_flag = (
sps->constraint_set_flags >> 1) & 0x1,
278 .constraint_set2_flag = (
sps->constraint_set_flags >> 2) & 0x1,
279 .constraint_set3_flag = (
sps->constraint_set_flags >> 3) & 0x1,
280 .constraint_set4_flag = (
sps->constraint_set_flags >> 4) & 0x1,
281 .constraint_set5_flag = (
sps->constraint_set_flags >> 5) & 0x1,
282 .direct_8x8_inference_flag =
sps->direct_8x8_inference_flag,
283 .mb_adaptive_frame_field_flag =
sps->mb_aff,
284 .frame_mbs_only_flag =
sps->frame_mbs_only_flag,
285 .delta_pic_order_always_zero_flag =
sps->delta_pic_order_always_zero_flag,
286 .separate_colour_plane_flag =
sps->residual_color_transform_flag,
287 .gaps_in_frame_num_value_allowed_flag =
sps->gaps_in_frame_num_allowed_flag,
288 .qpprime_y_zero_transform_bypass_flag =
sps->transform_bypass,
289 .frame_cropping_flag =
sps->crop,
290 .seq_scaling_matrix_present_flag =
sps->scaling_matrix_present,
291 .vui_parameters_present_flag =
sps->vui_parameters_present_flag,
293 .pOffsetForRefFrame =
sps->offset_for_ref_frame,
294 .pScalingLists = vksps_scaling,
295 .pSequenceParameterSetVui = vksps_vui,
300 StdVideoH264ScalingLists *vkpps_scaling,
301 StdVideoH264PictureParameterSet *vkpps)
303 *vkpps_scaling = (StdVideoH264ScalingLists) {
304 .scaling_list_present_mask =
pps->pic_scaling_matrix_present_mask,
305 .use_default_scaling_matrix_mask = 0,
308 for (
int i = 0;
i < STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS;
i++)
309 for (
int j = 0; j < STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS; j++)
312 for (
int i = 0;
i < STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS;
i++)
313 for (
int j = 0; j < STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS; j++)
314 vkpps_scaling->ScalingList8x8[
i][j] =
317 *vkpps = (StdVideoH264PictureParameterSet) {
318 .seq_parameter_set_id =
pps->sps_id,
319 .pic_parameter_set_id =
pps->pps_id,
320 .num_ref_idx_l0_default_active_minus1 =
pps->ref_count[0] - 1,
321 .num_ref_idx_l1_default_active_minus1 =
pps->ref_count[1] - 1,
322 .weighted_bipred_idc =
pps->weighted_bipred_idc,
323 .pic_init_qp_minus26 =
pps->init_qp - 26,
324 .pic_init_qs_minus26 =
pps->init_qs - 26,
325 .chroma_qp_index_offset =
pps->chroma_qp_index_offset[0],
326 .second_chroma_qp_index_offset =
pps->chroma_qp_index_offset[1],
327 .flags = (StdVideoH264PpsFlags) {
328 .transform_8x8_mode_flag =
pps->transform_8x8_mode,
329 .redundant_pic_cnt_present_flag =
pps->redundant_pic_cnt_present,
330 .constrained_intra_pred_flag =
pps->constrained_intra_pred,
331 .deblocking_filter_control_present_flag =
pps->deblocking_filter_parameters_present,
332 .weighted_pred_flag =
pps->weighted_pred,
333 .bottom_field_pic_order_in_frame_present_flag =
pps->pic_order_present,
334 .entropy_coding_mode_flag =
pps->cabac,
335 .pic_scaling_matrix_present_flag =
pps->pic_scaling_matrix_present_flag,
337 .pScalingLists = vkpps_scaling,