chiark / gitweb /
More careful testing of scratching, and correctly handle the case
[disorder] / lib / speaker-protocol.h
index b271373a1a129066cc5b4f5f2c54ebc8935eb4ef..520a0c6d4ba3369fad952acaa003a2ae7fbbda8a 100644 (file)
@@ -42,6 +42,7 @@ struct speaker_message {
    * - @ref SM_PAUSED
    * - @ref SM_FINISHED
    * - @ref SM_PLAYING
+   * - @ref SM_UNKNOWN
    */
   int type;
 
@@ -83,12 +84,21 @@ 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
 
+/** @brief Speaker process is ready
+ *
+ * This is sent once at startup when the speaker has finished its
+ * initialization. */
+#define SM_READY 132
+
 void speaker_send(int fd, const struct speaker_message *sm);
 /* Send a message. */
 
@@ -98,6 +108,9 @@ int speaker_recv(int fd, struct speaker_message *sm);
 
 /** @brief One chunk in a stream */
 struct stream_header {
+  /** @brief Number of bytes */
+  uint32_t nbytes;
+
   /** @brief Frames per second */
   uint32_t rate;
 
@@ -116,9 +129,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,