diff options
Diffstat (limited to 'src/decode.c')
-rw-r--r-- | src/decode.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/decode.c b/src/decode.c index 2d4b137f5..656b7313a 100644 --- a/src/decode.c +++ b/src/decode.c @@ -481,10 +481,10 @@ static void advanceOutputBufferTo(OutputBuffer * cb, PlayerControl * pc, while (cb->begin != to) { handleMetadata(cb, pc, previous, currentChunkSent, currentChunk); - cb->begin++; - if (cb->begin >= buffered_chunks) { + if (cb->begin + 1 >= buffered_chunks) { cb->begin = 0; } + else cb->begin++; } } @@ -517,7 +517,8 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * pc->play = 0; kill(getppid(), SIGUSR1); - while (decode_pid > 0 && cb->end - cb->begin < bbp && + while (decode_pid > 0 && + cb->end - cb->begin < bbp && cb->end != buffered_chunks - 1 && dc->state != DECODE_STATE_STOP) { processDecodeInput(); @@ -618,10 +619,10 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * cb->begin = 0; } else cb->begin++; - } else if (next == cb->begin) { + } else if (cb->begin != end && cb->begin == next) { if (doCrossFade == 1 && nextChunk >= 0) { nextChunk = cb->begin + crossFadeChunks; - test = cb->end; + test = end; if (end < cb->begin) test += buffered_chunks; if (nextChunk < test) { |