1. Update the playlist index when starting the list (fixes invalid track num when playing from directory). 2. Estimate new position when ffw/rew VBR file with no TOC (eg. tracks recorded with AJBR).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2308 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
d96b78b5a5
commit
aa287bb8cc
1 changed files with 31 additions and 22 deletions
|
@ -815,6 +815,7 @@ static void mpeg_thread(void)
|
||||||
paused = false;
|
paused = false;
|
||||||
|
|
||||||
current_track_counter++;
|
current_track_counter++;
|
||||||
|
update_playlist();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MPEG_STOP:
|
case MPEG_STOP:
|
||||||
|
@ -954,30 +955,38 @@ static void mpeg_thread(void)
|
||||||
|
|
||||||
id3->elapsed = newtime;
|
id3->elapsed = newtime;
|
||||||
|
|
||||||
if (id3->vbr && (id3->vbrflags & VBR_TOC_FLAG))
|
if (id3->vbr)
|
||||||
{
|
{
|
||||||
/* Use the TOC to find the new position */
|
if (id3->vbrflags & VBR_TOC_FLAG)
|
||||||
unsigned int percent, remainder;
|
{
|
||||||
int curtoc, nexttoc, plen;
|
/* Use the TOC to find the new position */
|
||||||
|
unsigned int percent, remainder;
|
||||||
|
int curtoc, nexttoc, plen;
|
||||||
|
|
||||||
percent = (newtime*100)/id3->length;
|
percent = (newtime*100)/id3->length;
|
||||||
if (percent > 99)
|
if (percent > 99)
|
||||||
percent = 99;
|
percent = 99;
|
||||||
|
|
||||||
curtoc = id3->toc[percent];
|
curtoc = id3->toc[percent];
|
||||||
|
|
||||||
if (percent < 99)
|
if (percent < 99)
|
||||||
nexttoc = id3->toc[percent+1];
|
nexttoc = id3->toc[percent+1];
|
||||||
|
else
|
||||||
|
nexttoc = 256;
|
||||||
|
|
||||||
|
newpos = (id3->filesize/256)*curtoc;
|
||||||
|
|
||||||
|
/* Use the remainder to get a more accurate position */
|
||||||
|
remainder = (newtime*100)%id3->length;
|
||||||
|
remainder = (remainder*100)/id3->length;
|
||||||
|
plen = (nexttoc - curtoc)*(id3->filesize/256);
|
||||||
|
newpos += (plen/100)*remainder;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
nexttoc = 256;
|
{
|
||||||
|
/* No TOC exists, estimate the new position */
|
||||||
newpos = (id3->filesize/256)*curtoc;
|
newpos = (id3->filesize/id3->length)*newtime;
|
||||||
|
}
|
||||||
/* Use the remainder to get a more accurate position */
|
|
||||||
remainder = (newtime*100)%id3->length;
|
|
||||||
remainder = (remainder*100)/id3->length;
|
|
||||||
plen = (nexttoc - curtoc)*(id3->filesize/256);
|
|
||||||
newpos += (plen/100)*remainder;
|
|
||||||
}
|
}
|
||||||
else if (id3->bpf && id3->tpf)
|
else if (id3->bpf && id3->tpf)
|
||||||
newpos = (newtime/id3->tpf)*id3->bpf;
|
newpos = (newtime/id3->tpf)*id3->bpf;
|
||||||
|
|
Loading…
Reference in a new issue