player_thread: move cross-fading to output thread

Remove cross_fade_apply(), and call pcm_mix() in the output thread,
mixing the chunk and chunk->other together.
This commit is contained in:
Max Kellermann
2010-05-02 15:31:31 +02:00
parent d093fb2441
commit 5399a72ec1
8 changed files with 50 additions and 65 deletions

View File

@@ -131,46 +131,3 @@ unsigned cross_fade_calc(float duration, float total_time,
return chunks;
}
void cross_fade_apply(struct music_chunk *a, const struct music_chunk *b,
const struct audio_format *format,
float mix_ratio)
{
size_t size;
assert(a != NULL);
assert(b != NULL);
assert(a->length == 0 || b->length == 0 ||
audio_format_equals(&a->audio_format, &b->audio_format));
if (a->tag == NULL && b->tag != NULL)
/* merge the tag into the destination chunk */
a->tag = tag_dup(b->tag);
size = b->length > a->length
? a->length
: b->length;
pcm_mix(a->data,
b->data,
size,
format,
mix_ratio);
if (b->length > a->length) {
/* the second buffer is larger than the first one:
there is unmixed rest at the end. Copy it over.
The output buffer API guarantees that there is
enough room in a->data. */
#ifndef NDEBUG
if (a->length == 0)
a->audio_format = b->audio_format;
#endif
memcpy(a->data + a->length,
b->data + a->length,
b->length - a->length);
a->length = b->length;
}
}