Merge "Decoder: Adding Error Check for Output Buffer Size in Shared Display Mode." into mnc-dev am: afc729db25 am: 1fb89d8488 am: 56f836a29c am: 33675f68d6 am: 547804d647 am: 7adc4d57f1 am: cfe44b34c0

am: 17b987beec

Change-Id: Ic93789088cc63f634da926f1bbc92d476c062005
This commit is contained in:
Ray Essick 2018-01-08 22:47:53 +00:00 committed by android-build-merger
commit bce27b7e66

View file

@ -1698,8 +1698,8 @@ WORD32 check_app_out_buf_size(dec_struct_t *ps_dec)
}
else
{
/* In case of shared mode, do not check validity of ps_dec->ps_out_buffer */
return (IV_SUCCESS);
pic_wd = ps_dec->u2_frm_wd_y;
pic_ht = ps_dec->u2_frm_ht_y;
}
if(ps_dec->u4_app_disp_width > pic_wd)
@ -1709,14 +1709,34 @@ WORD32 check_app_out_buf_size(dec_struct_t *ps_dec)
ps_dec->u1_chroma_format,
&au4_min_out_buf_size[0]);
if(ps_dec->ps_out_buffer->u4_num_bufs < u4_min_num_out_bufs)
return IV_FAIL;
for(i = 0; i < u4_min_num_out_bufs; i++)
if(0 == ps_dec->u4_share_disp_buf)
{
if(ps_dec->ps_out_buffer->u4_min_out_buf_size[i]
< au4_min_out_buf_size[i])
return (IV_FAIL);
if(ps_dec->ps_out_buffer->u4_num_bufs < u4_min_num_out_bufs)
return IV_FAIL;
for(i = 0; i < u4_min_num_out_bufs; i++)
{
if(ps_dec->ps_out_buffer->u4_min_out_buf_size[i]
< au4_min_out_buf_size[i])
return (IV_FAIL);
}
}
else
{
if(ps_dec->disp_bufs[0].u4_num_bufs < u4_min_num_out_bufs)
return IV_FAIL;
for(i = 0; i < u4_min_num_out_bufs; i++)
{
/* We need to check only with the disp_buffer[0], because we have
* already ensured that all the buffers are of the same size in
* ih264d_set_display_frame.
*/
if(ps_dec->disp_bufs[0].u4_bufsize[i] < au4_min_out_buf_size[i])
return (IV_FAIL);
}
}
return (IV_SUCCESS);
@ -2658,6 +2678,7 @@ WORD32 ih264d_set_display_frame(iv_obj_t *dec_hdl,
void *pv_api_op)
{
UWORD32 u4_disp_buf_size[3], u4_num_disp_bufs;
ivd_set_display_frame_ip_t *dec_disp_ip;
ivd_set_display_frame_op_t *dec_disp_op;
@ -2677,8 +2698,36 @@ WORD32 ih264d_set_display_frame(iv_obj_t *dec_hdl,
u4_num_bufs = MIN(u4_num_bufs, MAX_DISP_BUFS_NEW);
ps_dec->u4_num_disp_bufs = u4_num_bufs;
/* Get the number and sizes of the first buffer. Compare this with the
* rest to make sure all the buffers are of the same size.
*/
u4_num_disp_bufs = dec_disp_ip->s_disp_buffer[0].u4_num_bufs;
u4_disp_buf_size[0] =
dec_disp_ip->s_disp_buffer[0].u4_min_out_buf_size[0];
u4_disp_buf_size[1] =
dec_disp_ip->s_disp_buffer[0].u4_min_out_buf_size[1];
u4_disp_buf_size[2] =
dec_disp_ip->s_disp_buffer[0].u4_min_out_buf_size[2];
for(i = 0; i < u4_num_bufs; i++)
{
if(dec_disp_ip->s_disp_buffer[i].u4_num_bufs != u4_num_disp_bufs)
{
return IV_FAIL;
}
if((dec_disp_ip->s_disp_buffer[i].u4_min_out_buf_size[0]
!= u4_disp_buf_size[0])
|| (dec_disp_ip->s_disp_buffer[i].u4_min_out_buf_size[1]
!= u4_disp_buf_size[1])
|| (dec_disp_ip->s_disp_buffer[i].u4_min_out_buf_size[2]
!= u4_disp_buf_size[2]))
{
return IV_FAIL;
}
ps_dec->disp_bufs[i].u4_num_bufs =
dec_disp_ip->s_disp_buffer[i].u4_num_bufs;