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:
Hardeep Sidhu 2002-09-17 07:04:43 +00:00
parent d96b78b5a5
commit aa287bb8cc

View file

@ -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;