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