Commit 6352e759 authored by Max Kellermann's avatar Max Kellermann

crossfade: copy chunk.audio_format in !NDEBUG

When the destination chunk was empty in cross_fade_apply(), it had no audio_format attached (an attribute which is only used for assertion in the debug build). cross_fade_apply() should assign it the audio_format of the second chunk (if available), otherwise MPD will crash.
parent e3b9b57e
...@@ -58,6 +58,10 @@ void cross_fade_apply(struct music_chunk *a, const struct music_chunk *b, ...@@ -58,6 +58,10 @@ void cross_fade_apply(struct music_chunk *a, const struct music_chunk *b,
{ {
size_t size; 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));
assert(current_chunk <= num_chunks); assert(current_chunk <= num_chunks);
if (a->tag == NULL && b->tag != NULL) if (a->tag == NULL && b->tag != NULL)
...@@ -79,6 +83,12 @@ void cross_fade_apply(struct music_chunk *a, const struct music_chunk *b, ...@@ -79,6 +83,12 @@ void cross_fade_apply(struct music_chunk *a, const struct music_chunk *b,
there is unmixed rest at the end. Copy it over. there is unmixed rest at the end. Copy it over.
The output buffer API guarantees that there is The output buffer API guarantees that there is
enough room in a->data. */ enough room in a->data. */
#ifndef NDEBUG
if (a->length == 0)
a->audio_format = b->audio_format;
#endif
memcpy(a->data + a->length, memcpy(a->data + a->length,
b->data + a->length, b->data + a->length,
b->length - a->length); b->length - a->length);
......
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