aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-08-26 08:27:12 +0200
committerMax Kellermann <max@duempel.org>2008-08-26 08:27:12 +0200
commit2e8bd3ae1d3ad9b3d4f6e59d90414a45414a96f7 (patch)
tree4bdcd812f2efb8218c8dd1bcfbf7bc83c4c90820 /src
parentaf83ac5ec6c29be8b95513ad65dace6cecab617a (diff)
downloadmpd-2e8bd3ae1d3ad9b3d4f6e59d90414a45414a96f7.tar.gz
mpd-2e8bd3ae1d3ad9b3d4f6e59d90414a45414a96f7.tar.xz
mpd-2e8bd3ae1d3ad9b3d4f6e59d90414a45414a96f7.zip
mp3: always flush directly after decoding/dithering
Since we try to fill the buffer in every iteration, we assume that we should flush the output buffer at the end of each iteration.
Diffstat (limited to 'src')
-rw-r--r--src/inputPlugins/mp3_plugin.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/inputPlugins/mp3_plugin.c b/src/inputPlugins/mp3_plugin.c
index 0a99cab21..27f26db67 100644
--- a/src/inputPlugins/mp3_plugin.c
+++ b/src/inputPlugins/mp3_plugin.c
@@ -933,6 +933,7 @@ static int mp3Read(mp3DecodeData * data, struct decoder *decoder,
}
while (i < pcm_length) {
+ enum decoder_command cmd;
unsigned int num_samples =
(data->outputBufferEnd - data->outputPtr) /
(2 * MAD_NCHANNELS(&(data->frame).header));
@@ -947,22 +948,19 @@ static int mp3Read(mp3DecodeData * data, struct decoder *decoder,
MAD_NCHANNELS(&(data->frame).header));
data->outputPtr += 2 * num_samples;
- if (data->outputPtr >= data->outputBufferEnd) {
- enum decoder_command cmd;
- cmd = decoder_data(decoder, data->inStream,
- data->inStream->seekable,
- data->outputBuffer,
- data->outputPtr - data->outputBuffer,
- data->elapsedTime,
- data->bitRate / 1000,
- (replayGainInfo != NULL) ? *replayGainInfo : NULL);
- if (cmd == DECODE_COMMAND_STOP) {
- data->flush = 0;
- return DECODE_BREAK;
- }
-
- data->outputPtr = data->outputBuffer;
+ cmd = decoder_data(decoder, data->inStream,
+ data->inStream->seekable,
+ data->outputBuffer,
+ data->outputPtr - data->outputBuffer,
+ data->elapsedTime,
+ data->bitRate / 1000,
+ (replayGainInfo != NULL) ? *replayGainInfo : NULL);
+ if (cmd == DECODE_COMMAND_STOP) {
+ data->flush = 0;
+ return DECODE_BREAK;
}
+
+ data->outputPtr = data->outputBuffer;
}
if (data->dropSamplesAtEnd &&