Thanks for your replay. I see wrap timestamp control is enable by pts_wrap_bits(default 33), but mp4 demuxer will later set this to 64 (means disabled). Now pts_wrap_bits are always tied to 33 without copy it, which seems strange.
Normally the pts_wrap_reference is based on first packet of a file in avformat_find_stream_info. Without copy the value, the value is based on first packet of read_packet, will be non-zero after seeking. 2017-12-17 22:55 GMT+08:00 Nicolas George <geo...@nsup.org>: > mymoey...@gmail.com (2017-12-14): > > From: Wu Zhiqiang <mymoey...@gmail.com> > > > > When using concat protocol, start from middle of file will generate > non-zero wrap reference. > > If seek to time before the wrap reference, wrap control will generate > wrong wrapped timestamp. > > Copy wrap related stream properties when reading header can fix this > problem. > > > > Signed-off-by: Wu Zhiqiang <mymoey...@gmail.com> > > --- > > libavformat/concatdec.c | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c > > index 0e189012ad..8dae2737df 100644 > > --- a/libavformat/concatdec.c > > +++ b/libavformat/concatdec.c > > @@ -188,6 +188,11 @@ static int copy_stream_props(AVStream *st, AVStream > *source_st) > > st->time_base = source_st->time_base; > > st->sample_aspect_ratio = source_st->sample_aspect_ratio; > > > > + /* Fix wrap control problem */ > > + avpriv_set_pts_info(st, source_st->pts_wrap_bits, > source_st->time_base.num, source_st->time_base.den); > > + st->pts_wrap_behavior = source_st->pts_wrap_behavior; > > + st->pts_wrap_reference = source_st->pts_wrap_reference; > > + > > av_dict_copy(&st->metadata, source_st->metadata, 0); > > return 0; > > } > > The concat demuxer is mine to maintain, but I am not very familiar with > the wrapped timestamps handling, and the commit message does not > enlighten me. > > (By the way, please wrap it at 60-70 characters.) > > The way I see it, if the library takes care of de-wrapping timestamps, > then the concat demuxer will see de-wrapped timestamps from the > underlying demuxer, and the timestamps do not need to be de-wrapped a > second time: setting the wrap information is unnecessary and even wrong. > > Please explain what I am missing. > > Regards, > > -- > Nicolas George > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel