aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-11-13 02:06:58 +0100
committerMax Kellermann <max@duempel.org>2008-11-13 02:06:58 +0100
commit66ce1495f07cd065346cdc2067b034e142a0fa96 (patch)
treeec22214c5fa70395b38310c0722db97b9f0c362c
parent998d9a822535e3cb88801487e95acef296cae9a3 (diff)
downloadmpd-66ce1495f07cd065346cdc2067b034e142a0fa96.tar.gz
mpd-66ce1495f07cd065346cdc2067b034e142a0fa96.tar.xz
mpd-66ce1495f07cd065346cdc2067b034e142a0fa96.zip
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.
Diffstat (limited to '')
-rw-r--r--src/pipe.c18
-rw-r--r--src/pipe.h5
-rw-r--r--src/player_thread.c6
3 files changed, 29 insertions, 0 deletions
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) {