From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id A373A48D9C for ; Fri, 26 Jan 2024 17:14:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DAA7D68D182; Fri, 26 Jan 2024 19:14:30 +0200 (EET) Received: from srv-infra-1.infra.inf.glb.tvvideoms.com (www.inf.tvvideoms.com [213.205.126.156]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 37AF368D0B5 for ; Fri, 26 Jan 2024 19:14:24 +0200 (EET) Received: from cji.paris (unknown [172.16.3.159]) by srv-infra-1.infra.inf.glb.tvvideoms.com (Postfix) with ESMTP id 30D1B21604; Fri, 26 Jan 2024 17:14:23 +0000 (UTC) From: Nicolas Gaullier To: ffmpeg-devel@ffmpeg.org Date: Fri, 26 Jan 2024 18:14:20 +0100 Message-Id: <20240126171420.239759-2-nicolas.gaullier@cji.paris> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20240126171420.239759-1-nicolas.gaullier@cji.paris> References: <20240126171420.239759-1-nicolas.gaullier@cji.paris> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/concatdec: fix seek with dts X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Nicolas Gaullier Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Use same heuristic as in fftools. Signed-off-by: Nicolas Gaullier --- libavformat/concatdec.c | 17 +++++++- tests/ref/fate/concat-demuxer-simple2-lavf-ts | 40 ++++++++++++++++++- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c index ffa8ade25b..96de9117fe 100644 --- a/libavformat/concatdec.c +++ b/libavformat/concatdec.c @@ -384,7 +384,22 @@ static int open_file(AVFormatContext *avf, unsigned fileno) if ((ret = match_streams(avf)) < 0) return ret; if (file->inpoint != AV_NOPTS_VALUE) { - if ((ret = avformat_seek_file(cat->avf, -1, INT64_MIN, file->inpoint, file->inpoint, 0)) < 0) + int64_t seek_timestamp = file->inpoint; + if (!(cat->avf->iformat->flags & AVFMT_SEEK_TO_PTS)) { + int dts_heuristic = 0; + int i; + for (i=0; iavf->nb_streams; i++) { + const AVCodecParameters *par = cat->avf->streams[i]->codecpar; + if (par->video_delay) { + dts_heuristic = 1; + break; + } + } + if (dts_heuristic) { + seek_timestamp -= 3*AV_TIME_BASE / 23; + } + } + if ((ret = avformat_seek_file(cat->avf, -1, INT64_MIN, seek_timestamp, seek_timestamp, 0)) < 0) return ret; } return 0; diff --git a/tests/ref/fate/concat-demuxer-simple2-lavf-ts b/tests/ref/fate/concat-demuxer-simple2-lavf-ts index 548cab01c6..329b42fbe9 100644 --- a/tests/ref/fate/concat-demuxer-simple2-lavf-ts +++ b/tests/ref/fate/concat-demuxer-simple2-lavf-ts @@ -126,6 +126,24 @@ audio|0|177970|1.977444|177970|1.977444|2351|0.026122|209|N/A|K__ audio|0|180321|2.003567|180321|2.003567|2351|0.026122|209|N/A|K__ video|1|174764|1.941822|171164|1.901822|3600|0.040000|12678|347800|___|MPEGTS Stream ID|224 video|1|178364|1.981822|174764|1.941822|3600|0.040000|24711|361336|K__ +video|1|125182|1.390911|121582|1.350911|3600|0.040000|12398|254552|___|MPEGTS Stream ID|224 +video|1|128782|1.430911|125182|1.390911|3600|0.040000|13455|267336|___|MPEGTS Stream ID|224 +audio|0|99515|1.105722|99515|1.105722|2351|0.026122|209|308508|K__|MPEGTS Stream ID|192 +audio|0|101866|1.131844|101866|1.131844|2351|0.026122|209|N/A|K__ +audio|0|104217|1.157967|104217|1.157967|2351|0.026122|209|N/A|K__ +audio|0|106568|1.184089|106568|1.184089|2351|0.026122|209|N/A|K__ +audio|0|108919|1.210211|108919|1.210211|2351|0.026122|209|N/A|K__ +audio|0|111270|1.236333|111270|1.236333|2351|0.026122|209|N/A|K__ +audio|0|113621|1.262456|113621|1.262456|2351|0.026122|209|N/A|K__ +audio|0|115972|1.288578|115972|1.288578|2351|0.026122|209|N/A|K__ +audio|0|118323|1.314700|118323|1.314700|2351|0.026122|209|N/A|K__ +audio|0|120674|1.340822|120674|1.340822|2351|0.026122|209|N/A|K__ +audio|0|123025|1.366944|123025|1.366944|2351|0.026122|209|N/A|K__ +audio|0|125376|1.393067|125376|1.393067|2351|0.026122|209|N/A|K__ +audio|0|127727|1.419189|127727|1.419189|2351|0.026122|209|N/A|K__ +audio|0|130078|1.445311|130078|1.445311|2351|0.026122|209|N/A|K__ +video|1|132382|1.470911|128782|1.430911|3600|0.040000|13836|281624|___|MPEGTS Stream ID|224 +video|1|135982|1.510911|132382|1.470911|3600|0.040000|12163|295912|___|MPEGTS Stream ID|224 video|1|139582|1.550911|135982|1.510911|3600|0.040000|12692|311516|___|MPEGTS Stream ID|224 video|1|143182|1.590911|139582|1.550911|3600|0.040000|10824|325052|___|MPEGTS Stream ID|224 video|1|146782|1.630911|143182|1.590911|3600|0.040000|11286|336144|___|MPEGTS Stream ID|224 @@ -142,10 +160,28 @@ audio|0|153588|1.706533|153588|1.706533|2351|0.026122|209|N/A|K__ audio|0|155939|1.732656|155939|1.732656|2351|0.026122|209|N/A|K__ video|1|150382|1.670911|146782|1.630911|3600|0.040000|12678|347800|___|MPEGTS Stream ID|224 video|1|153982|1.710911|150382|1.670911|3600|0.040000|24711|361336|K__ +video|1|146782|1.630911|143182|1.590911|3600|0.040000|12755|98700|___|MPEGTS Stream ID|224 +video|1|150382|1.670911|146782|1.630911|3600|0.040000|12023|111860|___|MPEGTS Stream ID|224 +audio|0|124200|1.380000|124200|1.380000|2351|0.026122|208|152844|K__|MPEGTS Stream ID|192 +audio|0|126551|1.406122|126551|1.406122|2351|0.026122|209|N/A|K__ +audio|0|128902|1.432244|128902|1.432244|2351|0.026122|209|N/A|K__ +audio|0|131253|1.458367|131253|1.458367|2351|0.026122|209|N/A|K__ +audio|0|133604|1.484489|133604|1.484489|2351|0.026122|209|N/A|K__ +audio|0|135955|1.510611|135955|1.510611|2351|0.026122|209|N/A|K__ +audio|0|138306|1.536733|138306|1.536733|2351|0.026122|209|N/A|K__ +audio|0|140657|1.562856|140657|1.562856|2351|0.026122|209|N/A|K__ +audio|0|143008|1.588978|143008|1.588978|2351|0.026122|209|N/A|K__ +audio|0|145359|1.615100|145359|1.615100|2351|0.026122|209|N/A|K__ +audio|0|147710|1.641222|147710|1.641222|2351|0.026122|209|N/A|K__ +audio|0|150061|1.667344|150061|1.667344|2351|0.026122|209|N/A|K__ +audio|0|152412|1.693467|152412|1.693467|2351|0.026122|209|N/A|K__ +audio|0|154763|1.719589|154763|1.719589|2351|0.026122|209|N/A|K__ +video|1|153982|1.710911|150382|1.670911|3600|0.040000|14098|124268|___|MPEGTS Stream ID|224 +video|1|157582|1.750911|153982|1.710911|3600|0.040000|13329|139120|___|MPEGTS Stream ID|224 video|1|161182|1.790911|157582|1.750911|3600|0.040000|12135|155852|___|MPEGTS Stream ID|224 video|1|164782|1.830911|161182|1.790911|3600|0.040000|12282|168448|___|MPEGTS Stream ID|224 video|1|168382|1.870911|164782|1.830911|3600|0.040000|24786|181420|K__|MPEGTS Stream ID|224 video|1|171982|1.910911|168382|1.870911|3600|0.040000|17440|206988|___|MPEGTS Stream ID|224 video|1|175582|1.950911|171982|1.910911|3600|0.040000|15019|224848|___|MPEGTS Stream ID|224 -0|mp2|unknown|audio|[3][0][0][0]|0x0003|s16p|44100|1|mono|0|0|N/A|0/0|0/0|1/90000|0|0.000000|N/A|N/A|64000|N/A|N/A|N/A|N/A|89|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|this is stream 0 -1|mpeg2video|4|video|[2][0][0][0]|0x0002|352|288|0|0|0|0|1|1:1|11:9|yuv420p|8|tv|unknown|unknown|unknown|left|progressive|1|N/A|25/1|25/1|1/90000|N/A|N/A|N/A|N/A|N/A|N/A|N/A|N/A|N/A|60|22|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|this is stream 1|CPB properties|0|0|0|49152|-1 +0|mp2|unknown|audio|[3][0][0][0]|0x0003|s16p|44100|1|mono|0|0|N/A|0/0|0/0|1/90000|0|0.000000|N/A|N/A|64000|N/A|N/A|N/A|N/A|117|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|this is stream 0 +1|mpeg2video|4|video|[2][0][0][0]|0x0002|352|288|0|0|0|0|1|1:1|11:9|yuv420p|8|tv|unknown|unknown|unknown|left|progressive|1|N/A|25/1|25/1|1/90000|N/A|N/A|N/A|N/A|N/A|N/A|N/A|N/A|N/A|68|22|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|this is stream 1|CPB properties|0|0|0|49152|-1 -- 2.30.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".