mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-11-19 18:12:54 -05:00
Optimization to latest aac decoder changes. Significantly reduce loop count in m4a_check_sample_offset() during standard playback. Before this change the loop count increased with each decoded chunk and for each frame.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29750 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
8d1d2f8982
commit
2358fabb70
3 changed files with 14 additions and 7 deletions
|
|
@ -124,10 +124,14 @@ void stream_create(stream_t *stream,struct codec_api* ci)
|
|||
|
||||
/* Check if there is a dedicated byte position contained for the given frame.
|
||||
* Return this byte position in case of success or return -1. This allows to
|
||||
* skip empty samples. */
|
||||
int m4a_check_sample_offset(demux_res_t *demux_res, uint32_t frame)
|
||||
* skip empty samples.
|
||||
* During standard playback the search result (index i) will always increase.
|
||||
* Therefor we save this index and let the caller set this value again as start
|
||||
* index when calling m4a_check_sample_offset() for the next frame. This
|
||||
* reduces the overall loop count significantly. */
|
||||
int m4a_check_sample_offset(demux_res_t *demux_res, uint32_t frame, uint32_t *start)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
uint32_t i = *start;
|
||||
for (i=0; i<demux_res->num_lookup_table; ++i)
|
||||
{
|
||||
if (demux_res->lookup_table[i].sample > frame ||
|
||||
|
|
@ -136,6 +140,7 @@ int m4a_check_sample_offset(demux_res_t *demux_res, uint32_t frame)
|
|||
if (demux_res->lookup_table[i].sample == frame)
|
||||
break;
|
||||
}
|
||||
*start = i;
|
||||
return demux_res->lookup_table[i].offset;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -137,6 +137,6 @@ unsigned int m4a_seek (demux_res_t* demux_res, stream_t* stream,
|
|||
int* current_sample);
|
||||
unsigned int m4a_seek_raw (demux_res_t* demux_res, stream_t* stream,
|
||||
uint32_t file_loc, uint32_t* sound_samples_done, int* current_sample);
|
||||
int m4a_check_sample_offset(demux_res_t *demux_res, uint32_t frame);
|
||||
int m4a_check_sample_offset(demux_res_t *demux_res, uint32_t frame, uint32_t *start);
|
||||
|
||||
#endif /* STREAM_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue