1 #ifndef foocombinesinkuserdatafoo
2 #define foocombinesinkuserdatafoo
7 struct userdata *userdata;
10 pa_sink_input *sink_input;
11 pa_bool_t ignore_state_change;
13 pa_asyncmsgq *inq, /* Message queue from the sink thread to this sink input */
14 *outq; /* Message queue from this sink input to the sink thread */
15 pa_rtpoll_item *inq_rtpoll_item_read, *inq_rtpoll_item_write;
16 pa_rtpoll_item *outq_rtpoll_item_read, *outq_rtpoll_item_write;
18 pa_memblockq *memblockq;
20 /* For communication of the stream latencies to the main thread */
21 pa_usec_t total_latency;
23 /* For communication of the stream parameters to the sink thread */
24 pa_atomic_t max_request;
25 pa_atomic_t requested_latency;
27 PA_LLIST_FIELDS(struct output);
36 pa_thread_mq thread_mq;
39 pa_time_event *time_event;
40 pa_usec_t adjust_time;
44 pa_bool_t no_reattach;
46 pa_strlist *unlinked_slaves;
48 pa_hook_slot *sink_put_slot, *sink_unlink_slot, *sink_state_changed_slot;
50 pa_resample_method_t resample_method;
54 pa_idxset* outputs; /* managed in main context */
57 PA_LLIST_HEAD(struct output, active_outputs); /* managed in IO thread context */
58 pa_atomic_t running; /* we cache that value here, so that every thread can query it cheaply */
60 pa_bool_t in_null_mode;
61 pa_smoother *smoother;
65 pa_sink_input * (*add_slave)(struct userdata *, pa_sink *);
66 void (*remove_slave)(struct userdata *, pa_sink_input *, pa_sink *);
67 int (*move_slave)(struct userdata *, pa_sink_input *, pa_sink *);