Fix resolution change within a decode call.

If resolution changes within a decode call,due to multiple
sps, the decoder hangs as the the application will
give the same data again in the next decode call. This
results in a hang. Fixed this by flaging an error,
when sps/resoultion changes within a process call.

Bug: 38487564
Test: ran POC on patched O-based system w/o hanging
Change-Id: I30095b2e8bf573c1a58a316a23b1a5e6a4af589b
This commit is contained in:
Hamsalekha S 2017-05-22 14:10:15 +05:30 committed by Ray Essick
parent 810356f4de
commit fe18375850
3 changed files with 12 additions and 0 deletions

View file

@ -2879,6 +2879,7 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
ps_dec->u4_bs_deblk_thread_created = 0;
ps_dec->u4_cur_bs_mb_num = 0;
ps_dec->u4_start_recon_deblk = 0;
ps_dec->u4_sps_cnt_in_process = 0;
DEBUG_THREADS_PRINTF(" Starting process call\n");

View file

@ -1221,6 +1221,16 @@ WORD32 ih264d_parse_nal_unit(iv_obj_t *dec_hdl,
/* ! */
ih264d_rbsp_to_sodb(ps_dec->ps_bitstrm);
i_status = ih264d_parse_sps(ps_dec, ps_bitstrm);
ps_dec->u4_sps_cnt_in_process++;
/*If a resolution change happens within a process call, due to multiple sps
* we will not support it.
*/
if((ps_dec->u4_sps_cnt_in_process > 1 ) &&
(i_status == IVD_RES_CHANGED))
{
i_status = ERROR_INV_SPS_PPS_T;
ps_dec->u1_res_changed = 0;
}
if(i_status == ERROR_INV_SPS_PPS_T)
return i_status;
if(!i_status)

View file

@ -1317,6 +1317,7 @@ typedef struct _DecStruct
UWORD32 u4_cur_bs_mb_num;
UWORD32 u4_bs_cur_slice_num_mbs;
UWORD32 u4_cur_deblk_mb_num;
UWORD32 u4_sps_cnt_in_process;
volatile UWORD16 u2_cur_slice_num_bs;
UWORD32 u4_deblk_mb_x;