forked from len0rd/rockbox
Codecs: mp4: Optimize m4a_check_sample_offset
Make optimization from 2358fabb
actually work.
Fix potential out of bound access.
Remove redundant zero offset check.
Change-Id: I0a0ba04670b612d410ac17a761bd08c2915721b9
This commit is contained in:
parent
f96f7cd941
commit
ef7d6009b4
2 changed files with 10 additions and 12 deletions
|
@ -202,11 +202,6 @@ enum codec_status codec_run(void)
|
|||
{
|
||||
ci->advance_buffer(file_offset - ci->curpos);
|
||||
}
|
||||
else if (file_offset == 0)
|
||||
{
|
||||
LOGF("AAC: get_sample_offset error\n");
|
||||
return CODEC_ERROR;
|
||||
}
|
||||
|
||||
/* Request the required number of bytes from the input buffer */
|
||||
buffer=ci->request_buffer(&n, FAAD_BYTE_BUFFER_SIZE);
|
||||
|
|
|
@ -122,16 +122,19 @@ void stream_create(stream_t *stream,struct codec_api* ci)
|
|||
int m4a_check_sample_offset(demux_res_t *demux_res, uint32_t frame, uint32_t *start)
|
||||
{
|
||||
uint32_t i = *start;
|
||||
for (i=0; i<demux_res->num_lookup_table; ++i)
|
||||
for (;i < demux_res->num_lookup_table; ++i)
|
||||
{
|
||||
if (demux_res->lookup_table[i].sample > frame ||
|
||||
demux_res->lookup_table[i].offset == 0)
|
||||
return -1;
|
||||
if (demux_res->lookup_table[i].sample == frame)
|
||||
if (demux_res->lookup_table[i].sample > frame)
|
||||
break;
|
||||
}
|
||||
|
||||
if (demux_res->lookup_table[i].sample == frame)
|
||||
{
|
||||
*start = i;
|
||||
return demux_res->lookup_table[i].offset;
|
||||
}
|
||||
}
|
||||
*start = i;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Seek to desired sound sample location. Return 1 on success (and modify
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue