From 2a56300f7bad00860f5ff44dfea061386173a852 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 7 Jan 2011 23:45:51 +0100 Subject: [PATCH] player_thread: discard empty chunks while cross-fading When a music_chunk to be crossfaded consists only of a tag, cross-fading is not possible, and led to an assertion failure. This patch just discards those, as if cross-fading was not enabled. --- NEWS | 1 + src/player_thread.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/NEWS b/NEWS index bc50c1c63..b07a0de25 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,7 @@ ver 0.16.1 (2010/??/??) * output: - solaris: add missing parameter to open_cloexec() cal - osx: fix up audio format first, then apply it to device +* player_thread: discard empty chunks while cross-fading * player_thread: fix assertion failure due to early seek * output_thread: fix double lock diff --git a/src/player_thread.c b/src/player_thread.c index 776d6667f..cce51c1a7 100644 --- a/src/player_thread.c +++ b/src/player_thread.c @@ -685,6 +685,19 @@ play_next_chunk(struct player *player) chunk->mix_ratio = nan(""); } + if (music_chunk_is_empty(other_chunk)) { + /* the "other" chunk was a music_chunk + which had only a tag, but no music + data - we cannot cross-fade that; + but since this happens only at the + beginning of the new song, we can + easily recover by throwing it away + now */ + music_buffer_return(player_buffer, + other_chunk); + other_chunk = NULL; + } + chunk->other = other_chunk; } else { /* there are not enough decoded chunks yet */