VLC_API decoder_t * input_DecoderCreate( vlc_object_t *, const es_format_t *, input_resource_t * ) VLC_USED;
VLC_API void input_DecoderDelete( decoder_t * );
VLC_API void input_DecoderDecode( decoder_t *, block_t *, bool b_do_pace );
+VLC_API void input_DecoderFlush( decoder_t * );
/**
* This function creates a sane filename path.
vlc_mutex_unlock( &p_owner->lock );
}
+/**
+ * Requests that the decoder immediately discard all pending buffers.
+ * This is useful at end of stream, when seeking or when deselecting a stream.
+ */
+void input_DecoderFlush( decoder_t *p_dec )
+{
+ decoder_owner_sys_t *p_owner = p_dec->p_owner;
+
+ vlc_mutex_lock( &p_owner->lock );
+ DecoderFlush( p_dec );
+ vlc_mutex_unlock( &p_owner->lock );
+}
+
void input_DecoderStartWait( decoder_t *p_dec )
{
decoder_owner_sys_t *p_owner = p_dec->p_owner;
assert( !p_owner->b_waiting );
- vlc_mutex_lock( &p_owner->lock );
- DecoderFlush( p_dec );
+ input_DecoderFlush( p_dec );
+ vlc_mutex_lock( &p_owner->lock );
p_owner->b_first = true;
p_owner->b_has_data = false;
p_owner->b_waiting = true;
else
{
/* TODO subtitle should not be flushed */
+ p_owner->b_waiting = false;
DecoderFlush( p_dec );
}
vlc_mutex_unlock( &p_owner->lock );
/* Empty the fifo */
block_FifoEmpty( p_owner->p_fifo );
- p_owner->b_waiting = false;
/* Monitor for flush end */
p_owner->b_flushing = true;
vlc_cond_signal( &p_owner->wait_request );