1
mirror of https://code.videolan.org/videolan/vlc synced 2024-08-27 04:21:53 +02:00

decoder: add input_DecoderDrain()

This commit is contained in:
Rémi Denis-Courmont 2015-03-21 19:09:31 +02:00
parent d173264a9a
commit 132f872d78
3 changed files with 21 additions and 1 deletions

View File

@ -617,6 +617,7 @@ static inline int input_ModifyPcrSystem( input_thread_t *p_input, bool b_absolut
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_DecoderDrain( decoder_t * );
VLC_API void input_DecoderFlush( decoder_t * );
/**

View File

@ -1925,6 +1925,24 @@ bool input_DecoderIsEmpty( decoder_t * p_dec )
return b_empty;
}
/**
* Signals that there are no further blocks to decode, and requests that the
* decoder drain all pending buffers. This is used to ensure that all
* intermediate buffers empty and no samples get lost at the end of the stream.
*
* @note The function does not actually wait for draining. It just signals that
* draining should be performed once the decoder has emptied FIFO.
*/
void input_DecoderDrain( decoder_t *p_dec )
{
block_t *p_block = block_Alloc(0);
if( unlikely(p_block == NULL) )
return;
p_block->i_flags |= BLOCK_FLAG_CORE_EOS;
input_DecoderDecode( p_dec, p_block, false );
}
static void DecoderFlush( decoder_t *p_dec )
{
decoder_owner_sys_t *p_owner = p_dec->p_owner;
@ -1951,7 +1969,7 @@ static void DecoderFlush( decoder_t *p_dec )
/**
* Requests that the decoder immediately discard all pending buffers.
* This is useful at end of stream, when seeking or when deselecting a stream.
* This is useful when seeking or when deselecting a stream.
*/
void input_DecoderFlush( decoder_t *p_dec )
{

View File

@ -177,6 +177,7 @@ input_CreateFilename
input_DecoderCreate
input_DecoderDelete
input_DecoderDecode
input_DecoderDrain
input_DecoderFlush
input_GetItem
input_item_AddInfo