[vlc-devel] [PATCH 1/3] stream_demux: add end of data signalling

Rémi Denis-Courmont remi at remlab.net
Mon Sep 14 14:34:55 CEST 2015


Le 2015-09-14 15:11, Francois Cartegnie a écrit :
> Some demux thread do Peek() (readline based for ex) more data than 
> will
> even be available through fifo. If this happens in demux Open(), no 
> data
> will ever be processed.

stream_Read() must return 0 on EOF, not -1 which is reserved for 
errors.

> ---
>  src/input/stream_demux.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/src/input/stream_demux.c b/src/input/stream_demux.c
> index e25814c..e6a104c 100644
> --- a/src/input/stream_demux.c
> +++ b/src/input/stream_demux.c
> @@ -39,6 +39,7 @@ struct stream_sys_t
>      /* Data buffer */
>      block_fifo_t *p_fifo;
>      block_t      *p_block;
> +    bool          b_nomoredata;
>
>      /* Demuxer */
>      char        *psz_name;
> @@ -82,6 +83,7 @@ stream_t *stream_DemuxNew( demux_t *p_demux, const
> char *psz_demux, es_out_t *ou
>
>      p_sys->out = out;
>      p_sys->p_block = NULL;
> +    p_sys->b_nomoredata = false;
>      p_sys->psz_name = strdup( psz_demux );
>      p_sys->stats.position = 0.;
>      p_sys->stats.length = 0;
> @@ -169,7 +171,7 @@ static ssize_t DStreamRead( stream_t *s, void
> *buf, size_t len )
>  {
>      stream_sys_t *sys = s->p_sys;
>
> -    if( !atomic_load( &sys->active ) )
> +    if( !atomic_load( &sys->active ) || sys->b_nomoredata )
>          return -1;
>      if( len == 0 )
>          return 0;
> @@ -187,6 +189,9 @@ static ssize_t DStreamRead( stream_t *s, void
> *buf, size_t len )
>      if( buf != NULL && copy > 0 )
>          memcpy( buf, block->p_buffer, copy );
>
> +    if( block->i_flags & BLOCK_FLAG_END_OF_SEQUENCE )
> +        sys->b_nomoredata = true;
> +
>      block->p_buffer += copy;
>      block->i_buffer -= copy;
>      if( block->i_buffer == 0 )

-- 
Rémi Denis-Courmont
http://www.remlab.net/


More information about the vlc-devel mailing list