diff options
Diffstat (limited to 'src/pulsecore/sink.h')
-rw-r--r-- | src/pulsecore/sink.h | 46 |
1 files changed, 29 insertions, 17 deletions
diff --git a/src/pulsecore/sink.h b/src/pulsecore/sink.h index fadc76eb..b3fcff49 100644 --- a/src/pulsecore/sink.h +++ b/src/pulsecore/sink.h @@ -40,26 +40,36 @@ typedef struct pa_sink pa_sink; #include <pulsecore/module.h> #include <pulsecore/refcnt.h> #include <pulsecore/msgobject.h> +#include <pulsecore/rtpoll.h> #define PA_MAX_INPUTS_PER_SINK 32 typedef enum pa_sink_state { + PA_SINK_INIT, PA_SINK_RUNNING, PA_SINK_SUSPENDED, PA_SINK_IDLE, - PA_SINK_DISCONNECTED + PA_SINK_UNLINKED } pa_sink_state_t; +static inline int PA_SINK_OPENED(pa_sink_state_t x) { + return x == PA_SINK_RUNNING || x == PA_SINK_IDLE; +} + +static inline int PA_SINK_LINKED(pa_sink_state_t x) { + return x == PA_SINK_RUNNING || x == PA_SINK_IDLE || x == PA_SINK_SUSPENDED; +} + struct pa_sink { pa_msgobject parent; uint32_t index; pa_core *core; pa_sink_state_t state; + pa_sink_flags_t flags; char *name; char *description, *driver; /* may be NULL */ - int is_hardware; pa_module *module; /* may be NULL */ @@ -67,21 +77,22 @@ struct pa_sink { pa_channel_map channel_map; pa_idxset *inputs; - pa_source *monitor_source; /* may be NULL */ + pa_source *monitor_source; pa_cvolume volume; int muted; int refresh_volume; int refresh_mute; - int (*set_state)(pa_sink *s, pa_sink_state_t state); - int (*set_volume)(pa_sink *s); /* dito */ - int (*get_volume)(pa_sink *s); /* dito */ - int (*get_mute)(pa_sink *s); /* dito */ - int (*set_mute)(pa_sink *s); /* dito */ + int (*set_state)(pa_sink *s, pa_sink_state_t state); /* may be NULL */ + int (*set_volume)(pa_sink *s); /* dito */ + int (*get_volume)(pa_sink *s); /* dito */ + int (*get_mute)(pa_sink *s); /* dito */ + int (*set_mute)(pa_sink *s); /* dito */ pa_usec_t (*get_latency)(pa_sink *s); /* dito */ pa_asyncmsgq *asyncmsgq; + pa_rtpoll *rtpoll; /* Contains copies of the above data so that the real-time worker * thread can work without access locking */ @@ -114,7 +125,7 @@ typedef enum pa_sink_message { PA_SINK_MESSAGE_MAX } pa_sink_message_t; -/* To be used exclusively by the sink driver */ +/* To be called exclusively by the sink driver, from main context */ pa_sink* pa_sink_new( pa_core *core, @@ -124,18 +135,21 @@ pa_sink* pa_sink_new( const pa_sample_spec *spec, const pa_channel_map *map); -void pa_sink_disconnect(pa_sink* s); +void pa_sink_put(pa_sink *s); +void pa_sink_unlink(pa_sink* s); void pa_sink_set_module(pa_sink *sink, pa_module *m); void pa_sink_set_description(pa_sink *s, const char *description); void pa_sink_set_asyncmsgq(pa_sink *s, pa_asyncmsgq *q); +void pa_sink_set_rtpoll(pa_sink *s, pa_rtpoll *p); -/* Usable by everyone */ +/* May be called by everyone, from main context */ pa_usec_t pa_sink_get_latency(pa_sink *s); int pa_sink_update_status(pa_sink*s); int pa_sink_suspend(pa_sink *s, int suspend); +int pa_sink_suspend_all(pa_core *c, int suspend); /* Sends a ping message to the sink thread, to make it wake up and * check for data to process even if there is no real message is @@ -150,19 +164,17 @@ int pa_sink_get_mute(pa_sink *sink); unsigned pa_sink_used_by(pa_sink *s); #define pa_sink_get_state(s) ((s)->state) -/* To be used exclusively by the sink driver thread */ +/* To be called exclusively by the sink driver, from IO context */ void pa_sink_render(pa_sink*s, size_t length, pa_memchunk *result); void pa_sink_render_full(pa_sink *s, size_t length, pa_memchunk *result); void pa_sink_render_into(pa_sink*s, pa_memchunk *target); void pa_sink_render_into_full(pa_sink *s, pa_memchunk *target); -int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offset, pa_memchunk *chunk); +void pa_sink_skip(pa_sink *s, size_t length); -static inline int PA_SINK_OPENED(pa_sink_state_t x) { - return x == PA_SINK_RUNNING || x == PA_SINK_IDLE; -} +int pa_sink_process_inputs(pa_sink *s); -int pa_sink_suspend_all(pa_core *c, int suspend); +int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offset, pa_memchunk *chunk); #endif |