]> git.sesse.net Git - vlc/blobdiff - src/audio_output/aout_internal.h
es_out: use input_DecoderDrain()
[vlc] / src / audio_output / aout_internal.h
index 785a193adc9c8e984cc345940428903a7594fe0f..10c790b383b8b1989aa71c0c7500230bb2882e51 100644 (file)
 /* Max input rate factor (1/4 -> 4) */
 # define AOUT_MAX_INPUT_RATE (4)
 
-# define AOUT_MAX_FILTERS 12
-
 enum {
     AOUT_RESAMPLING_NONE=0,
     AOUT_RESAMPLING_UP,
     AOUT_RESAMPLING_DOWN
 };
 
-typedef struct
+struct aout_request_vout
 {
     struct vout_thread_t  *(*pf_request_vout)( void *, struct vout_thread_t *,
                                                video_format_t *, bool );
     void *p_private;
-} aout_request_vout_t;
+};
 
 typedef struct aout_volume aout_volume_t;
+typedef struct aout_dev aout_dev_t;
 
 typedef struct
 {
     vlc_mutex_t lock;
     module_t *module; /**< Output plugin (or NULL if inactive) */
+    aout_filters_t *filters;
     aout_volume_t *volume;
 
+    struct
+    {
+        vlc_mutex_t lock;
+        char *device;
+        float volume;
+        signed char mute;
+    } req;
+
+    struct
+    {
+        vlc_mutex_t lock;
+        aout_dev_t *list;
+        unsigned count;
+    } dev;
+
     struct
     {
         mtime_t end; /**< Last seen PTS */
@@ -63,19 +78,10 @@ typedef struct
     audio_sample_format_t input_format;
     audio_sample_format_t mixer_format;
 
-    filter_t *rate_filter; /**< The filter adjusting samples count
-        (either the scaletempo filter or a resampler) */
-    filter_t *resampler; /**< The resampler */
-    int resampling; /**< Current resampling (Hz) */
-    unsigned nb_filters;
-    filter_t *filters[AOUT_MAX_FILTERS]; /**< Configured user filters
-        (e.g. equalization) and their conversions */
-
     aout_request_vout_t request_vout;
-    bool recycle_vout;
 
     atomic_uint buffers_lost;
-    vlc_atomic_t restart;
+    atomic_uchar restart;
 } aout_owner_t;
 
 typedef struct
@@ -93,13 +99,6 @@ static inline aout_owner_t *aout_owner (audio_output_t *aout)
  * Prototypes
  *****************************************************************************/
 
-/* From filters.c : */
-int aout_FiltersNew(audio_output_t *, const audio_sample_format_t *,
-                   const audio_sample_format_t *, const aout_request_vout_t *);
-void aout_FiltersDelete(audio_output_t *);
-bool aout_FiltersAdjustResampling(audio_output_t *, int);
-block_t *aout_FiltersPlay(audio_output_t *, block_t *, int rate);
-
 /* From mixer.c : */
 aout_volume_t *aout_volume_New(vlc_object_t *, const audio_replay_gain_t *);
 #define aout_volume_New(o, g) aout_volume_New(VLC_OBJECT(o), g)
@@ -120,10 +119,11 @@ void aout_OutputPlay(audio_output_t *, block_t *);
 void aout_OutputPause( audio_output_t * p_aout, bool, mtime_t );
 void aout_OutputFlush( audio_output_t * p_aout, bool );
 void aout_OutputDelete( audio_output_t * p_aout );
+void aout_OutputLock(audio_output_t *);
+void aout_OutputUnlock(audio_output_t *);
 
 
 /* From common.c : */
-vlc_fourcc_t aout_NativeEndian(vlc_fourcc_t);
 void aout_FormatsPrint(vlc_object_t *, const char *,
                        const audio_sample_format_t *,
                        const audio_sample_format_t *);
@@ -136,28 +136,16 @@ bool aout_ChangeFilterString( vlc_object_t *manager, vlc_object_t *aout,
 int aout_DecNew(audio_output_t *, const audio_sample_format_t *,
                 const audio_replay_gain_t *, const aout_request_vout_t *);
 void aout_DecDelete(audio_output_t *);
-block_t *aout_DecNewBuffer(audio_output_t *, size_t);
-void aout_DecDeleteBuffer(audio_output_t *, block_t *);
 int aout_DecPlay(audio_output_t *, block_t *, int i_input_rate);
 int aout_DecGetResetLost(audio_output_t *);
 void aout_DecChangePause(audio_output_t *, bool b_paused, mtime_t i_date);
 void aout_DecFlush(audio_output_t *);
 bool aout_DecIsEmpty(audio_output_t *);
+void aout_RequestRestart (audio_output_t *, unsigned);
 
-void aout_InputRequestRestart(audio_output_t *);
-
-/* Audio output locking */
-static inline void aout_lock( audio_output_t *p_aout )
+static inline void aout_InputRequestRestart(audio_output_t *aout)
 {
-    vlc_mutex_lock( &aout_owner(p_aout)->lock );
+    aout_RequestRestart(aout, AOUT_RESTART_FILTERS);
 }
 
-static inline void aout_unlock( audio_output_t *p_aout )
-{
-    vlc_mutex_unlock( &aout_owner(p_aout)->lock );
-}
-
-#define aout_assert_locked( aout ) \
-        vlc_assert_locked( &aout_owner(aout)->lock )
-
 #endif /* !LIBVLC_AOUT_INTERNAL_H */