Error Resilience - Check on as_recent_fld[0][1] If it is NULL then it should first get assigned to a value before dereferencing Adding check for the same. Bug: 34231231 Change-Id: I8ed89ea791d78d5fa8e35d123a92866b3da1ceb1 (cherry picked from commit a8dbcd2b5c956a45a848a332c35909ad58c6a2a9)
diff --git a/decoder/impeg2d_pic_proc.c b/decoder/impeg2d_pic_proc.c index 029f1bf..fbbbf79 100644 --- a/decoder/impeg2d_pic_proc.c +++ b/decoder/impeg2d_pic_proc.c
@@ -555,6 +555,32 @@ ps_dec->as_recent_fld[1][1] = ps_dec->as_recent_fld[0][1]; } + /* Error resilience: If forward and backward pictures are going to be NULL*/ + /* then assign both to the current */ + /* if one of them NULL then we will assign the non null to the NULL one */ + + if((NULL == ps_dec->as_recent_fld[0][1].pu1_y) && (NULL == ps_dec->as_recent_fld[1][1].pu1_y)) + { + // assign the current picture to both + ps_dec->as_recent_fld[1][0] = ps_dec->s_cur_frm_buf; + impeg2d_get_bottom_field_buf(&ps_dec->s_cur_frm_buf, &ps_dec->as_recent_fld[1][1], + ps_dec->u2_frame_width); + ps_dec->as_recent_fld[0][0] = ps_dec->s_cur_frm_buf; + ps_dec->as_recent_fld[0][1] = ps_dec->as_recent_fld[1][1]; + } + //Assign the non-null picture to the null picture + + else if((NULL == ps_dec->as_recent_fld[0][1].pu1_y) && (NULL != ps_dec->as_recent_fld[1][1].pu1_y)) + { + ps_dec->as_recent_fld[0][0] = ps_dec->as_recent_fld[1][0]; + ps_dec->as_recent_fld[0][1] = ps_dec->as_recent_fld[1][1]; + } + + else if((NULL == ps_dec->as_recent_fld[1][1].pu1_y) && (NULL != ps_dec->as_recent_fld[0][1].pu1_y)) + { + ps_dec->as_recent_fld[1][0] = ps_dec->as_recent_fld[0][0]; + ps_dec->as_recent_fld[1][1] = ps_dec->as_recent_fld[0][1]; + } ps_dec->as_ref_buf[FORW][TOP] = ps_dec->as_recent_fld[0][0]; ps_dec->as_ref_buf[FORW][BOTTOM] = ps_dec->as_recent_fld[0][1]; ps_dec->as_ref_buf[BACK][TOP] = ps_dec->as_recent_fld[1][0];