Marton Balint (2018-11-22): > This allows the underlying files to change their duration on subsequent > avformat context opens. > > An example use case where this matters: > > ffconcat version 1.0 > file dummy.mxf > file dummy.mxf > > ffmpeg -re -stream_loop -1 -i dummy.ffconcat -f sdl2 none > > The user can seamlessly change the input by atomically replacing dummy.mxf. > > Signed-off-by: Marton Balint <c...@passwd.hu> > --- > libavformat/concatdec.c | 13 +++++-------- > 1 file changed, 5 insertions(+), 8 deletions(-) > > diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c > index ebc50324cc..2ebd2120c3 100644 > --- a/libavformat/concatdec.c > +++ b/libavformat/concatdec.c > @@ -355,14 +355,12 @@ static int open_file(AVFormatContext *avf, unsigned > fileno) > return ret; > } > cat->cur_file = file; > - if (file->start_time == AV_NOPTS_VALUE) > - file->start_time = !fileno ? 0 : > - cat->files[fileno - 1].start_time + > - cat->files[fileno - 1].duration; > + file->start_time = !fileno ? 0 : > + cat->files[fileno - 1].start_time + > + cat->files[fileno - 1].duration; > file->file_start_time = (cat->avf->start_time == AV_NOPTS_VALUE) ? 0 : > cat->avf->start_time; > file->file_inpoint = (file->inpoint == AV_NOPTS_VALUE) ? > file->file_start_time : file->inpoint; > - if (file->duration == AV_NOPTS_VALUE) > - file->duration = get_best_effort_duration(file, cat->avf); > + file->duration = get_best_effort_duration(file, cat->avf); > > if (cat->segment_time_metadata) { > av_dict_set_int(&file->metadata, "lavf.concatdec.start_time", > file->start_time, 0); > @@ -529,8 +527,7 @@ static int open_next_file(AVFormatContext *avf) > ConcatContext *cat = avf->priv_data; > unsigned fileno = cat->cur_file - cat->files; > > - if (cat->cur_file->duration == AV_NOPTS_VALUE) > - cat->cur_file->duration = get_best_effort_duration(cat->cur_file, > cat->avf); > + cat->cur_file->duration = get_best_effort_duration(cat->cur_file, > cat->avf); > > if (++fileno >= cat->nb_files) { > cat->eof = 1;
I do not think it works. If the duration of the second file changes, for example, then the start time of all subsequent files changes too, but this patch does not update it. Seeking will show strange results. Regards, -- Nicolas George
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel