[vlc-devel] [RFC PATCH 3.0.x] input: clear EOF flags of slave sources when select track

"zhilizhao(赵志立)" quinkblack at foxmail.com
Fri Nov 13 15:16:11 CET 2020


Hi all,

input-slave is a very useful feature. I use it to compare the video quality of two similar media files.

It’s broken on 4.0 branch too. And looks like more than the EOF issue.

I’d like to propose a feature something like “playback-all”, like current --sout-all, so we don’t have
to enable multiple video tracks one by one.

> On Nov 13, 2020, at 10:06 PM, Zhao Zhili <quinkblack at foxmail.com> wrote:
> 
> input-slave was broken for some demuxers like mp4. If no track is
> selected, slave demuxer return EOF at the beginning. Selecting
> a track of slave input doesn't work since the input source is
> in the EOF status. For VLC users, seeking after select track is a
> workaround solution, because seek will reset the EOF flag.
> 
> Since a video track can be enabled at random position and there is
> no preroll, it can lead to corrupted frames.
> ---
> src/input/input.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
> 
> diff --git a/src/input/input.c b/src/input/input.c
> index 1b8a2eb83d..dd4b487d20 100644
> --- a/src/input/input.c
> +++ b/src/input/input.c
> @@ -1006,6 +1006,15 @@ static bool SlaveExists( input_item_slave_t **pp_slaves, int i_slaves,
>     return false;
> }
> 
> +static void SlaveSetEof( input_thread_t *p_input, bool b_eof )
> +{
> +    for( int i = 0; i < input_priv(p_input)->i_slave; i++ )
> +    {
> +        input_source_t *in = input_priv(p_input)->slave[i];
> +        in->b_eof = b_eof;
> +    }
> +}
> +
> static void SetSubtitlesOptions( input_thread_t *p_input )
> {
>     /* Get fps and set it if not already set */
> @@ -2170,6 +2179,8 @@ static bool Control( input_thread_t *p_input,
>                             ES_OUT_SET_ES_BY_ID, (int)val.i_int );
> 
>             demux_Control( input_priv(p_input)->master->p_demux, DEMUX_SET_ES, (int)val.i_int );
> +            if( val.i_int >= 0 )
> +                SlaveSetEof( p_input, false );
>             break;
> 
>         case INPUT_CONTROL_RESTART_ES:
> -- 
> 2.28.0
> 



More information about the vlc-devel mailing list