]> git.sesse.net Git - vlc/blobdiff - include/vlc_aout.h
decoder: separate vout initialization from buffer allocation
[vlc] / include / vlc_aout.h
index 73e775aa193d668d9d2da8f6bcb5180896886dc8..032157fbd5f76cd96591b166d1caa111a8a9aa47 100644 (file)
        || ((p_format)->i_format == VLC_CODEC_A52)       \
        || ((p_format)->i_format == VLC_CODEC_DTS) )
 
-/* Values used for the audio-device and audio-channels object variables */
-#define AOUT_VAR_MONO               1
-#define AOUT_VAR_STEREO             2
-#define AOUT_VAR_2F2R               4
-#define AOUT_VAR_3F2R               5
-#define AOUT_VAR_5_1                6
-#define AOUT_VAR_6_1                7
-#define AOUT_VAR_7_1                8
-#define AOUT_VAR_SPDIF              10
-
+/* Values used for the audio-channels object variable */
 #define AOUT_VAR_CHAN_UNSET         0 /* must be zero */
 #define AOUT_VAR_CHAN_STEREO        1
 #define AOUT_VAR_CHAN_RSTEREO       2
@@ -158,15 +149,6 @@ struct audio_output
       * \param mute true to mute, false to unmute
       * \warning A stream may or may not have been started when called.
       */
-    int (*device_enum)(audio_output_t *, char ***ids, char ***names);
-    /**< Enumerates available audio output devices (optional, may be NULL).
-      * \param ids pointer to a heap-allocated table of heap-allocated
-      *            nul-terminated device unique identifiers [OUT]
-      * \param names pointer to a heap-allocated table of heap-allocated
-      *              nul-terminated device human-readable names [OUT]
-      * \return The number of entries, or -1 on error.
-      * \warning A stream may or may not have been started when called.
-      */
     int (*device_select)(audio_output_t *, const char *id);
     /**< Selects an audio output device (optional, may be NULL).
       * \param id nul-terminated device unique identifier.
@@ -178,6 +160,7 @@ struct audio_output
         void (*mute_report)(audio_output_t *, bool);
         void (*policy_report)(audio_output_t *, bool);
         void (*device_report)(audio_output_t *, const char *);
+        void (*hotplug_report)(audio_output_t *, const char *, const char *);
         int (*gain_request)(audio_output_t *, float);
         void (*restart_request)(audio_output_t *, unsigned);
     } event;
@@ -210,15 +193,16 @@ static const uint32_t pi_vlc_chan_order_wg4[] =
  */
 VLC_API unsigned aout_CheckChannelReorder( const uint32_t *, const uint32_t *,
                                            uint32_t mask, uint8_t *table );
-VLC_API void aout_ChannelReorder(void *, size_t, unsigned, const uint8_t *, vlc_fourcc_t);
+VLC_API void aout_ChannelReorder(void *, size_t, uint8_t, const uint8_t *, vlc_fourcc_t);
 
-VLC_API void aout_Interleave(void *dst, const void *src, unsigned samples,
-                             unsigned channels, vlc_fourcc_t fourcc);
+VLC_API void aout_Interleave(void *dst, const void *const *planes,
+                             unsigned samples, unsigned channels,
+                             vlc_fourcc_t fourcc);
 VLC_API void aout_Deinterleave(void *dst, const void *src, unsigned samples,
                              unsigned channels, vlc_fourcc_t fourcc);
 
 /**
- * This fonction will compute the extraction parameter into pi_selection to go
+ * This function will compute the extraction parameter into pi_selection to go
  * from i_channels with their type given by pi_order_src[] into the order
  * describe by pi_order_dst.
  * It will also set :
@@ -298,6 +282,17 @@ static inline void aout_DeviceReport(audio_output_t *aout, const char *id)
     aout->event.device_report(aout, id);
 }
 
+/**
+ * Report a device hot-plug event.
+ * @param id device ID
+ * @param name human-readable device name (NULL for hot unplug)
+ */
+static inline void aout_HotplugReport(audio_output_t *aout,
+                                      const char *id, const char *name)
+{
+    aout->event.hotplug_report(aout, id, name);
+}
+
 /**
  * Request a change of software audio amplification.
  * \param gain linear amplitude gain (must be positive)
@@ -323,38 +318,22 @@ static inline int aout_ChannelsRestart (vlc_object_t *obj, const char *varname,
     return 0;
 }
 
-
-/* */
-VLC_API vout_thread_t * aout_filter_RequestVout( filter_t *, vout_thread_t *p_vout, video_format_t *p_fmt ) VLC_USED;
-
-/** Audio output buffer FIFO */
-struct aout_fifo_t
-{
-    block_t  *p_first;
-    block_t **pp_last;
-    date_t    end_date;
-};
-
-/* Legacy packet-oriented audio output helpers */
-typedef struct
-{
-    vlc_mutex_t lock;
-    audio_sample_format_t format;
-    aout_fifo_t partial; /**< Audio blocks before packetization */
-    aout_fifo_t fifo; /**< Packetized audio blocks */
-    mtime_t pause_date; /**< Date when paused or VLC_TS_INVALID */
-    unsigned samples; /**< Samples per packet */
-    bool starving; /**< Whether currently starving (to limit error messages) */
-} aout_packet_t;
-
-VLC_DEPRECATED void aout_PacketInit(audio_output_t *, aout_packet_t *, unsigned, const audio_sample_format_t *);
-VLC_DEPRECATED void aout_PacketDestroy(audio_output_t *);
-
-VLC_DEPRECATED int aout_PacketTimeGet(audio_output_t *, mtime_t *);
-VLC_DEPRECATED void aout_PacketPlay(audio_output_t *, block_t *);
-VLC_DEPRECATED void aout_PacketFlush(audio_output_t *, bool);
-
-VLC_DEPRECATED block_t *aout_PacketNext(audio_output_t *, mtime_t) VLC_USED;
-
+/* Audio output filters */
+typedef struct aout_filters aout_filters_t;
+typedef struct aout_request_vout aout_request_vout_t;
+
+VLC_API aout_filters_t *aout_FiltersNew(vlc_object_t *,
+                                        const audio_sample_format_t *,
+                                        const audio_sample_format_t *,
+                                        const aout_request_vout_t *) VLC_USED;
+#define aout_FiltersNew(o,inf,outf,rv) \
+        aout_FiltersNew(VLC_OBJECT(o),inf,outf,rv)
+VLC_API void aout_FiltersDelete(vlc_object_t *, aout_filters_t *);
+#define aout_FiltersDelete(o,f) \
+        aout_FiltersDelete(VLC_OBJECT(o),f)
+VLC_API bool aout_FiltersAdjustResampling(aout_filters_t *, int);
+VLC_API block_t *aout_FiltersPlay(aout_filters_t *, block_t *, int rate);
+
+VLC_API vout_thread_t * aout_filter_RequestVout( filter_t *, vout_thread_t *p_vout, video_format_t *p_fmt );
 
 #endif /* VLC_AOUT_H */