&& ((p_first)->i_physical_channels == (p_second)->i_physical_channels)\
&& ((p_first)->i_original_channels == (p_second)->i_original_channels) )
+#define AOUT_FMT_LINEAR( p_format ) \
+ (aout_BitsPerSample((p_format)->i_format) != 0)
+
#define VLC_CODEC_SPDIFL VLC_FOURCC('s','p','d','i')
#define VLC_CODEC_SPDIFB VLC_FOURCC('s','p','d','b')
-#define AOUT_FMT_NON_LINEAR( p_format ) \
+#define AOUT_FMT_SPDIF( p_format ) \
( ((p_format)->i_format == VLC_CODEC_SPDIFL) \
|| ((p_format)->i_format == VLC_CODEC_SPDIFB) \
|| ((p_format)->i_format == VLC_CODEC_A52) \
{
VLC_COMMON_MEMBERS
- vlc_mutex_t lock;
-
audio_sample_format_t format; /**< Output format (plugin can modify it
only when succesfully probed and not afterward) */
void (* pf_flush)( audio_output_t *, bool ); /**< Flush/drain callback
(optional, may be NULL) */
aout_volume_cb pf_volume_set; /**< Volume setter (or NULL) */
- int i_nb_samples;
};
/**
* Prototypes
*****************************************************************************/
-VLC_API aout_buffer_t * aout_OutputNextBuffer( audio_output_t *, mtime_t, bool ) VLC_USED;
-
/**
* This function computes the reordering needed to go from pi_chan_order_in to
* pi_chan_order_out.
VLC_API unsigned int aout_BitsPerSample( vlc_fourcc_t i_format ) VLC_USED;
VLC_API void aout_FormatPrepare( audio_sample_format_t * p_format );
-VLC_API void aout_FormatPrint( audio_output_t * p_aout, const char * psz_text, const audio_sample_format_t * p_format );
+VLC_API void aout_FormatPrint(vlc_object_t *, const char *,
+ const audio_sample_format_t *);
+#define aout_FormatPrint(o, t, f) aout_FormatPrint(VLC_OBJECT(o), t, f)
VLC_API const char * aout_FormatPrintChannels( const audio_sample_format_t * ) VLC_USED;
-VLC_API mtime_t aout_FifoFirstDate( const aout_fifo_t * ) VLC_USED;
-VLC_API aout_buffer_t *aout_FifoPop( aout_fifo_t * p_fifo ) VLC_USED;
-VLC_API void aout_FifoPush( aout_fifo_t *, block_t * );
-
VLC_API void aout_VolumeNoneInit( audio_output_t * );
VLC_API void aout_VolumeSoftInit( audio_output_t * );
VLC_API void aout_VolumeHardInit( audio_output_t *, aout_volume_cb );
VLC_API void aout_VolumeHardSet( audio_output_t *, float, bool );
+VLC_API void aout_TimeReport(audio_output_t *, mtime_t);
+
VLC_API int aout_ChannelsRestart( vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void * );
/* */
/* Legacy packet-oriented audio output helpers */
typedef struct
{
- 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;
- /* Indicates whether the audio output is currently starving, to avoid
- * printing a 1,000 "output is starving" messages. */
+ vlc_mutex_t lock;
+ 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 */
+ mtime_t time_report; /**< Desynchronization estimate or VLC_TS_INVALID */
+ unsigned samples; /**< Samples per packet */
+ bool starving; /**< Whether currently starving (to limit error messages) */
} aout_packet_t;
VLC_API void aout_PacketInit(audio_output_t *, aout_packet_t *, unsigned);
VLC_API void aout_PacketPause(audio_output_t *, bool, mtime_t);
VLC_API void aout_PacketFlush(audio_output_t *, bool);
-VLC_API block_t *aout_PacketNext(audio_output_t *, mtime_t, bool) VLC_USED;
+VLC_API block_t *aout_PacketNext(audio_output_t *, mtime_t) VLC_USED;
+
#endif /* VLC_AOUT_H */