From 66ce1495f07cd065346cdc2067b034e142a0fa96 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 13 Nov 2008 02:06:58 +0100 Subject: music_pipe: continuously check the sample format of all chunks Provide a debug function which asserts on the sample format of all chunks. Call this function in each iteration of the player main loop. --- src/pipe.c | 18 ++++++++++++++++++ src/pipe.h | 5 +++++ src/player_thread.c | 6 ++++++ 3 files changed, 29 insertions(+) diff --git a/src/pipe.c b/src/pipe.c index c3551265e..7afbefcb1 100644 --- a/src/pipe.c +++ b/src/pipe.c @@ -300,3 +300,21 @@ void music_pipe_skip(unsigned num) while (music_pipe.begin != (unsigned)i) music_pipe_shift(); } + +#ifndef NDEBUG +void music_pipe_check_format(const struct audio_format *current, + int next_index, const struct audio_format *next) +{ + const struct audio_format *audio_format = current; + + for (unsigned i = music_pipe.begin; i != music_pipe.end; + i = successor(i)) { + const struct music_chunk *chunk = music_pipe_get_chunk(i); + + if (next_index > 0 && i == (unsigned)next_index) + audio_format = next; + + assert(chunk->length % audio_format_frame_size(audio_format) == 0); + } +} +#endif diff --git a/src/pipe.h b/src/pipe.h index f65e12d49..78389d062 100644 --- a/src/pipe.h +++ b/src/pipe.h @@ -164,4 +164,9 @@ bool music_pipe_tag(const struct tag *tag); void music_pipe_skip(unsigned num); +#ifndef NDEBUG +void music_pipe_check_format(const struct audio_format *current, + int next_index, const struct audio_format *next); +#endif + #endif diff --git a/src/player_thread.c b/src/player_thread.c index 21bb61da6..9a606d7d9 100644 --- a/src/player_thread.c +++ b/src/player_thread.c @@ -344,6 +344,12 @@ static void do_play(void) } } +#ifndef NDEBUG + music_pipe_check_format(&play_audio_format, + player.next_song_chunk, + &dc.out_audio_format); +#endif + if (decoder_is_idle() && !player.queued && pc.next_song != NULL && pc.command == PLAYER_COMMAND_NONE) { -- cgit v1.2.3