From patchwork Tue Mar 1 12:18:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ye Chuan X-Patchwork-Id: 34562 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:d078:0:0:0:0 with SMTP id x24csp3619925nkx; Tue, 1 Mar 2022 04:18:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJzuSUX2iuWMlP8/y/fXHZSxO3uFQXSwbL7NiB5hcDUKNDZtbQEOzMf5wzbvL8ZDIVLiloTL X-Received: by 2002:a17:906:2695:b0:6ce:f9c:b476 with SMTP id t21-20020a170906269500b006ce0f9cb476mr18758420ejc.235.1646137118917; Tue, 01 Mar 2022 04:18:38 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o9-20020aa7d3c9000000b004108135d23dsi8564246edr.337.2022.03.01.04.18.38; Tue, 01 Mar 2022 04:18:38 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=OIBqbzPf; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0AF6F68A77A; Tue, 1 Mar 2022 14:18:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org 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: TpZYiZtEWC0Mw6GD/AyzE29io7ihnUBW3xuJJkXJmUrpebkecuaWjB1DVQkYq9nuIcen7gl87GJ2mauvdlh7qw7GaKNWDxoHenSo8XZ7Gs8xkJFMgvyBtCciz2DrjFZl2A44OVSC+gsiph/pcry+xindR7b2sC5VoW7i+ahQ3pBdKNdkulBqPNrk4Ikllcl20vDKkyyk5iJjVB9WXevZZGMmEWcoBWkhCrkOWE5JzurFA5+NBhwAbKFVElapNEwd+4YpQfUUCClmZYMUogrBN8B7GZFBhONQWzvmZ4NlUmkBgLva6wpI29QrjICR+Mh/YD5nUrww3Qu1BwSpZa03P4+0Ct91MSBaMQG6isCAWD1VMCq3i8YegsQqV8eJ2pFheYHXS7pFRXtIdbbqQMunFruCCwQo0HOqTui5faWPJ2mmHOP9Pe2CX8FpSgJub2GUf96Uhp3NEIE0GS41Fi32hyNP4xGxLIkkiX5l3cH1GmqPW3gDjIXm3oTu7phlKozRsSiASHHvMqP6F7y9h4kJkCYkj23k1/EIgJHMQ4MWaMi78pnlfPtOnikNn1mtSzSKNPbkLgtNvUptBCPAu0xX6TiiUflJnPcAcmj+wpze5aC/XurabxKdAKn87Dyuf4R4ShILYaPLTpwXFG5k8M+uy9Ja9pBWCKI0Bxj1UolFYoTHhuykAtvE6XL6XUCr9bjoKZAIfCAz1xti6RNiTpDe3tHtYFFw08nmT8MWPQgAXx/7Lvs44eRmnAmP8J5RVBlz6N5UUM/QEC2lgbkw/VmPnIDpk+FJONsZ73t5oz9EIV7PzFpM1XhbFwpTKf8Y5H4tLFY1chs8Ax4ebmrc/hSY7TXFobyeGBTFlAPw0ZL/zHJgvqfPxpbOeeBrh28FBOkLreYnwHAGaND9krPg7PuBSK2+4pgtVs8paRu8Y4lVfIU0Nf+u1agNocnW17Hy/cqhjl79Go7iXIHestTyXtU8tg== 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Xavd47ncWume 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 } };