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 8D3B94225E for ; Tue, 1 Mar 2022 12:18:37 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BE0A268B252; Tue, 1 Mar 2022 14:18:34 +0200 (EET) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11olkn2016.outbound.protection.outlook.com [40.92.20.16]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F236F68A77A for ; Tue, 1 Mar 2022 14:18:27 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RXILgX4t0sTiTjWlVx0DCfUoZcBMiLK7KzShCjghVheC2ERq/07xhnhqDuDTFkz7i4vy8hsO8lf0V40COFpatB8GsViKNwDqhD9i8CTWWtx94R+2YiqrbaG/aGBLjiSTNYJ4gX4sqdp0p/77J4gd+9uv3PSiF7E1PxnXTwCGh4YDhLDxk5BK0f4IVKQSES8YbfmNATHQDI5oCd82XHq217b9vMeeBhdtl6SDgioS/pvUVUqDRcyE2YJHLlFQd+vXffkDUCJH813Ki/pFQD8lYj+VaFXZLvw5dYjm+ED6yw6QsGNu3JYJdOBz1QCZADLyjap9M24KiQ1cRof/gq2exA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=EGS6sjoOu4qf8fP7QeXZRYnsz3ZFN5KidmmSN4nC4SM=; b=gVY45ZTn5EVBiCgKwATKwwJ7ym/MwCNAxkMqcqXCZVuYiUjueB8RzfedOAmAXFAfSHGRNVfkvBmD04zsI2q/0jGiAO+WXD3m0x/pPxwdVkCCtsBxdSFin5vkoAJMOo+yKp7yVBt0GKldCacceHE+nVcH9y+0UO+aUbCofvgK+sC5jdq/jETgxqi6pKTfz+hael4wbF27m46kQcVEi5t6j4TDeiHVjGyp9K3GRb2n8s/oQRCr1EtsVm+cu7TV+t66des+7lOtZ38+O7oiLaFxpfv/6tG6Ocq7MnGqTtA1I+aRfhf/thCQaTOaBic4iig0qgYXj8cLO1sAql1cNsudGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EGS6sjoOu4qf8fP7QeXZRYnsz3ZFN5KidmmSN4nC4SM=; b=OIBqbzPfsei8x82B5oIBSCZVMvW6Ubbey4aIhpWAo+oEFKtrg7amonEcZFA0fYEwvWbRUBrxGOPO0cD/LK2u2Jc1VPxr5rZYZFsYNgKUgyERfLPAv4f8UcTtAEVscBGPlhJoIu601HyAMVLIv/xiJW9tw0SL+sN8DaH03bpO5qQvrTNTjl3wUsZlI2yD23h8ZYghfHqPBylLKj9CERkNpjC6AwANt9Vs9rEGOLBLDyDay2y5StbQFFn00Ky9NYaEUJJGau/OFDK8Jc3eSQellHGr2soaqpFxyBjhs55TOcqKXVMRO7QtI2INKyF4vzXdNgimCbVAYrzt3mFYYGyXdw== Received: from SA1PR17MB5122.namprd17.prod.outlook.com (2603:10b6:806:1b5::9) by BN6PR17MB0916.namprd17.prod.outlook.com (2603:10b6:404:6a::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5017.26; Tue, 1 Mar 2022 12:18:25 +0000 Received: from SA1PR17MB5122.namprd17.prod.outlook.com ([fe80::c532:34c4:902:d206]) by SA1PR17MB5122.namprd17.prod.outlook.com ([fe80::c532:34c4:902:d206%5]) with mapi id 15.20.5017.026; Tue, 1 Mar 2022 12:18:25 +0000 From: Ye Chuan To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH] libavformat/concatdev.c: Add unified_time_base opt Thread-Index: AQHYLWZzZkxYqVmbL0arL2n0/T2pYg== Date: Tue, 1 Mar 2022 12:18:25 +0000 Message-ID: <3DE3F3BA-73B7-4878-81F9-E277A9C10F33@hotmail.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [1rzMZ1Bv/kl3/2vHqnifwhIL3pYiwlGF] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b32da1a6-754a-4052-b595-08d9fb7d95fa x-ms-traffictypediagnostic: BN6PR17MB0916:EE_ x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: xq0sLv86Mls1R7D7efU0GeAFCzS89FCyANyp+e/FrwDo0//IE6Ptt/mo2PcWwklVxggnssImh2T8vVoec5/IOBxfW9ZIR6ZKS8VDbzFRTp5T8oX746kbKoN+lMETX50+vJ8X0qodCwqO++nGiIA1l0rl1tw4eHZ4oVp4cuZdiqCFDr1yEDoRxjDnSbHUCGL13bHfj91QhpwGuHEC9a2vN7c4P60+yTwF2uRmViwMLrm6k02MhC9YDNbCuJ27vHKYvnk7TVtPECEfq6cUNSygSoEeQs0rIP/HfmpDm5O2xcuBZqk+2pRcNusIndC1GZj5sLNX+QOBT7fkNsKCysH/DLtVWtXPiKcR/3IW9NHu/DJDnW9NSq9tmZ+UD/X9rV824ir6Rm/Dp8gExQ0EsPbNQJibZwpZK1urMQyFfdpvg7/MRfrufW5ZVLSz4llBdsdn2Uybfod57mk+mM/DmTFk6q44ej9MGYBHGJLXyMQbrzHgljkC6QaC712uhIJsonj2UnYwdP45be/aOpEvDwuWPhqT14Iy0G/jCVjgmRAIYYZOF+o2GDf+Po8hSDSFPCnMRj6qbypYiScZasELekEdLg== x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?TpZYiZtEWC0Mw6GD/AyzE29io7ihnUBW3xuJJkXJmUrpebkecuaWjB1DVQkY?= =?us-ascii?Q?q9nuIcen7gl87GJ2mauvdlh7qw7GaKNWDxoHenSo8XZ7Gs8xkJFMgvyBtCci?= =?us-ascii?Q?z2DrjFZl2A44OVSC+gsiph/pcry+xindR7b2sC5VoW7i+ahQ3pBdKNdkulBq?= =?us-ascii?Q?PNrk4Ikllcl20vDKkyyk5iJjVB9WXevZZGMmEWcoBWkhCrkOWE5JzurFA5+N?= =?us-ascii?Q?BhwAbKFVElapNEwd+4YpQfUUCClmZYMUogrBN8B7GZFBhONQWzvmZ4NlUmkB?= =?us-ascii?Q?gLva6wpI29QrjICR+Mh/YD5nUrww3Qu1BwSpZa03P4+0Ct91MSBaMQG6isCA?= =?us-ascii?Q?WD1VMCq3i8YegsQqV8eJ2pFheYHXS7pFRXtIdbbqQMunFruCCwQo0HOqTui5?= =?us-ascii?Q?faWPJ2mmHOP9Pe2CX8FpSgJub2GUf96Uhp3NEIE0GS41Fi32hyNP4xGxLIkk?= =?us-ascii?Q?iX5l3cH1GmqPW3gDjIXm3oTu7phlKozRsSiASHHvMqP6F7y9h4kJkCYkj23k?= =?us-ascii?Q?1/EIgJHMQ4MWaMi78pnlfPtOnikNn1mtSzSKNPbkLgtNvUptBCPAu0xX6Tii?= =?us-ascii?Q?UflJnPcAcmj+wpze5aC/XurabxKdAKn87Dyuf4R4ShILYaPLTpwXFG5k8M+u?= =?us-ascii?Q?y9Ja9pBWCKI0Bxj1UolFYoTHhuykAtvE6XL6XUCr9bjoKZAIfCAz1xti6RNi?= =?us-ascii?Q?TpDe3tHtYFFw08nmT8MWPQgAXx/7Lvs44eRmnAmP8J5RVBlz6N5UUM/QEC2l?= =?us-ascii?Q?gbkw/VmPnIDpk+FJONsZ73t5oz9EIV7PzFpM1XhbFwpTKf8Y5H4tLFY1chs8?= =?us-ascii?Q?Ax4ebmrc/hSY7TXFobyeGBTFlAPw0ZL/zHJgvqfPxpbOeeBrh28FBOkLreYn?= =?us-ascii?Q?wHAGaND9krPg7PuBSK2+4pgtVs8paRu8Y4lVfIU0Nf+u1agNocnW17Hy/cqh?= =?us-ascii?Q?jl79Go7iXIHestTyXtU8tg=3D=3D?= Content-ID: MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-c704e.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SA1PR17MB5122.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: b32da1a6-754a-4052-b595-08d9fb7d95fa X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Mar 2022 12:18:25.4574 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR17MB0916 Subject: [FFmpeg-devel] [PATCH] libavformat/concatdev.c: Add unified_time_base opt 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 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: In some case, the input files have different time base even though they share the same codec and codec parameters, While processing the packet, it will adjust the pts/dts by its own time base instead of the unified one of the output stream, which may lead to wrong pts/dts or unexpected speed change. So this patch add the "unified_time_base" opt, which could be setted by "-unified_time_base 1" With the option, it will concatenate the input streams whose time base are different , and won't course speed change issue. Signed-off-by: Chuan Ye --- libavformat/concatdec.c | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c index 0603c6e254..2cb656d87e 100644 --- a/libavformat/concatdec.c +++ b/libavformat/concatdec.c @@ -69,6 +69,7 @@ typedef struct { ConcatMatchMode stream_match_mode; unsigned auto_convert; int segment_time_metadata; + int unified_time_base; } ConcatContext; static int concat_probe(const AVProbeData *probe) @@ -782,13 +783,27 @@ static int concat_read_packet(AVFormatContext *avf, AVPacket *pkt) av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &st->time_base), av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &st->time_base)); - delta = av_rescale_q(cat->cur_file->start_time - cat->cur_file->file_inpoint, - AV_TIME_BASE_Q, - cat->avf->streams[pkt->stream_index]->time_base); - if (pkt->pts != AV_NOPTS_VALUE) - pkt->pts += delta; - if (pkt->dts != AV_NOPTS_VALUE) - pkt->dts += delta; + if (cat->unified_time_base) { + /* replace the pkt base on the time base of target output stream */ + AVRational output_tb; + output_tb = avf->streams[cs->out_stream_index]->time_base; + delta = av_rescale_q(cat->cur_file->start_time - cat->cur_file->file_inpoint, + AV_TIME_BASE_Q, + output_tb); + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts = av_rescale_q(pkt->pts, st->time_base, output_tb) + delta; + if (pkt->dts != AV_NOPTS_VALUE) + pkt->dts = av_rescale_q(pkt->dts, st->time_base, output_tb) + delta; + } else { + delta = av_rescale_q(cat->cur_file->start_time - cat->cur_file->file_inpoint, + AV_TIME_BASE_Q, + cat->avf->streams[pkt->stream_index]->time_base); + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts += delta; + if (pkt->dts != AV_NOPTS_VALUE) + pkt->dts += delta; + } + av_log(avf, AV_LOG_DEBUG, " -> pts:%s pts_time:%s dts:%s dts_time:%s\n", av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &st->time_base), av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &st->time_base)); @@ -931,6 +946,8 @@ static const AVOption options[] = { OFFSET(auto_convert), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, DEC }, { "segment_time_metadata", "output file segment start time and duration as packet metadata", OFFSET(segment_time_metadata), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, DEC }, + { "unified_time_base", "adjust to the same time base (from the first stream) while processing packets", + OFFSET(unified_time_base), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, DEC }, { NULL } }; -- 2.30.1 (Apple Git-130) _______________________________________________ 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".