X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/7a2c706849ecf6cee19d9e502f8491ffac3322e0..ec57f6c97b41d54ade912f7e3b9f727b40e38e16:/lib/uaudio.h diff --git a/lib/uaudio.h b/lib/uaudio.h index 6b0dea1..be396df 100644 --- a/lib/uaudio.h +++ b/lib/uaudio.h @@ -23,18 +23,31 @@ #ifndef UAUDIO_H #define UAUDIO_H +extern int uaudio_rate; +extern int uaudio_bits; +extern int uaudio_channels; +extern int uaudio_signed; +extern size_t uaudio_sample_size; + /** @brief Callback to get audio data * @param buffer Where to put audio data * @param max_samples How many samples to supply * @param userdata As passed to uaudio_open() * @return Number of samples filled - * - * One sample is a single 16-bit signed value. */ -typedef size_t uaudio_callback(int16_t *buffer, +typedef size_t uaudio_callback(void *buffer, size_t max_samples, void *userdata); +/** @brief Callback to play audio data + * @param buffer Pointer to audio buffer + * @param samples Number of samples to play + * @return Number of samples played + * + * Used with uaudio_thread_start() etc. + */ +typedef size_t uaudio_playcallback(void *buffer, size_t samples); + /** @brief Audio API definition */ struct uaudio { /** @brief Name of this API */ @@ -78,25 +91,52 @@ struct uaudio { void (*deactivate)(void); }; - + +void uaudio_set_format(int rate, int channels, int samplesize, int signed_); void uaudio_set(const char *name, const char *value); -const char *uaudio_get(const char *name); +char *uaudio_get(const char *name); +void uaudio_thread_start(uaudio_callback *callback, + void *userdata, + uaudio_playcallback *playcallback, + size_t min, + size_t max); +void uaudio_thread_stop(void); +void uaudio_thread_activate(void); +void uaudio_thread_deactivate(void); +void uaudio_schedule_synchronize(void); +void uaudio_schedule_update(size_t written_samples); +void uaudio_schedule_init(void); + +extern uint64_t uaudio_schedule_timestamp; +extern int uaudio_schedule_reactivated; #if HAVE_COREAUDIO_AUDIOHARDWARE_H extern const struct uaudio uaudio_coreaudio; +#ifndef UAUDIO_DEFAULT +# define UAUDIO_DEFAULT uaudio_coreaudio +#endif #endif #if HAVE_ALSA_ASOUNDLIB_H extern const struct uaudio uaudio_alsa; +#ifndef UAUDIO_DEFAULT +# define UAUDIO_DEFAULT uaudio_alsa +#endif #endif #if HAVE_SYS_SOUNDCARD_H || EMPEG_HOST extern const struct uaudio uaudio_oss; +#ifndef UAUDIO_DEFAULT +# define UAUDIO_DEFAULT uaudio_oss +#endif #endif extern const struct uaudio uaudio_rtp; +#ifndef UAUDIO_DEFAULT +# define UAUDIO_DEFAULT uaudio_rtp +#endif -extern const struct uaudio *uaudio_apis[]; +extern const struct uaudio uaudio_command; #endif /* UAUDIO_H */