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 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/inputPlugins/mp3_plugin.c b/src/inputPlugins/mp3_plugin.c
index 2fbc618..87fbfb4 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;


-------------------------------------------------------------------------
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