aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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 684655f97..11d543199 100644
--- a/src/inputPlugins/mp3_plugin.c
+++ b/src/inputPlugins/mp3_plugin.c
@@ -921,15 +921,24 @@ static int mp3Read(mp3DecodeData * data, ReplayGainInfo ** replayGainInfo)
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
@@ -972,8 +981,6 @@ static int mp3Read(mp3DecodeData * data, ReplayGainInfo ** replayGainInfo)
}
}
- data->decodedFirstFrame = 1;
-
if (dc_seek()) {
if (data->inStream->seekable)
mp3Read_seek(data);