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.
This commit is contained in:
Max Kellermann 2009-03-12 19:49:15 +01:00
parent e3b9b57ecd
commit 6352e75910

View File

@ -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,
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);