/* 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 */
+ 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. */
} aout_packet_t;
VLC_API void aout_PacketInit(audio_output_t *, aout_packet_t *, unsigned);
{
assert (p == aout_packet (aout));
+ vlc_mutex_init (&p->lock);
aout_FifoInit (aout, &p->partial, aout->format.i_rate);
aout_FifoInit (aout, &p->fifo, aout->format.i_rate);
p->pause_date = VLC_TS_INVALID;
aout_FifoDestroy (&p->partial);
aout_FifoDestroy (&p->fifo);
+ vlc_mutex_destroy (&p->lock);
}
static block_t *aout_OutputSlice (audio_output_t *);
{
aout_packet_t *p = aout_packet (aout);
+ vlc_mutex_lock (&p->lock);
aout_FifoPush (&p->partial, block);
while ((block = aout_OutputSlice (aout)) != NULL)
aout_FifoPush (&p->fifo, block);
+ vlc_mutex_unlock (&p->lock);
}
void aout_PacketPause (audio_output_t *aout, bool pause, mtime_t date)
mtime_t duration = date - p->pause_date;
p->pause_date = VLC_TS_INVALID;
+ vlc_mutex_lock (&p->lock);
aout_FifoMoveDates (&p->partial, duration);
aout_FifoMoveDates (&p->fifo, duration);
+ vlc_mutex_unlock (&p->lock);
}
}
{
aout_packet_t *p = aout_packet (aout);
+ vlc_mutex_lock (&p->lock);
aout_FifoReset (&p->partial);
aout_FifoReset (&p->fifo);
+ vlc_mutex_unlock (&p->lock);
+
(void) drain; /* TODO */
}
const unsigned samples = p->samples;
assert( samples > 0 );
- aout_assert_locked( p_aout );
+ vlc_assert_locked( &p->lock );
/* Retrieve the date of the next buffer. */
date_t exact_start_date = p->fifo.end_date;
aout_buffer_t * p_buffer;
mtime_t now = mdate();
- aout_lock( p_aout );
+ vlc_mutex_lock( &p->lock );
/* Drop the audio sample if the audio output is really late.
* In the case of b_can_sleek, we don't use a resampler so we need to be
aout_FifoMoveDates (&p->partial, delta);
aout_FifoMoveDates (p_fifo, delta);
+#warning FIXME: feed back to input for resampling!!!
}
out:
- aout_unlock( p_aout );
+ vlc_mutex_unlock( &p->lock );
return p_buffer;
}