X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/6d2d327ca57fefaddceba10eb323451f8150e95d..0e2b222fc14b8f890fab644118cf0f43abbe450a:/lib/speaker-protocol.h diff --git a/lib/speaker-protocol.h b/lib/speaker-protocol.h index 8809f0f..55a016e 100644 --- a/lib/speaker-protocol.h +++ b/lib/speaker-protocol.h @@ -1,6 +1,6 @@ /* * This file is part of DisOrder - * Copyright (C) 2005, 2007 Richard Kettlewell + * Copyright (C) 2005, 2007, 2008 Richard Kettlewell * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,7 +32,6 @@ struct speaker_message { /** @brief Message type * * Messges from the main server: - * - @ref SM_PREPARE * - @ref SM_PLAY * - @ref SM_PAUSE * - @ref SM_RESUME @@ -43,6 +42,7 @@ struct speaker_message { * - @ref SM_PAUSED * - @ref SM_FINISHED * - @ref SM_PLAYING + * - @ref SM_UNKNOWN */ int type; @@ -54,12 +54,6 @@ struct speaker_message { }; /* messages from the main DisOrder server */ -/** @brief Prepare track @c id - * - * This message will include a file descriptor. The speaker starts buffering - * audio data read from this file against the time that it must be played. - */ -#define SM_PREPARE 0 /** @brief Play track @c id * @@ -90,22 +84,36 @@ struct speaker_message { /** @brief Finished playing track @c id */ #define SM_FINISHED 129 +/** @brief Never heard of track @c id */ +#define SM_UNKNOWN 130 + /** @brief Currently track @c id, @c data seconds in * * This is sent from time to time while a track is playing. */ #define SM_PLAYING 131 -void speaker_send(int fd, const struct speaker_message *sm, int datafd); -/* Send a message. DATAFD is passed too if not -1. Does not close DATAFD. */ +/** @brief Speaker process is ready + * + * This is sent once at startup when the speaker has finished its + * initialization. */ +#define SM_READY 132 + +/** @brief Cancelled track @c id which wasn't playing */ +#define SM_STILLBORN 133 + +void speaker_send(int fd, const struct speaker_message *sm); +/* Send a message. */ -int speaker_recv(int fd, struct speaker_message *sm, int *datafd); -/* Receive a message. If DATAFD is not null then can receive an FD. Return 0 - * on EOF, +ve if a message is read, -1 on EAGAIN, terminates on any other - * error. */ +int speaker_recv(int fd, struct speaker_message *sm); +/* Receive a message. Return 0 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 Number of bytes */ + uint32_t nbytes; + /** @brief Frames per second */ uint32_t rate; @@ -124,9 +132,6 @@ struct stream_header { #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,