From d9583aa95b93899cb2b946df11f7220b68723e6f Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 26 Aug 2008 08:27:12 +0200 Subject: mp3: don't check dropSamplesAtStart in the loop Performance improvement by moving stuff out of a loop: skip part of the first frame before entering the loop. --- src/inputPlugins/mp3_plugin.c | 21 ++++++++++++++------- 1 file 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; -- cgit v1.2.3