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
[email protected]
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team