diff options
Diffstat (limited to 'lib/rbcodec/codecs/flac.c')
-rw-r--r-- | lib/rbcodec/codecs/flac.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/rbcodec/codecs/flac.c b/lib/rbcodec/codecs/flac.c index 3390c24a2c..eab6e7c2bc 100644 --- a/lib/rbcodec/codecs/flac.c +++ b/lib/rbcodec/codecs/flac.c | |||
@@ -468,7 +468,8 @@ enum codec_status codec_run(void) | |||
468 | return CODEC_ERROR; | 468 | return CODEC_ERROR; |
469 | } | 469 | } |
470 | 470 | ||
471 | /* Need to save offset for later use (cleared indirectly by flac_init) */ | 471 | /* Need to save resume for later use (cleared indirectly by flac_init) */ |
472 | elapsedtime = ci->id3->elapsed; | ||
472 | samplesdone = ci->id3->offset; | 473 | samplesdone = ci->id3->offset; |
473 | 474 | ||
474 | if (!flac_init(&fc,ci->id3->first_frame_offset)) { | 475 | if (!flac_init(&fc,ci->id3->first_frame_offset)) { |
@@ -481,9 +482,16 @@ enum codec_status codec_run(void) | |||
481 | STEREO_MONO : STEREO_NONINTERLEAVED); | 482 | STEREO_MONO : STEREO_NONINTERLEAVED); |
482 | codec_set_replaygain(ci->id3); | 483 | codec_set_replaygain(ci->id3); |
483 | 484 | ||
484 | flac_seek_offset(&fc, samplesdone); | 485 | if (samplesdone || !elapsedtime) { |
485 | samplesdone=fc.samplenumber+fc.blocksize; | 486 | flac_seek_offset(&fc, samplesdone); |
486 | elapsedtime=((uint64_t)samplesdone*1000)/(ci->id3->frequency); | 487 | samplesdone=fc.samplenumber+fc.blocksize; |
488 | elapsedtime=((uint64_t)samplesdone*1000)/(ci->id3->frequency); | ||
489 | } | ||
490 | else if (!flac_seek(&fc,(uint32_t)((uint64_t)elapsedtime | ||
491 | *ci->id3->frequency/1000))) { | ||
492 | elapsedtime = 0; | ||
493 | } | ||
494 | |||
487 | ci->set_elapsed(elapsedtime); | 495 | ci->set_elapsed(elapsedtime); |
488 | 496 | ||
489 | /* The main decoding loop */ | 497 | /* The main decoding loop */ |