В сообщении от Sunday 03 November 2019 13:56:09 Carl Eugen Hoyos написал(а): > Am So., 3. Nov. 2019 um 11:53 Uhr schrieb Andrew Randrianasulu > <randrianas...@gmail.com>: > > > For what exactly I should look? > > You claim that AVStream->time_base is changing (which sounds strange to me > but who know) on seeking, you could look (with printf's) how ffmpeg.c > deals with this. > I cannot know...
Update, just compiled CinelerraGG with ffmpeg.git LANG=ru_RU.utf8 /dev/shm/tmp/cinelerra-goodguy-20191104/cinelerra-5.1/bin/cin Cinelerra Infinity - built: Nov 4 2019 16:35:57 git://git.cinelerra-gg.org/goodguy/cinelerra.git (c) 2006-2019 Heroine Virtual Ltd. by Adam Williams (c) 2007-2019 cin5 derivative by W.P. Morrow aka goodguy Cinelerra is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. There is absolutely no warranty for Cinelerra. FFMPEG::open_decoder: some stream times estimated: /home/guest/botva/Downloads/from_Vladimir/Leningrad dolphinarium 16 09 2009/LD_160909_2.avi FFMPEG::open_decoder: some stream times estimated: /home/guest/botva/Downloads/from_Vladimir/Leningrad dolphinarium 16 09 2009/LD_160909_2.avi FFMPEG::open_decoder: some stream times estimated: /home/guest/botva/Downloads/from_Vladimir/Leningrad dolphinarium 16 09 2009/LD_160909_2.avi FFMPEG::open_decoder: some stream times estimated: /home/guest/botva/Downloads/from_Vladimir/Leningrad dolphinarium 16 09 2009/LD_160909_2.avi Device type none is not supported. Available device types: vdpau cuda vaapi opencl FFMPEG::open_decoder: some stream times estimated: /home/guest/botva/Downloads/from_Vladimir/Leningrad dolphinarium 16 09 2009/LD_160909_2.avi Device type none is not supported. Available device types: vdpau cuda vaapi opencl Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 FFMPEG::open_decoder: some stream times estimated: /home/guest/botva/Downloads/from_Vladimir/Leningrad dolphinarium 16 09 2009/LD_160909_2.avi Device type none is not supported. Available device types: vdpau cuda vaapi opencl Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,25 FFMPEG::open_decoder: some stream times estimated: /home/guest/botva/Downloads/from_Vladimir/Leningrad dolphinarium 16 09 2009/LD_160909_2.avi FFMPEG::open_decoder: some stream times estimated: /home/guest/botva/Downloads/from_Vladimir/Leningrad dolphinarium 16 09 2009/LD_160909_2.avi Timebase from stream: 1,25 Timebase from stream: 1,25 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Timebase from stream: 1,30000 Session time: 0:00:19 Cpu time: user: 0:00:04.433 sys: 0:00:01.064 1,25 print was before I tried to seek in stream, but it jumped to 1,30000 after I tried to set playback cursor to some 3 min into video. Cinelerra git: commit 83cdf330ba14342487a08d72e25ef29736d41100 (grafted, HEAD -> master, origin/master, origin/HEAD) Author: Good Guy <good1.2...@gmail.com> Date: Sat Nov 2 19:32:42 2019 -0600 correct last chkin dvd opts files ffmpeg.git: commit ec3d3fc65d06a9f7bc4d32b12b14a7c75e00484d (HEAD -> master, origin/master, origin/HEAD) Author: Jun Zhao <barryjz...@tencent.com> Date: Sat Jun 15 16:21:56 2019 +0800 lavf/asfdec: Simplify the check conditions Simplify the check conditions Signed-off-by: Jun Zhao <barryjz...@tencent.com> my diff for ffmpeg.c: diff --git a/cinelerra-5.1/cinelerra/ffmpeg.C b/cinelerra-5.1/cinelerra/ffmpeg.C index 70098ca..3cf85a9 100644 --- a/cinelerra-5.1/cinelerra/ffmpeg.C +++ b/cinelerra-5.1/cinelerra/ffmpeg.C @@ -681,7 +681,11 @@ int FFStream::seek(int64_t no, double rate) } if( pos == curr_pos ) return 0; double secs = pos < 0 ? 0. : pos / rate; - AVRational time_base = st->time_base; +// if user forced timebase to a specified stream + AVRational time_base = ffmpeg->force_timebase >= 0 ? + ffmpeg->fmt_ctx->streams[ffmpeg->force_timebase]->time_base : + st->time_base; + fprintf(stderr, "Timebase from stream: %i,%i \n", time_base.num, time_base.den); int64_t tstmp = time_base.num > 0 ? secs * time_base.den/time_base.num : 0; if( !tstmp ) { if( st->nb_index_entries > 0 ) tstmp = st->index_entries[0].timestamp; @@ -1192,10 +1196,19 @@ int FFVideoStream::video_seek(int64_t pos) if( pos == curr_pos-1 && !seeked ) return 0; // if close enough, just read up to current int gop = avctx->gop_size; - if( gop < 4 ) gop = 4; + if( gop < 4 && gop != 0) gop = 4; if( gop > 64 ) gop = 64; + if( gop == 0 ) gop = 1; + //fprintf(stderr, "GOP: %i \n", gop); int read_limit = curr_pos + 3*gop; if( pos >= curr_pos && pos <= read_limit ) return 0; + // fixup for I-only codecs, not sure why it needed with ffmpeg 4.2 + if (st->codecpar->codec_id == AV_CODEC_ID_DVVIDEO || st->codecpar->codec_id == AV_CODEC_ID_MJPEG || + st->codecpar->codec_id == AV_CODEC_ID_FFVHUFF || st->codecpar->codec_id == AV_CODEC_ID_DNXHD || + st->codecpar->codec_id ==AV_CODEC_ID_HUFFYUV ) { + gop = 1; + if( seek(pos - 2*gop, frame_rate) < 0 ) return -1; + } // guarentee preload more than 2*gop frames if( seek(pos - 3*gop, frame_rate) < 0 ) return -1; return 1; @@ -1576,6 +1589,7 @@ FFMPEG::FFMPEG(FileBase *file_base) flow = 1; decoding = encoding = 0; has_audio = has_video = 0; + force_timebase = -1; opts = 0; opt_duration = -1; opt_video_filter = 0; @@ -2271,6 +2285,8 @@ int FFMPEG::init_decoder(const char *filename) if( (tag=av_dict_get(opts, "format", NULL, 0)) != 0 ) { ifmt = av_find_input_format(tag->value); } + if( (tag=av_dict_get(opts, "force_timebase", NULL, 0)) != 0 ) + force_timebase = atoi(tag->value); } else load_options("decode.opts", opts); actually patch was mostly developed by CinelerraGG developer, I only added fprintf(stderr, "Timebase from stream: %i,%i \n", time_base.num, time_base.den); (for testing I moved opts file I used to fix this stream away: mv /home/guest/botva/Downloads/from_Vladimir/Leningrad\ dolphinarium\ 16\ 09\ 2009/LD_160909_2.opts \ /home/guest/botva/Downloads/from_Vladimir/Leningrad\ dolphinarium\ 16\ 09\ 2009/LD_160909_2___.opts ) Is this enough for demonstrating problem ? > > Carl Eugen > _______________________________________________ > Libav-user mailing list > Libav-user@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/libav-user > > To unsubscribe, visit link above, or email > libav-user-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ Libav-user mailing list Libav-user@ffmpeg.org https://ffmpeg.org/mailman/listinfo/libav-user To unsubscribe, visit link above, or email libav-user-requ...@ffmpeg.org with subject "unsubscribe".