mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
Fix MP3 VBR seek jumps in wrong direction for long files
Fix jumps in the wrong direction by seeking relative to the current position Change-Id: I5ca3d5bcb256dd8fb1cd17e6149878190571d359
This commit is contained in:
parent
8a22660770
commit
3883c978ab
1 changed files with 10 additions and 2 deletions
|
@ -192,12 +192,20 @@ static int get_file_pos(int newtime)
|
|||
pos = cur_toc * toc_sizestep;
|
||||
|
||||
/* Interpolate between this TOC mark and the next TOC mark */
|
||||
newtime -= percent * pct_timestep;
|
||||
pos += (uint64_t)plength * newtime / pct_timestep;
|
||||
int newtime_toc = newtime - percent * pct_timestep;
|
||||
pos += (uint64_t)plength * newtime_toc / pct_timestep;
|
||||
} else {
|
||||
/* No TOC exists, estimate the new position */
|
||||
pos = (uint64_t)newtime * id3->filesize / id3->length;
|
||||
}
|
||||
// VBR seek might be very inaccurate in long files
|
||||
// So make sure that seeking actually happened in the intended direction
|
||||
// Fix jumps in the wrong direction by seeking relative to the current position
|
||||
long delta = id3->elapsed - newtime;
|
||||
if ((delta >= 0 && pos > ci->curpos) || (delta < 0 && pos < ci->curpos))
|
||||
{
|
||||
pos = ci->curpos - delta * id3->filesize / id3->length;
|
||||
}
|
||||
} else if (id3->bitrate) {
|
||||
pos = newtime * (id3->bitrate / 8);
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue