- bool b_in_place;
- bool b_continuity;
-
- void (*pf_do_work)( aout_instance_t *, aout_filter_t *,
- aout_buffer_t *, aout_buffer_t * );
-
- /* Owner fieldS
- * XXX You MUST not use them directly */
-
- /* Vout callback
- * XXX use aout_filter_RequestVout */
- aout_request_vout_t request_vout;
-
- /* Private structure for the owner of the filter */
- aout_filter_owner_sys_t *p_owner;
-};
-
-#define AOUT_RESAMPLING_NONE 0
-#define AOUT_RESAMPLING_UP 1
-#define AOUT_RESAMPLING_DOWN 2
-/** an input stream for the audio output */
-struct aout_input_t
-{
- /* When this lock is taken, the pipeline cannot be changed by a
- * third-party. */
- vlc_mutex_t lock;
-
- audio_sample_format_t input;
- aout_alloc_t input_alloc;
-
- /* pre-filters */
- aout_filter_t * pp_filters[AOUT_MAX_FILTERS];
- int i_nb_filters;
-
- aout_filter_t * p_playback_rate_filter;
-
- /* resamplers */
- aout_filter_t * pp_resamplers[AOUT_MAX_FILTERS];
- int i_nb_resamplers;
- int i_resampling_type;
- mtime_t i_resamp_start_date;
- int i_resamp_start_drift;
-
- aout_fifo_t fifo;
-
- /* Mixer information */
- uint8_t * p_first_byte_to_mix;
- audio_replay_gain_t replay_gain;
- float f_multiplier;
-
- /* If b_restart == 1, the input pipeline will be re-created. */
- bool b_restart;
-
- /* If b_error == 1, there is no input pipeline. */
- bool b_error;
-
- /* Did we just change the output format? (expect buffer inconsistencies) */
- bool b_changed;
-
- /* last rate from input */
- int i_last_input_rate;
-
- /* */
- int i_buffer_lost;
-
- /* */
- bool b_paused;
- mtime_t i_pause_date;
-
- /* */
- bool b_recycle_vout;
- aout_request_vout_t request_vout;
- };
-
-/** an output stream for the audio output */
-typedef struct aout_output_t
-{
- audio_sample_format_t output;
- /* Indicates whether the audio output is currently starving, to avoid
- * printing a 1,000 "output is starving" messages. */
- bool b_starving;
-
- /* post-filters */
- aout_filter_t * pp_filters[AOUT_MAX_FILTERS];
- int i_nb_filters;
-
- aout_fifo_t fifo;
-
- struct module_t * p_module;
- struct aout_sys_t * p_sys;
- void (* pf_play)( aout_instance_t * );
- int (* pf_volume_get )( aout_instance_t *, audio_volume_t * );
- int (* pf_volume_set )( aout_instance_t *, audio_volume_t );
- int (* pf_volume_infos )( aout_instance_t *, audio_volume_t * );
- int i_nb_samples;
-
- /* Current volume for the output - it's just a placeholder, the plug-in
- * may or may not use it. */
- audio_volume_t i_volume;
-
- /* If b_error == 1, there is no audio output pipeline. */
- bool b_error;
-} aout_output_t;
-
-/** audio output thread descriptor */
-struct aout_instance_t
-{
- VLC_COMMON_MEMBERS
-
- /* Locks : please note that if you need several of these locks, it is
- * mandatory (to avoid deadlocks) to take them in the following order :
- * mixer_lock, p_input->lock, output_fifo_lock, input_fifos_lock.
- * --Meuuh */
- /* When input_fifos_lock is taken, none of the p_input->fifo structures
- * can be read or modified by a third-party thread. */
- vlc_mutex_t input_fifos_lock;
- /* When mixer_lock is taken, all decoder threads willing to mix a
- * buffer must wait until it is released. The output pipeline cannot
- * be modified. No input stream can be added or removed. */
- vlc_mutex_t mixer_lock;
- /* When output_fifo_lock is taken, the p_aout->output.fifo structure
- * cannot be read or written by a third-party thread. */
- vlc_mutex_t output_fifo_lock;
-
- /* Input streams & pre-filters */
- aout_input_t * pp_inputs[AOUT_MAX_INPUTS];
- int i_nb_inputs;
-
- /* Mixer */
- aout_mixer_t mixer;
-
- /* Output plug-in */
- aout_output_t output;