X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/fbf869934badff9e4eaa9bc9c97a1ef10ffb31ef..2a10b70b1cdbd55e9f2c26ed52dcff5255cd6e96:/lib/speaker-protocol.h diff --git a/lib/speaker-protocol.h b/lib/speaker-protocol.h index b7f27e7..8809f0f 100644 --- a/lib/speaker-protocol.h +++ b/lib/speaker-protocol.h @@ -24,8 +24,8 @@ * 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: