From b89b019723ae0a3df4a162a08574b6fe5982ccdd Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 12 Apr 2008 04:12:31 +0000 Subject: moved the initial buffering code into the big loop Eliminating some duplicated and. This also decreases the number of lines calling processDecodeInput(). git-svn-id: https://svn.musicpd.org/mpd/trunk@7260 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/decode.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/decode.c b/src/decode.c index a5486e4e4..59419ed1b 100644 --- a/src/decode.c +++ b/src/decode.c @@ -365,6 +365,7 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * { int pause = 0; int quit = 0; + int buffering = 1; unsigned int bbp = buffered_before_play; /** cross fading enabled for the current song? 0=must check; 1=enabled; -1=disabled */ @@ -390,8 +391,7 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * pc->play = 0; wakeup_main_task(); - while (availableOutputBuffer(cb) < bbp && - dc->state != DECODE_STATE_STOP) { + while (!quit) { processDecodeInput(pc, dc, cb, &pause, &bbp, &doCrossFade, &nextChunk, &decodeWaitedOn, &next); @@ -401,17 +401,14 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * return; } - player_sleep(); - } - - while (!quit) { - processDecodeInput(pc, dc, cb, - &pause, &bbp, &doCrossFade, - &nextChunk, &decodeWaitedOn, &next); - if (pc->stop) { - dropBufferedAudio(); - quitDecode(pc,dc); - return; + if (buffering) { + if (availableOutputBuffer(cb) < bbp) { + /* not enough decoded buffer space yet */ + player_sleep(); + continue; + } else + /* buffering is complete */ + buffering = 0; } if (decodeWaitedOn) { -- cgit v1.2.3