forked from len0rd/rockbox
Codecs: mp4: Accurate seek in large files with small lookup_table
Read sample_byte_sizes table on demand when it can't be cached Change-Id: I2191be63ceebfd8b16e1e973e13c5b51986b6564
This commit is contained in:
parent
e01055a287
commit
57409f52d5
3 changed files with 25 additions and 6 deletions
|
@ -400,7 +400,8 @@ static bool read_chunk_stsz(qtmovie_t *qtmovie, size_t chunk_len)
|
|||
}
|
||||
else
|
||||
{
|
||||
DEBUGF("stsz too large, ignoring it\n");
|
||||
qtmovie->res->sample_byte_sizes_offset = stream_tell(qtmovie->stream);
|
||||
DEBUGF("stsz too large: %u, save sample_byte_sizes_offset\n", numsizes);
|
||||
}
|
||||
|
||||
if (size_remaining)
|
||||
|
@ -481,6 +482,14 @@ static bool read_chunk_stco(qtmovie_t *qtmovie, size_t chunk_len)
|
|||
return false;
|
||||
}
|
||||
|
||||
// Reading sample_byte_sizes data on seek can lead to additional re-buffering.
|
||||
// So skip it if we have good enough seek accuracy via lookup_table (3000 ms)
|
||||
if (qtmovie->res->sample_byte_sizes_offset && ci->id3->length / fit_numentries <= 3000)
|
||||
{
|
||||
qtmovie->res->sample_byte_sizes_offset = 0;
|
||||
DEBUGF("lookup_table seek accuracy %ld ms, ignoring sample_byte_sizes_offset \n", ci->id3->length / fit_numentries);
|
||||
}
|
||||
|
||||
/* Build up lookup table. The lookup table contains the sample index and
|
||||
* byte position in the file for each chunk. This table is used to seek
|
||||
* and resume (see m4a_seek() and m4a_seek_raw() in libm4a/m4a.c) and
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue