X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/ea410ba1d3b06ba6f60305c7d31369da134906dd..2a10b70b1cdbd55e9f2c26ed52dcff5255cd6e96:/lib/speaker-protocol.h diff --git a/lib/speaker-protocol.h b/lib/speaker-protocol.h index 2002d0b..8809f0f 100644 --- a/lib/speaker-protocol.h +++ b/lib/speaker-protocol.h @@ -17,15 +17,15 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ -/** @file lib/speaker-protocol.c +/** @file lib/speaker-protocol.h * @brief Speaker/server protocol support * * This file defines the protocol by which the main server and the speaker * process communicate. */ -#ifndef SPEAKER_H -#define SPEAKER_H +#ifndef SPEAKER_PROTOCOL_H +#define SPEAKER_PROTOCOL_H /** @brief A message from the main server to the speaker, or vica versa */ struct speaker_message { @@ -104,7 +104,40 @@ int speaker_recv(int fd, struct speaker_message *sm, int *datafd); * on EOF, +ve if a message is read, -1 on EAGAIN, terminates on any other * error. */ -#endif /* SPEAKER_H */ +/** @brief One chunk in a stream */ +struct stream_header { + /** @brief Frames per second */ + uint32_t rate; + + /** @brief Samples per frames */ + uint8_t channels; + + /** @brief Bits per sample */ + uint8_t bits; + + /** @brief Endianness */ + uint8_t endian; +#define ENDIAN_BIG 1 +#define ENDIAN_LITTLE 2 +#ifdef WORDS_BIGENDIAN +# define ENDIAN_NATIVE ENDIAN_BIG +#else +# define ENDIAN_NATIVE ENDIAN_LITTLE +#endif + + /** @brief Number of bytes */ + uint32_t nbytes; +} attribute((packed)); + +static inline int formats_equal(const struct stream_header *a, + const struct stream_header *b) { + return (a->rate == b->rate + && a->channels == b->channels + && a->bits == b->bits + && a->endian == b->endian); +} + +#endif /* SPEAKER_PROTOCOL_H */ /* Local Variables: