amdv: ko crash when play error video [1/1]

PD#SWPL-161888

Problem:
metadata error and dolby source code stuck in
metadata_parser_process

Solution:
drvier add error check, treat as sdr when error
count > 10.

Verify:
s5

Change-Id: I2eb939ffbe5fa5fc4ae462c40e2d6f00fba3e025
Signed-off-by: yao liu <yao.liu@amlogic.com>
This commit is contained in:
yao liu
2024-03-21 17:23:13 +08:00
committed by gerrit autosubmit
parent 91ed26090c
commit 17c52ec792
2 changed files with 11 additions and 2 deletions
@@ -2497,6 +2497,7 @@ int dv_inst_map(int *inst)
dv_inst[*inst].in_md_size = 0;
dv_inst[*inst].in_comp = NULL;
dv_inst[*inst].in_comp_size = 0;
dv_inst[*inst].err_parse_cnt = 0;
return 0;
}
mutex_unlock(&dv_inst_lock);
@@ -5627,6 +5628,10 @@ int parse_sei_and_meta_ext_v2(struct vframe_s *vf,
if (!aux_buf || aux_size == 0 || !fmt || !md_buf || !comp_buf ||
!total_comp_size || !total_md_size || !ret_flags)
return 1;
if (dv_inst[dv_id].err_parse_cnt > 10) {
pr_err("parser error count %d\n", dv_inst[dv_id].err_parse_cnt);
return 1;
}
p = aux_buf;
while (p < aux_buf + aux_size - 8) {
@@ -5778,6 +5783,7 @@ int parse_sei_and_meta_ext_v2(struct vframe_s *vf,
("[inst%d]meta(%d), pts(%lld) -> metadata parser process fail\n",
dv_id + 1, rpu_size, vf->pts_us64);
ret = 3;
dv_inst[dv_id].err_parse_cnt += 1;
} else {
if (*total_comp_size + comp_size
< COMP_BUF_SIZE)
@@ -9408,7 +9414,7 @@ int amdv_parse_metadata_v2_stb(struct vframe_s *vf,
dv_inst[dv_id].comp_buf[cur_md_id][i + 6],
dv_inst[dv_id].comp_buf[cur_md_id][i + 7]);
}
} else { /*no parse or parse failed*/
} else if (ret == 0) { /*no parse*/
if (get_vframe_src_fmt(vf) ==
VFRAME_SIGNAL_FMT_HDR10PRIME)
src_format = FORMAT_PRIMESL;
@@ -9421,6 +9427,8 @@ int amdv_parse_metadata_v2_stb(struct vframe_s *vf,
&src_format,
&ret_flags, drop_flag,
dv_id);
} else {/* parse failed*/
src_format = FORMAT_SDR;
}
if (force_mel)
ret_flags = 1;
@@ -10306,7 +10314,7 @@ int amdv_parse_metadata_v2_stb(struct vframe_s *vf,
pri_mode = V_PRIORITY;
} else {
/*auto mode: check video/graphics priority on the fly */
if (get_video_enabled(0))
if (get_video_enabled(0)/* && is_graphics_output_off()*/)
pri_mode = V_PRIORITY;
else
pri_mode = G_PRIORITY;
@@ -616,6 +616,7 @@ struct dv_inst_s {
char *vsem_if;
int vsem_if_size;
enum input_mode_enum input_mode;
u32 err_parse_cnt;
};
/*hw5 video info*/