Commit 132f872d authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

decoder: add input_DecoderDrain()

parent d173264a
...@@ -617,6 +617,7 @@ static inline int input_ModifyPcrSystem( input_thread_t *p_input, bool b_absolut ...@@ -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 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_DecoderDelete( decoder_t * );
VLC_API void input_DecoderDecode( decoder_t *, block_t *, bool b_do_pace ); 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 * ); VLC_API void input_DecoderFlush( decoder_t * );
/** /**
......
...@@ -1925,6 +1925,24 @@ bool input_DecoderIsEmpty( decoder_t * p_dec ) ...@@ -1925,6 +1925,24 @@ bool input_DecoderIsEmpty( decoder_t * p_dec )
return b_empty; 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 ) static void DecoderFlush( decoder_t *p_dec )
{ {
decoder_owner_sys_t *p_owner = p_dec->p_owner; decoder_owner_sys_t *p_owner = p_dec->p_owner;
...@@ -1951,7 +1969,7 @@ static void DecoderFlush( decoder_t *p_dec ) ...@@ -1951,7 +1969,7 @@ static void DecoderFlush( decoder_t *p_dec )
/** /**
* Requests that the decoder immediately discard all pending buffers. * 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 ) void input_DecoderFlush( decoder_t *p_dec )
{ {
......
...@@ -177,6 +177,7 @@ input_CreateFilename ...@@ -177,6 +177,7 @@ input_CreateFilename
input_DecoderCreate input_DecoderCreate
input_DecoderDelete input_DecoderDelete
input_DecoderDecode input_DecoderDecode
input_DecoderDrain
input_DecoderFlush input_DecoderFlush
input_GetItem input_GetItem
input_item_AddInfo input_item_AddInfo
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment