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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user