X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=platform%2Fcommon%2Fmp3.c;h=b2bcaf40daf953b3ec19b6421db4d6e7601e31c1;hb=9a1f192a146e9b9752ec1a760745b1261fe9bdec;hp=25c5c9289032bdb046033f64d73d0e0b4db72e00;hpb=8e5639bc3da6c24c45620505a2bf3533478b1e60;p=picodrive.git diff --git a/platform/common/mp3.c b/platform/common/mp3.c index 25c5c92..b2bcaf4 100644 --- a/platform/common/mp3.c +++ b/platform/common/mp3.c @@ -104,7 +104,7 @@ out: return retval; } -void mp3_start_play(void *f_, int pos) +void mp3_start_play(void *f_, int pos1024) { unsigned char buf[2048]; FILE *f = f_; @@ -118,13 +118,6 @@ void mp3_start_play(void *f_, int pos) if (!(PicoOpt & POPT_EN_MCD_CDDA) || f == NULL) // cdda disabled or no file? return; - ret = mp3dec_start(); - if (ret != 0) - return; - - decoder_active = 1; - - mp3_current_file = f; fseek(f, 0, SEEK_END); mp3_file_len = ftell(f); @@ -145,12 +138,20 @@ void mp3_start_play(void *f_, int pos) } // seek.. - if (pos) { + if (pos1024 != 0) { unsigned long long pos64 = mp3_file_len - mp3_file_pos; - pos64 *= pos; + pos64 *= pos1024; mp3_file_pos += pos64 >> 10; } + ret = mp3dec_start(f, mp3_file_pos); + if (ret != 0) { + return; + } + + mp3_current_file = f; + decoder_active = 1; + mp3dec_decode(mp3_current_file, &mp3_file_pos, mp3_file_len); } @@ -183,8 +184,9 @@ void mp3_update(int *buffer, int length, int stereo) } else { int ret, left = 1152 - cdda_out_pos; - mix_samples(buffer, cdda_out_buffer + cdda_out_pos * 2, - (left >> shr) * 2); + if (left > 0) + mix_samples(buffer, cdda_out_buffer + cdda_out_pos * 2, + (left >> shr) * 2); ret = mp3dec_decode(mp3_current_file, &mp3_file_pos, mp3_file_len);