moved check to outputBufferAbsolute()

decoderParent() uses a lot of OutputBuffer internals to see whether
cross-fading should be started.  Move these checks to outputBuffer.c,
which also simplifies decoderParent().

git-svn-id: https://svn.musicpd.org/mpd/trunk@7262 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Max Kellermann
2008-04-12 04:12:42 +00:00
committed by Eric Wong
parent a546428263
commit e626028b41
3 changed files with 27 additions and 17 deletions

View File

@@ -503,7 +503,6 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer *
(fadePosition = next - cb->begin +
buffered_chunks) <= crossFadeChunks))) {
/* perform cross fade */
unsigned int test = end;
if (nextChunk < 0) {
/* beginning of the cross fade
- adjust crossFadeChunks
@@ -512,13 +511,8 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer *
chunks in the old song */
crossFadeChunks = fadePosition;
}
if (end < cb->begin)
test += buffered_chunks;
nextChunk = cb->begin + crossFadeChunks;
if ((unsigned)nextChunk < test) {
if ((unsigned)nextChunk >= buffered_chunks) {
nextChunk -= buffered_chunks;
}
nextChunk = outputBufferAbsolute(cb, crossFadeChunks);
if (nextChunk >= 0) {
pcm_mix(cb->chunks +
cb->begin * CHUNK_SIZE,
cb->chunks +
@@ -575,16 +569,9 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer *
/* the cross-fade is finished; skip
the section which was cross-faded
(and thus already played) */
unsigned int test = end;
nextChunk = cb->begin + crossFadeChunks;
if (end < cb->begin)
test += buffered_chunks;
if ((unsigned)nextChunk < test) {
if ((unsigned)nextChunk >= buffered_chunks) {
nextChunk -= buffered_chunks;
}
nextChunk = outputBufferAbsolute(cb, crossFadeChunks);
if (nextChunk >= 0)
advanceOutputBufferTo(cb, nextChunk);
}
}
/* wait for the decoder to work on the new song */