When we introduced decoder_read(), we added code which aborts the read
operation when a decoder command arrives.  Several plugins however did
not expect that when they were converted to decoder_read().  Add
proper checks to the mp3 and flac decoder plugins.
---

 src/inputPlugins/flac_plugin.c |    9 ++++++---
 src/inputPlugins/mp3_plugin.c  |   11 ++++++++++-
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/inputPlugins/flac_plugin.c b/src/inputPlugins/flac_plugin.c
index 06994d3..c90ff21 100644
--- a/src/inputPlugins/flac_plugin.c
+++ b/src/inputPlugins/flac_plugin.c
@@ -42,6 +42,10 @@ static flac_read_status flacRead(mpd_unused const 
flac_decoder * flacDec,
                else
                        return flac_read_status_abort;
        }
+
+       if (r == 0 && decoder_get_command(data->decoder) == DECODE_COMMAND_SEEK)
+               return flac_read_status_eof;
+
        return flac_read_status_continue;
 }
 
@@ -413,8 +417,6 @@ static int flac_decode_internal(struct decoder * decoder,
        while (1) {
                if (!flac_process_single(flacDec))
                        break;
-               if (flac_get_state(flacDec) == flac_decoder_eof)
-                       break;
                if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK) {
                        FLAC__uint64 sampleToSeek = decoder_seek_where(decoder) 
*
                            data.audio_format.sampleRate + 0.5;
@@ -426,7 +428,8 @@ static int flac_decode_internal(struct decoder * decoder,
                                decoder_command_finished(decoder);
                        } else
                                decoder_seek_error(decoder);
-               }
+               } else if (flac_get_state(flacDec) == flac_decoder_eof)
+                       break;
        }
        if (decoder_get_command(decoder) != DECODE_COMMAND_STOP) {
                flacPrintErroredState(flac_get_state(flacDec));
diff --git a/src/inputPlugins/mp3_plugin.c b/src/inputPlugins/mp3_plugin.c
index 9b22dc7..c836a7a 100644
--- a/src/inputPlugins/mp3_plugin.c
+++ b/src/inputPlugins/mp3_plugin.c
@@ -1006,9 +1006,18 @@ mp3Read(mp3DecodeData * data, ReplayGainInfo ** 
replayGainInfo)
                        break;
        }
 
-       if (decoder_get_command(decoder) != DECODE_COMMAND_NONE)
+       switch (decoder_get_command(decoder)) {
+       case DECODE_COMMAND_NONE:
+       case DECODE_COMMAND_START:
+               break;
+
+       case DECODE_COMMAND_STOP:
                return DECODE_BREAK;
 
+       case DECODE_COMMAND_SEEK:
+               return DECODE_CONT;
+       }
+
        return ret;
 }
 


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Musicpd-dev-team mailing list
Musicpd-dev-team@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team

Reply via email to