1/*
2 * Copyright 2002 David Shipman,
3 * Copyright 2003-2007 Marcus Overhagen
4 * Copyright 2007 Haiku Inc. All rights reserved.
5 * Distributed under the terms of the MIT License.
6 */
7#ifndef _MIXER_DEBUG_H_
8#define _MIXER_DEBUG_H_
9
10
11#ifndef DEBUG
12#	define DEBUG 0
13#endif
14
15#include <Debug.h>
16#include <stdio.h>
17
18
19#undef TRACE
20#undef PRINT
21
22
23#if DEBUG > 0
24  inline void ERROR(const char *fmt, ...) { va_list ap; va_start(ap, fmt); printf("### ERROR: "); vprintf(fmt, ap); va_end(ap); }
25  inline void PRINT(int level, const char *fmt, ...) { va_list ap; if (level > DEBUG) return; va_start(ap, fmt); vprintf(fmt, ap); va_end(ap); }
26
27#	define PRINT_FORMAT(_text, _fmt)	do { char _buf[300]; string_for_format((_fmt), _buf, sizeof(_buf)); printf("%s %s\n", (_text), (_buf)); } while (0)
28#	define PRINT_INPUT(_text, _in)		do { char _buf[300]; string_for_format((_in).format, _buf, sizeof(_buf)); printf("%s node(node %" B_PRId32 ", port %" B_PRId32 "); source(port %" B_PRId32 ", id %" B_PRId32 "); dest(port %" B_PRId32 ", id %" B_PRId32 "); fmt(%s); name(%s)\n", (_text), (_in).node.node, (_in).node.port, (_in).source.port, (_in).source.id, (_in).destination.port, (_in).destination.id, _buf, (_in).name); } while (0)
29#	define PRINT_OUTPUT(_text, _out)	do { char _buf[300]; string_for_format((_out).format, _buf, sizeof(_buf)); printf("%s node(node %" B_PRId32 ", port %" B_PRId32 "); source(port %" B_PRId32 ", id %" B_PRId32 "); dest(port %" B_PRId32 ", id %" B_PRId32 "); fmt(%s); name(%s)\n", (_text), (_out).node.node, (_out).node.port, (_out).source.port, (_out).source.id, (_out).destination.port, (_out).destination.id, _buf, (_out).name); } while (0)
30#	define PRINT_CHANNEL_MASK(fmt)		do { char s[200]; StringForChannelMask(s, (fmt).u.raw_audio.channel_mask); printf(" channel_mask 0x%08" B_PRIX32 " %s\n", (fmt).u.raw_audio.channel_mask, s); } while (0)
31
32#	if DEBUG >= 2
33#		define TRACE 				printf
34#	else
35#		define TRACE(a...)			((void)0)
36#	endif
37#else
38#	define PRINT_FORMAT(_text, _fmt)	((void)0)
39#	define PRINT_INPUT(_text, _in)		((void)0)
40#	define PRINT_OUTPUT(_text, _out)	((void)0)
41#	define PRINT_CHANNEL_MASK(fmt)		((void)0)
42#	define PRINT(l, a...)				((void)0)
43#	define ERROR(a...)					((void)0)
44#	define TRACE(a...)					((void)0)
45#endif
46
47#endif /* _MIXER_DEBUG_H_ */
48