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.
This commit is contained in:
Max Kellermann 2011-01-07 23:45:51 +01:00
parent 5f06999686
commit 2a56300f7b
2 changed files with 14 additions and 0 deletions

1
NEWS
View File

@ -8,6 +8,7 @@ ver 0.16.1 (2010/??/??)
* output: * output:
- solaris: add missing parameter to open_cloexec() cal - solaris: add missing parameter to open_cloexec() cal
- osx: fix up audio format first, then apply it to device - 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 * player_thread: fix assertion failure due to early seek
* output_thread: fix double lock * output_thread: fix double lock

View File

@ -685,6 +685,19 @@ play_next_chunk(struct player *player)
chunk->mix_ratio = nan(""); 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; chunk->other = other_chunk;
} else { } else {
/* there are not enough decoded chunks yet */ /* there are not enough decoded chunks yet */