From 2a56300f7bad00860f5ff44dfea061386173a852 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Fri, 7 Jan 2011 23:45:51 +0100
Subject: 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 */
-- 
cgit v1.2.3