reset segement map on key frame
This is to fix a decoder crash when decoder skips a number of frame to continue decoding from a later key frame. Change-Id: I3ba116eba6c3440e0528a21f53745f694302e4ad
This commit is contained in:
parent
f8ff3e5d47
commit
6247b239bc
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
#define COEFCOUNT_TESTING
|
#define COEFCOUNT_TESTING
|
||||||
|
|
||||||
// #define DEC_DEBUG
|
//#define DEC_DEBUG
|
||||||
#ifdef DEC_DEBUG
|
#ifdef DEC_DEBUG
|
||||||
int dec_debug = 0;
|
int dec_debug = 0;
|
||||||
#endif
|
#endif
|
||||||
@ -978,8 +978,8 @@ decode_sb_row(VP9D_COMP *pbi, VP9_COMMON *pc, int mbrow, MACROBLOCKD *xd,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef DEC_DEBUG
|
#ifdef DEC_DEBUG
|
||||||
dec_debug = (pbi->common.current_video_frame == 46 &&
|
dec_debug = (pbi->common.current_video_frame == 1 &&
|
||||||
mb_row == 5 && mb_col == 2);
|
mb_row == 2 && mb_col == 8);
|
||||||
if (dec_debug)
|
if (dec_debug)
|
||||||
#if CONFIG_SUPERBLOCKS
|
#if CONFIG_SUPERBLOCKS
|
||||||
printf("Enter Debug %d %d sb %d\n", mb_row, mb_col,
|
printf("Enter Debug %d %d sb %d\n", mb_row, mb_col,
|
||||||
@ -1139,7 +1139,10 @@ static void init_frame(VP9D_COMP *pbi) {
|
|||||||
MACROBLOCKD *const xd = &pbi->mb;
|
MACROBLOCKD *const xd = &pbi->mb;
|
||||||
|
|
||||||
if (pc->frame_type == KEY_FRAME) {
|
if (pc->frame_type == KEY_FRAME) {
|
||||||
/* Various keyframe initializations */
|
|
||||||
|
if (pc->last_frame_seg_map)
|
||||||
|
vpx_memset(pc->last_frame_seg_map, 0, (pc->mb_rows * pc->mb_cols));
|
||||||
|
|
||||||
vp9_init_mv_probs(pc);
|
vp9_init_mv_probs(pc);
|
||||||
|
|
||||||
vp9_init_mbmode_probs(pc);
|
vp9_init_mbmode_probs(pc);
|
||||||
@ -1182,6 +1185,7 @@ static void init_frame(VP9D_COMP *pbi) {
|
|||||||
vp9_update_mode_info_border(pc, pc->mip);
|
vp9_update_mode_info_border(pc, pc->mip);
|
||||||
vp9_update_mode_info_in_image(pc, pc->mi);
|
vp9_update_mode_info_in_image(pc, pc->mi);
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (!pc->use_bilinear_mc_filter)
|
if (!pc->use_bilinear_mc_filter)
|
||||||
@ -1423,6 +1427,7 @@ int vp9_decode_frame(VP9D_COMP *pbi, const unsigned char **p_data_end) {
|
|||||||
pc->ref_pred_probs[0] = 120;
|
pc->ref_pred_probs[0] = 120;
|
||||||
pc->ref_pred_probs[1] = 80;
|
pc->ref_pred_probs[1] = 80;
|
||||||
pc->ref_pred_probs[2] = 40;
|
pc->ref_pred_probs[2] = 40;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < PREDICTION_PROBS; i++) {
|
for (i = 0; i < PREDICTION_PROBS; i++) {
|
||||||
if (vp9_read_bit(&header_bc))
|
if (vp9_read_bit(&header_bc))
|
||||||
|
@ -249,6 +249,9 @@ void vp9_setup_key_frame(VP9_COMP *cpi) {
|
|||||||
vp9_init_mbmode_probs(& cpi->common);
|
vp9_init_mbmode_probs(& cpi->common);
|
||||||
vp9_default_bmode_probs(cm->fc.bmode_prob);
|
vp9_default_bmode_probs(cm->fc.bmode_prob);
|
||||||
|
|
||||||
|
if(cm->last_frame_seg_map)
|
||||||
|
vpx_memset(cm->last_frame_seg_map, 0, (cm->mb_rows * cm->mb_cols));
|
||||||
|
|
||||||
vp9_init_mv_probs(& cpi->common);
|
vp9_init_mv_probs(& cpi->common);
|
||||||
|
|
||||||
// cpi->common.filter_level = 0; // Reset every key frame.
|
// cpi->common.filter_level = 0; // Reset every key frame.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user