frontends/va: Add more params from VADecPictureParameterBufferAV1 and VASliceParameterBufferAV1 to pipe_av1_picture_desc

Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18875>
This commit is contained in:
Sil Vilerino
2022-09-28 09:45:15 -04:00
parent 9bac88856d
commit d5b4dec033
2 changed files with 41 additions and 0 deletions

View File

@@ -66,6 +66,7 @@ static void tile_info(vlVaContext *context, VADecPictureParameterBufferAV1 *av1)
i = 0;
for (startSb = 0; startSb < sbCols; startSb += tileWidthSb) {
context->desc.av1.picture_parameter.tile_col_start_sb[i] = startSb;
context->desc.av1.picture_parameter.width_in_sbs[i] = tileWidthSb;
i++;
}
context->desc.av1.picture_parameter.tile_col_start_sb[i] = sbCols;
@@ -74,6 +75,7 @@ static void tile_info(vlVaContext *context, VADecPictureParameterBufferAV1 *av1)
i = 0;
for (startSb = 0; startSb < sbRows; startSb += tileHeightSb) {
context->desc.av1.picture_parameter.tile_row_start_sb[i] = startSb;
context->desc.av1.picture_parameter.height_in_sbs[i] = tileHeightSb;
i++;
}
context->desc.av1.picture_parameter.tile_row_start_sb[i] = sbRows;
@@ -86,6 +88,7 @@ static void tile_info(vlVaContext *context, VADecPictureParameterBufferAV1 *av1)
context->desc.av1.picture_parameter.tile_col_start_sb[i] = startSb;
sizeSb = (av1->width_in_sbs_minus_1)[i] + 1;
context->desc.av1.picture_parameter.width_in_sbs[i] = sizeSb;
widestTileSb = MAX2(sizeSb, widestTileSb);
startSb += sizeSb;
width_sb -= sizeSb;
@@ -95,6 +98,7 @@ static void tile_info(vlVaContext *context, VADecPictureParameterBufferAV1 *av1)
startSb = 0;
for (i = 0; startSb < sbRows; ++i) {
unsigned height_in_sbs_minus_1 = (av1->height_in_sbs_minus_1)[i];
context->desc.av1.picture_parameter.height_in_sbs[i] = height_in_sbs_minus_1 + 1;
context->desc.av1.picture_parameter.tile_row_start_sb[i] = startSb;
startSb += height_in_sbs_minus_1 + 1;
@@ -116,6 +120,10 @@ void vlVaHandlePictureParameterBufferAV1(vlVaDriver *drv, vlVaContext *context,
av1->seq_info_fields.fields.use_128x128_superblock;
context->desc.av1.picture_parameter.seq_info_fields.enable_filter_intra =
av1->seq_info_fields.fields.enable_filter_intra;
context->desc.av1.picture_parameter.seq_info_fields.enable_cdef =
av1->seq_info_fields.fields.enable_cdef;
context->desc.av1.picture_parameter.seq_info_fields.film_grain_params_present =
av1->seq_info_fields.fields.film_grain_params_present;
context->desc.av1.picture_parameter.seq_info_fields.enable_intra_edge_filter =
av1->seq_info_fields.fields.enable_intra_edge_filter;
context->desc.av1.picture_parameter.order_hint_bits_minus_1 = av1->order_hint_bits_minus_1;
@@ -139,6 +147,8 @@ void vlVaHandlePictureParameterBufferAV1(vlVaDriver *drv, vlVaContext *context,
context->desc.av1.picture_parameter.seq_info_fields.mono_chrome =
av1->seq_info_fields.fields.mono_chrome;
context->desc.av1.picture_parameter.pic_info_fields.showable_frame =
av1->pic_info_fields.bits.showable_frame;
context->desc.av1.picture_parameter.pic_info_fields.frame_type =
av1->pic_info_fields.bits.frame_type;
context->desc.av1.picture_parameter.pic_info_fields.show_frame =
@@ -165,7 +175,11 @@ void vlVaHandlePictureParameterBufferAV1(vlVaDriver *drv, vlVaContext *context,
av1->pic_info_fields.bits.disable_frame_end_update_cdf;
context->desc.av1.picture_parameter.pic_info_fields.allow_warped_motion =
av1->pic_info_fields.bits.allow_warped_motion;
context->desc.av1.picture_parameter.pic_info_fields.uniform_tile_spacing_flag =
av1->pic_info_fields.bits.uniform_tile_spacing_flag;
context->desc.av1.picture_parameter.matrix_coefficients =
av1->matrix_coefficients;
context->desc.av1.picture_parameter.current_frame_id = av1->current_frame;
context->desc.av1.picture_parameter.order_hint = av1->order_hint;
context->desc.av1.picture_parameter.primary_ref_frame = av1->primary_ref_frame;
@@ -192,6 +206,8 @@ void vlVaHandlePictureParameterBufferAV1(vlVaDriver *drv, vlVaContext *context,
context->desc.av1.picture_parameter.u_ac_delta_q = av1->u_ac_delta_q;
context->desc.av1.picture_parameter.v_dc_delta_q = av1->v_dc_delta_q;
context->desc.av1.picture_parameter.v_ac_delta_q = av1->v_ac_delta_q;
context->desc.av1.picture_parameter.qmatrix_fields.using_qmatrix =
av1->qmatrix_fields.bits.using_qmatrix;
context->desc.av1.picture_parameter.qmatrix_fields.qm_y = av1->qmatrix_fields.bits.qm_y | 0xf;
context->desc.av1.picture_parameter.qmatrix_fields.qm_u = av1->qmatrix_fields.bits.qm_u | 0xf;
context->desc.av1.picture_parameter.qmatrix_fields.qm_v = av1->qmatrix_fields.bits.qm_v | 0xf;
@@ -201,6 +217,8 @@ void vlVaHandlePictureParameterBufferAV1(vlVaDriver *drv, vlVaContext *context,
av1->seg_info.segment_info_fields.bits.enabled;
context->desc.av1.picture_parameter.seg_info.segment_info_fields.update_map =
av1->seg_info.segment_info_fields.bits.update_map;
context->desc.av1.picture_parameter.seg_info.segment_info_fields.update_data =
av1->seg_info.segment_info_fields.bits.update_data;
context->desc.av1.picture_parameter.seg_info.segment_info_fields.temporal_update =
av1->seg_info.segment_info_fields.bits.temporal_update;
for (i = 0; i < AV1_MAX_SEGMENTS; ++i) {
@@ -265,6 +283,10 @@ void vlVaHandlePictureParameterBufferAV1(vlVaDriver *drv, vlVaContext *context,
av1->loop_restoration_fields.bits.cbframe_restoration_type;
context->desc.av1.picture_parameter.loop_restoration_fields.crframe_restoration_type =
av1->loop_restoration_fields.bits.crframe_restoration_type;
context->desc.av1.picture_parameter.loop_restoration_fields.lr_unit_shift =
av1->loop_restoration_fields.bits.lr_unit_shift;
context->desc.av1.picture_parameter.loop_restoration_fields.lr_uv_shift =
av1->loop_restoration_fields.bits.lr_uv_shift;
if (!av1->loop_restoration_fields.bits.lr_unit_shift) {
context->desc.av1.picture_parameter.lr_unit_size[0] =
256 >> (2 - av1->loop_restoration_fields.bits.lr_unit_shift);
@@ -280,6 +302,7 @@ void vlVaHandlePictureParameterBufferAV1(vlVaDriver *drv, vlVaContext *context,
/* Global Motion Params */
for (i = 0; i < ARRAY_SIZE(av1->wm); ++i) {
context->desc.av1.picture_parameter.wm[i].wmtype = av1->wm[i].wmtype;
context->desc.av1.picture_parameter.wm[i].invalid = av1->wm[i].invalid;
for (j = 0; j < ARRAY_SIZE(av1->wm[0].wmmat); ++j)
context->desc.av1.picture_parameter.wm[i].wmmat[j] = av1->wm[i].wmmat[j];
}
@@ -353,4 +376,7 @@ void vlVaHandleSliceParameterBufferAV1(vlVaContext *context, vlVaBuffer *buf, un
context->desc.av1.slice_parameter.slice_data_size[num] = av1->slice_data_size;
context->desc.av1.slice_parameter.slice_data_offset[num] = av1->slice_data_offset;
context->desc.av1.slice_parameter.slice_data_row[num] = av1->tile_row;
context->desc.av1.slice_parameter.slice_data_col[num] = av1->tile_column;
context->desc.av1.slice_parameter.slice_data_anchor_frame_idx[num] = av1->anchor_frame_idx;
}

View File

@@ -903,8 +903,10 @@ struct pipe_av1_picture_desc
uint32_t enable_dual_filter:1;
uint32_t enable_order_hint:1;
uint32_t enable_jnt_comp:1;
uint32_t enable_cdef:1;
uint32_t mono_chrome:1;
uint32_t ref_frame_mvs:1;
uint32_t film_grain_params_present:1;
} seq_info_fields;
uint32_t current_frame_id;
@@ -922,6 +924,7 @@ struct pipe_av1_picture_desc
struct {
uint32_t enabled:1;
uint32_t update_map:1;
uint32_t update_data:1;
uint32_t temporal_update:1;
} segment_info_fields;
@@ -966,11 +969,14 @@ struct pipe_av1_picture_desc
uint8_t tile_rows;
uint32_t tile_col_start_sb[65];
uint32_t tile_row_start_sb[65];
uint16_t width_in_sbs[64];
uint16_t height_in_sbs[64];
uint16_t context_update_tile_id;
struct {
uint32_t frame_type:2;
uint32_t show_frame:1;
uint32_t showable_frame:1;
uint32_t error_resilient_mode:1;
uint32_t disable_cdf_update:1;
uint32_t allow_screen_content_tools:1;
@@ -981,6 +987,7 @@ struct pipe_av1_picture_desc
uint32_t is_motion_mode_switchable:1;
uint32_t use_ref_frame_mvs:1;
uint32_t disable_frame_end_update_cdf:1;
uint32_t uniform_tile_spacing_flag:1;
uint32_t allow_warped_motion:1;
} pic_info_fields;
@@ -1007,6 +1014,7 @@ struct pipe_av1_picture_desc
int8_t v_ac_delta_q;
struct {
uint16_t using_qmatrix:1;
uint16_t qm_y:4;
uint16_t qm_u:4;
uint16_t qm_v:4;
@@ -1033,21 +1041,28 @@ struct pipe_av1_picture_desc
uint16_t yframe_restoration_type:2;
uint16_t cbframe_restoration_type:2;
uint16_t crframe_restoration_type:2;
uint16_t lr_unit_shift:2;
uint16_t lr_uv_shift:1;
} loop_restoration_fields;
uint16_t lr_unit_size[3];
struct {
uint32_t wmtype;
uint8_t invalid;
int32_t wmmat[8];
} wm[7];
uint32_t refresh_frame_flags;
uint8_t matrix_coefficients;
} picture_parameter;
struct {
uint32_t slice_data_size[256];
uint32_t slice_data_offset[256];
uint16_t slice_data_row[256];
uint16_t slice_data_col[256];
uint8_t slice_data_anchor_frame_idx[256];
} slice_parameter;
};