75 VkVideoReferenceSlotInfoKHR *ref_slot,
76 VkVideoPictureResourceInfoKHR *
ref,
77 StdVideoDecodeAV1ReferenceInfo *vkav1_std_ref,
78 VkVideoDecodeAV1DpbSlotInfoKHR *vkav1_ref,
79 const AV1Frame *pic,
int is_current,
int has_grain,
80 const uint8_t *saved_order_hints)
92 *vkav1_std_ref = (StdVideoDecodeAV1ReferenceInfo) {
93 .flags = (StdVideoDecodeAV1ReferenceInfoFlags) {
102 if (saved_order_hints) {
104 for (
int i = 1;
i < STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME;
i++)
105 vkav1_std_ref->SavedOrderHints[
i - 1] = saved_order_hints[
i];
107 for (
int i = 0;
i < STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME;
i++)
108 vkav1_std_ref->SavedOrderHints[
i] = saved_order_hints[
i];
111 *vkav1_ref = (VkVideoDecodeAV1DpbSlotInfoKHR) {
112 .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR,
113 .pStdReferenceInfo = vkav1_std_ref,
120 *
ref = (VkVideoPictureResourceInfoKHR) {
121 .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
122 .codedOffset = (VkOffset2D){ 0, 0 },
123 .codedExtent = (VkExtent2D){ pic->
f->
width, pic->
f->
height },
124 .baseArrayLayer = ((has_grain || dec->
dedicated_dpb) &&
ctx->common.layered_dpb) ?
126 .imageViewBinding = vkpic->
view.
ref,
129 *ref_slot = (VkVideoReferenceSlotInfoKHR) {
130 .sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR,
133 .pPictureResource =
ref,
143 StdVideoAV1TimingInfo *av1_timing_info,
144 StdVideoAV1ColorConfig *av1_color_config,
145 StdVideoAV1SequenceHeader *av1_sequence_header)
150 *av1_timing_info = (StdVideoAV1TimingInfo) {
151 .flags = (StdVideoAV1TimingInfoFlags) {
159 *av1_color_config = (StdVideoAV1ColorConfig) {
160 .flags = (StdVideoAV1ColorConfigFlags) {
174 *av1_sequence_header = (StdVideoAV1SequenceHeader) {
175 .flags = (StdVideoAV1SequenceHeaderFlags) {
206 .pTimingInfo = av1_timing_info,
207 .pColorConfig = av1_color_config,
258 uint32_t frame_id_alloc_mask = 0;
269 StdVideoAV1FrameRestorationType remap_lr_type[4] = { STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_NONE,
270 STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SWITCHABLE,
271 STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_WIENER,
272 STD_VIDEO_AV1_FRAME_RESTORATION_TYPE_SGRPROJ };
275 for (
int i = 0;
i < STD_VIDEO_AV1_NUM_REF_FRAMES;
i++) {
278 frame_id_alloc_mask |= 1 << rp->
frame_id;
282 unsigned slot_idx = 0;
283 for (
unsigned i = 0;
i < 32;
i++) {
284 if (!(frame_id_alloc_mask & (1 <<
i))) {
291 frame_id_alloc_mask |= (1 << slot_idx);
295 for (
int i = 0;
i < STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME;
i++)
298 for (
int i = 0;
i < STD_VIDEO_AV1_REFS_PER_FRAME;
i++) {
307 for (
int j = 0; j < ref_count; j++) {
328 pic, 1, apply_grain,
NULL);
333 .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR,
335 .frameHeaderOffset = 0,
337 .pTileOffsets =
NULL,
341 for (
int i = 0;
i < STD_VIDEO_AV1_REFS_PER_FRAME;
i++) {
353 .sType = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
356 .pSetupReferenceSlot = &vp->
ref_slot,
357 .referenceSlotCount = ref_count,
359 .dstPictureResource = (VkVideoPictureResourceInfoKHR) {
360 .sType = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_INFO_KHR,
361 .codedOffset = (VkOffset2D){ 0, 0 },
362 .codedExtent = (VkExtent2D){ pic->
f->
width, pic->
f->
height },
364 .imageViewBinding = vp->
view.
out,
369 .flags = (StdVideoAV1TileInfoFlags) {
370 .uniform_tile_spacing_flag =
frame_header->uniform_tile_spacing_flag,
374 .context_update_tile_id =
frame_header->context_update_tile_id,
375 .tile_size_bytes_minus_1 =
frame_header->tile_size_bytes_minus1,
397 .flags = (StdVideoAV1LoopFilterFlags) {
398 .loop_filter_delta_enabled =
frame_header->loop_filter_delta_enabled,
399 .loop_filter_delta_update =
frame_header->loop_filter_delta_update,
401 .loop_filter_sharpness =
frame_header->loop_filter_sharpness,
404 for (
int i = 0;
i < STD_VIDEO_AV1_MAX_LOOP_FILTER_STRENGTHS;
i++)
406 for (
int i = 0;
i < STD_VIDEO_AV1_LOOP_FILTER_ADJUSTMENTS;
i++)
409 ap->
cdef = (StdVideoAV1CDEF) {
410 .cdef_damping_minus_3 =
frame_header->cdef_damping_minus_3,
415 .FrameRestorationType[0] = remap_lr_type[
frame_header->lr_type[0]],
416 .FrameRestorationType[1] = remap_lr_type[
frame_header->lr_type[1]],
417 .FrameRestorationType[2] = remap_lr_type[
frame_header->lr_type[2]],
418 .LoopRestorationSize[0] = 1 +
frame_header->lr_unit_shift,
424 .flags = (StdVideoAV1FilmGrainFlags) {
438 .cb_mult = film_grain->
cb_mult,
441 .cr_mult = film_grain->
cr_mult,
448 .flags = (StdVideoDecodeAV1PictureInfoFlags) {
449 .error_resilient_mode =
frame_header->error_resilient_mode,
452 .render_and_frame_size_different =
frame_header->render_and_frame_size_different,
453 .allow_screen_content_tools =
frame_header->allow_screen_content_tools,
454 .is_filter_switchable =
frame_header->is_filter_switchable,
456 .frame_size_override_flag =
frame_header->frame_size_override_flag,
457 .buffer_removal_time_present_flag =
frame_header->buffer_removal_time_present_flag,
459 .frame_refs_short_signaling =
frame_header->frame_refs_short_signaling,
460 .allow_high_precision_mv =
frame_header->allow_high_precision_mv,
461 .is_motion_mode_switchable =
frame_header->is_motion_mode_switchable,
463 .disable_frame_end_update_cdf =
frame_header->disable_frame_end_update_cdf,
464 .allow_warped_motion =
frame_header->allow_warped_motion,
471 .segmentation_enabled =
frame_header->segmentation_enabled,
472 .segmentation_update_map =
frame_header->segmentation_update_map,
473 .segmentation_temporal_update =
frame_header->segmentation_temporal_update,
474 .segmentation_update_data =
frame_header->segmentation_update_data,
476 .apply_grain = apply_grain,
482 .refresh_frame_flags =
frame_header->refresh_frame_flags,
483 .interpolation_filter =
frame_header->interpolation_filter,
487 .SkipModeFrame[0] =
s->cur_frame.skip_mode_frame_idx[0],
488 .SkipModeFrame[1] =
s->cur_frame.skip_mode_frame_idx[1],
500 for (
int i = 0;
i < 64;
i++) {
507 for (
int i = 0;
i < STD_VIDEO_AV1_MAX_SEGMENTS;
i++) {
509 for (
int j = 0; j < STD_VIDEO_AV1_SEG_LVL_MAX; j++) {
516 for (
int i = 1;
i < STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME;
i++)
519 for (
int i = 0;
i < STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME;
i++)
522 for (
int i = 0;
i < STD_VIDEO_AV1_TOTAL_REFS_PER_FRAME;
i++) {
525 for (
int j = 0; j < STD_VIDEO_AV1_GLOBAL_MOTION_PARAMS; j++) {
530 for (
int i = 0;
i < STD_VIDEO_AV1_MAX_CDEF_FILTER_STRENGTHS;
i++) {
538 for (
int i = 0;
i < STD_VIDEO_AV1_MAX_NUM_Y_POINTS;
i++) {
543 for (
int i = 0;
i < STD_VIDEO_AV1_MAX_NUM_CB_POINTS;
i++) {
550 for (
int i = 0;
i < STD_VIDEO_AV1_MAX_NUM_POS_LUMA;
i++)
553 for (
int i = 0;
i < STD_VIDEO_AV1_MAX_NUM_POS_CHROMA;
i++) {
int export_side_data
Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of metadata exported in frame,...
struct AVCodecInternal * internal
Private context used for internal data.
This struct aggregates all the (hardware/vendor-specific) "high-level" state, i.e.