aboutsummaryrefslogtreecommitdiffstats
path: root/src/inputPlugins/mp3_plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/inputPlugins/mp3_plugin.c')
-rw-r--r--src/inputPlugins/mp3_plugin.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/inputPlugins/mp3_plugin.c b/src/inputPlugins/mp3_plugin.c
index 2fbc61878..87fbfb49c 100644
--- a/src/inputPlugins/mp3_plugin.c
+++ b/src/inputPlugins/mp3_plugin.c
@@ -896,15 +896,24 @@ static int mp3Read(mp3DecodeData * data, struct decoder *decoder,
samplesLeft = (data->synth).pcm.length;
- for (i = 0; i < (data->synth).pcm.length; i++) {
+ if (!data->decodedFirstFrame) {
+ if (data->dropSamplesAtStart >= samplesLeft) {
+ i = samplesLeft;
+ samplesLeft = 0;
+ } else {
+ i = data->dropSamplesAtStart;
+ samplesLeft -= data->dropSamplesAtStart;
+ }
+ data->decodedFirstFrame = 1;
+ } else
+ i = 0;
+
+ for (; i < (data->synth).pcm.length; i++) {
mpd_sint16 *sample;
samplesLeft--;
- if (!data->decodedFirstFrame &&
- (i < data->dropSamplesAtStart)) {
- continue;
- } else if (data->dropSamplesAtEnd &&
+ if (data->dropSamplesAtEnd &&
(data->currentFrame == (data->maxFrames - data->dropFramesAtEnd)) &&
(samplesLeft < data->dropSamplesAtEnd)) {
/* stop decoding, effectively dropping
@@ -947,8 +956,6 @@ static int mp3Read(mp3DecodeData * data, struct decoder *decoder,
}
}
- data->decodedFirstFrame = 1;
-
if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK &&
data->inStream->seekable) {
long j = 0;