Commit 9760325e authored by Max Kellermann's avatar Max Kellermann Committed by Eric Wong

moved code to crossFade()

Calling crossFade() with the chunk objects is easier than unrolling all the chunk properties manually, and decodeParent() can really use more of these simplifications. git-svn-id: https://svn.musicpd.org/mpd/trunk@7271 09075e82-0dd4-0310-85a5-a0d7c8717e4f
parent bc20b643
......@@ -359,6 +359,21 @@ static void advanceOutputBufferTo(OutputBuffer * cb, int to)
cb->begin = to;
}
static void crossFade(OutputBufferChunk * a, OutputBufferChunk * b,
AudioFormat * format,
int fadePosition, int crossFadeChunks)
{
pcm_mix(a->data,
b->data,
a->chunkSize,
b->chunkSize,
format,
((float)fadePosition) /
crossFadeChunks);
if (b->chunkSize > a->chunkSize)
a->chunkSize = b->chunkSize;
}
static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * cb)
{
int pause = 0;
......@@ -508,21 +523,11 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer *
}
nextChunk = outputBufferAbsolute(cb, crossFadeChunks);
if (nextChunk >= 0) {
OutputBufferChunk *fadeChunk =
outputBufferGetChunk(cb, nextChunk);
pcm_mix(beginChunk->data,
fadeChunk->data,
beginChunk->chunkSize,
fadeChunk->chunkSize,
&(cb->audioFormat),
((float)fadePosition) /
crossFadeChunks);
if (fadeChunk->chunkSize >
beginChunk->chunkSize
) {
beginChunk->chunkSize
= fadeChunk->chunkSize;
}
crossFade(beginChunk,
outputBufferGetChunk(cb, nextChunk),
&(cb->audioFormat),
fadePosition,
crossFadeChunks);
} else {
/* there are not enough
decoded chunks yet */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment