frontends/va: Fix parsing HEVC st_ref_pic_set

According to spec, the slice ref pic set is the last entry
in st_ref_pic_set[] array.
As such, the maximum number of st ref pic sets is 65.

Fixes: ef8ba75718 ("frontends/va: Parse HEVC slice packed header")

Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31308>
This commit is contained in:
David Rosca
2024-09-23 08:03:48 +02:00
committed by Marge Bot
parent 7db47af6dd
commit ce2eedd13e
3 changed files with 4 additions and 5 deletions
@@ -375,7 +375,7 @@ unsigned int radeon_enc_write_sps_hevc(struct radeon_encoder *enc, uint8_t *out)
radeon_enc_code_ue(enc, sps->num_short_term_ref_pic_sets);
for (i = 0; i < sps->num_short_term_ref_pic_sets; i++)
radeon_enc_hevc_st_ref_pic_set(enc, i, sps->num_short_term_ref_pic_sets, &sps->st_ref_pic_set[i]);
radeon_enc_hevc_st_ref_pic_set(enc, i, sps->num_short_term_ref_pic_sets, sps->st_ref_pic_set);
radeon_enc_code_fixed_bits(enc, sps->long_term_ref_pics_present_flag, 1);
if (sps->long_term_ref_pics_present_flag) {
@@ -840,7 +840,7 @@ static void radeon_enc_slice_header_hevc(struct radeon_encoder *enc)
if (!slice->short_term_ref_pic_set_sps_flag) {
num_pic_total_curr =
radeon_enc_hevc_st_ref_pic_set(enc, sps->num_short_term_ref_pic_sets,
sps->num_short_term_ref_pic_sets, &slice->st_ref_pic_set);
sps->num_short_term_ref_pic_sets, sps->st_ref_pic_set);
} else if (sps->num_short_term_ref_pic_sets > 1) {
radeon_enc_code_fixed_bits(enc, slice->short_term_ref_pic_set_idx,
util_logbase2_ceil(sps->num_short_term_ref_pic_sets));
+1 -1
View File
@@ -603,7 +603,7 @@ static void parseEncSliceParamsH265(vlVaContext *context,
slice->short_term_ref_pic_set_sps_flag = vl_rbsp_u(rbsp, 1);
if (!slice->short_term_ref_pic_set_sps_flag) {
num_pic_total_curr = st_ref_pic_set(seq->num_short_term_ref_pic_sets, seq->num_short_term_ref_pic_sets,
&slice->st_ref_pic_set, rbsp);
seq->st_ref_pic_set, rbsp);
}
else if (seq->num_short_term_ref_pic_sets > 1)
slice->short_term_ref_pic_set_idx = vl_rbsp_u(rbsp, util_logbase2_ceil(seq->num_short_term_ref_pic_sets));
+1 -2
View File
@@ -61,7 +61,7 @@ extern "C" {
#define PIPE_H265_MAX_DELTA_POC 48
#define PIPE_H265_MAX_DPB_SIZE 16
#define PIPE_H265_MAX_NUM_LIST_REF 15
#define PIPE_H265_MAX_ST_REF_PIC_SETS 64
#define PIPE_H265_MAX_ST_REF_PIC_SETS 65
#define PIPE_H265_MAX_SUB_LAYERS 7
#define PIPE_AV1_MAX_DPB_SIZE 8
#define PIPE_AV1_REFS_PER_FRAME 7
@@ -1125,7 +1125,6 @@ struct pipe_h265_enc_slice_param
int8_t slice_cr_qp_offset;
int8_t slice_beta_offset_div2;
int8_t slice_tc_offset_div2;
struct pipe_h265_st_ref_pic_set st_ref_pic_set;
struct pipe_h265_ref_pic_lists_modification ref_pic_lists_modification;
};