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 am: bce27b7e66 am: e31fa45761
am: d1b1b3df78
Change-Id: Iaf186690123373a8c2920a9430d89eb6a5031241
This commit is contained in:
commit
25e3974121
1 changed files with 57 additions and 8 deletions
|
|
@ -1698,8 +1698,8 @@ WORD32 check_app_out_buf_size(dec_struct_t *ps_dec)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* In case of shared mode, do not check validity of ps_dec->ps_out_buffer */
|
pic_wd = ps_dec->u2_frm_wd_y;
|
||||||
return (IV_SUCCESS);
|
pic_ht = ps_dec->u2_frm_ht_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ps_dec->u4_app_disp_width > pic_wd)
|
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,
|
ps_dec->u1_chroma_format,
|
||||||
&au4_min_out_buf_size[0]);
|
&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]
|
if(ps_dec->ps_out_buffer->u4_num_bufs < u4_min_num_out_bufs)
|
||||||
< au4_min_out_buf_size[i])
|
return IV_FAIL;
|
||||||
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);
|
return (IV_SUCCESS);
|
||||||
|
|
@ -2666,6 +2686,7 @@ WORD32 ih264d_set_display_frame(iv_obj_t *dec_hdl,
|
||||||
void *pv_api_op)
|
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_ip_t *dec_disp_ip;
|
||||||
ivd_set_display_frame_op_t *dec_disp_op;
|
ivd_set_display_frame_op_t *dec_disp_op;
|
||||||
|
|
||||||
|
|
@ -2685,8 +2706,36 @@ WORD32 ih264d_set_display_frame(iv_obj_t *dec_hdl,
|
||||||
u4_num_bufs = MIN(u4_num_bufs, MAX_DISP_BUFS_NEW);
|
u4_num_bufs = MIN(u4_num_bufs, MAX_DISP_BUFS_NEW);
|
||||||
|
|
||||||
ps_dec->u4_num_disp_bufs = u4_num_bufs;
|
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++)
|
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 =
|
ps_dec->disp_bufs[i].u4_num_bufs =
|
||||||
dec_disp_ip->s_disp_buffer[i].u4_num_bufs;
|
dec_disp_ip->s_disp_buffer[i].u4_num_bufs;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue