diff data/fileio/MP3FileReader.cpp @ 1310:aa1b1fc2d018 mp3-gapless

Stop reporting sync errors only when we really are at eof, i.e. after the input callback has been called again (previously we just tested whether we'd buffered up all the input, which of course we do in one go at the start)
author Chris Cannam
date Tue, 29 Nov 2016 16:45:29 +0000
parents c84629395040
children 079e553dc16e
line wrap: on
line diff
--- a/data/fileio/MP3FileReader.cpp	Tue Nov 29 14:35:27 2016 +0000
+++ b/data/fileio/MP3FileReader.cpp	Tue Nov 29 16:45:29 2016 +0000
@@ -317,6 +317,7 @@
 
     data.start = (unsigned char const *)mm;
     data.length = sz;
+    data.finished = false;
     data.reader = this;
 
     mad_decoder_init(&decoder,          // decoder to initialise
@@ -343,7 +344,10 @@
 {
     DecoderData *data = (DecoderData *)dp;
 
-    if (!data->length) return MAD_FLOW_STOP;
+    if (!data->length) {
+        data->finished = true;
+        return MAD_FLOW_STOP;
+    }
 
     unsigned char const *start = data->start;
     sv_frame_t length = data->length;
@@ -569,8 +573,9 @@
     DecoderData *data = (DecoderData *)dp;
 
     if (stream->error == MAD_ERROR_LOSTSYNC &&
-        data->length == 0) {
-        // We are at end of file, losing sync is expected behaviour
+        data->finished) {
+        // We are at end of file, losing sync is expected behaviour,
+        // don't report it
         return MAD_FLOW_CONTINUE;
     }