diff options
author | Max Kellermann <max@duempel.org> | 2014-09-18 13:50:23 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-09-18 13:50:23 +0200 |
commit | b6fa22bd84b6f60bb73bec99a1182832b761542b (patch) | |
tree | 84b6b610f2bc7586e1b7f2d104f0b8e4dc8d77a5 | |
parent | a0ef27a0cd97d53f89def5ed5c94250b92cbd587 (diff) | |
download | mpd-b6fa22bd84b6f60bb73bec99a1182832b761542b.tar.gz mpd-b6fa22bd84b6f60bb73bec99a1182832b761542b.tar.xz mpd-b6fa22bd84b6f60bb73bec99a1182832b761542b.zip |
OutputThread: retain negative mix ratio
Fixes MixRamp breakage.
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | src/OutputThread.cxx | 11 |
2 files changed, 11 insertions, 1 deletions
@@ -1,6 +1,7 @@ ver 0.18.15 (not yet released) * command - list: reset used size after the list has been processed +* fix MixRamp * work around build failure on NetBSD ver 0.18.14 (2014/09/11) diff --git a/src/OutputThread.cxx b/src/OutputThread.cxx index 30d3ba30f..b96ba4efd 100644 --- a/src/OutputThread.cxx +++ b/src/OutputThread.cxx @@ -385,11 +385,20 @@ ao_filter_chunk(struct audio_output *ao, const struct music_chunk *chunk, if (length > other_length) length = other_length; + float mix_ratio = chunk->mix_ratio; + if (mix_ratio >= 0) + /* reverse the mix ratio (because the + arguments to pcm_mix() are reversed), but + only if the mix ratio is non-negative; a + negative mix ratio is a MixRamp special + case */ + mix_ratio = 1.0 - mix_ratio; + void *dest = ao->cross_fade_buffer.Get(other_length); memcpy(dest, other_data, other_length); if (!pcm_mix(dest, data, length, ao->in_audio_format.format, - 1.0 - chunk->mix_ratio)) { + mix_ratio)) { FormatError(output_domain, "Cannot cross-fade format %s", sample_format_to_string(ao->in_audio_format.format)); |