summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/flac.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rbcodec/codecs/flac.c')
-rw-r--r--lib/rbcodec/codecs/flac.c16
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 */