X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/a684c959cadb4166c695f70cc4aa3a8f5603b67c..91370169de7f552f3a54e5ef9e079a202a5efbfa:/server/speaker.h diff --git a/server/speaker.h b/server/speaker.h index ae4eac3..2786735 100644 --- a/server/speaker.h +++ b/server/speaker.h @@ -55,9 +55,6 @@ */ #define NETWORK_BYTES (1500-8/*UDP*/-40/*IP*/-8/*conservatism*/) -/** @brief Maximum RTP playahead (ms) */ -#define RTP_AHEAD_MS 1000 - /** @brief Maximum number of FDs to poll for */ #define NFDS 256 @@ -91,6 +88,14 @@ struct track { /** @brief Slot in @ref fds */ int slot; + /** @brief Set when playable + * + * A track becomes playable whenever it fills its buffer or reaches EOF; it + * stops being playable when it entirely empties its buffer. Tracks start + * out life not playable. + */ + int playable; + /** @brief Input buffer * * 1Mbyte is enough for nearly 6s of 44100Hz 16-bit stereo @@ -167,12 +172,18 @@ struct speaker_backend { void (*deactivate)(void); /** @brief Called before poll() + * @param timeoutp Pointer to timeout + * + * Called before the call to poll(). + * + * If desirable, should call addfd() to update the FD array and stash the + * slot number somewhere safe. This will only be called if @ref device_state + * is @ref device_open. * - * Called before the call to poll(). Should call addfd() to update - * the FD array and stash the slot number somewhere safe. This will - * only be called if @ref device_state = @ref device_open. + * @p timeoutp points to the poll timeout value in milliseconds. It may be + * reduced, but never increased. */ - void (*beforepoll)(void); + void (*beforepoll)(int *timeoutp); /** @brief Called after poll() * @return 1 if output device ready for play, 0 otherwise