From patchwork Sat May 7 11:28:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35666 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp2122783pzb; Sat, 7 May 2022 04:34:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyVcMWAoZfl8xaijqQLWugMH8rVVa/qGrsdA1QAyDTVdDKqVMPVDV3i0QfcRfwDosAx6wBZ X-Received: by 2002:aa7:d916:0:b0:425:d75f:ae68 with SMTP id a22-20020aa7d916000000b00425d75fae68mr8106304edr.270.1651923264220; Sat, 07 May 2022 04:34:24 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hp10-20020a1709073e0a00b006f4408bfffbsi8345514ejc.779.2022.05.07.04.34.23; Sat, 07 May 2022 04:34:24 -0700 (PDT) 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=@outlook.com header.s=selector1 header.b=JSePiWi7; 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4784F68B4A2; Sat, 7 May 2022 14:30:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073037.outbound.protection.outlook.com [40.92.73.37]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 982BA68B3C5 for ; Sat, 7 May 2022 14:30:44 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L2xSKrdLDjZiB9G6YFaP2Xei4XPgzfLrQa7lO2xzFz4vCehh3VRdFNA5nGhIWiVkQY6CfI0KE4FtyqmUz30/KYGX9LFUZN7UkGYKonZulSdluMZAP/nSeZ5r9ONacPBKG00q+gb7PNkbb++fcZ3upNJwr5DKxUOhZtTJWTqQsLJBejjDcgSu/QsRaRU38hrNWC09dKNQ0hLYnFug2YeQssdovJjevapnZ0t5ljHsAzinswPXLrhXqjzwpGcMr7fRHvvrJC/lIhau/jlmWN3l9HCIvyXlTAp5N7KdqLFnrgI5no5uQ1WNqWfErEk+9YXyavW3SuuFsJWONUFRXsKvMA== 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=AgxjIc9796ddtxuJoEAyl82PJdiNaggC18hHJ3wn2WM=; b=TA9VM78ipIePg+sV2niairNDmXCoDtxGAGZ4C0ynfDoDDVqu/R8SUbvEJP1axlp8ZXTaptu7JXQD0oe3x38vsgzOY9fn1eh6jG24sSPYXWQQRO2nu9siDwS4jLKo0CJ4MuDKFbks3ntBwJ0ZWYRzIi6E5TOUMrUNQnTN3jJGlrWQ5/aGmr76m7Z4lEoNisH32GXoZlmvyHHupFcTURdqcROSmvmBfuZ1ffPOg3O61i84rk8+yuEfZxdXqKI0cpwRNq/g0S9iSeQtXjJDP/+mB3OzkK7XXt8NUWBaDoYMBUMopnf5Z+cz/qMG9m/B4+2HuVK8V5Q5KM801DZC8HRSOw== 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=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AgxjIc9796ddtxuJoEAyl82PJdiNaggC18hHJ3wn2WM=; b=JSePiWi7ctiWBc6eGw51ZWHOmx6jXr37VlMdchpCCVnr76Oq5b9w2Ow/3aL07PpjDpJTz2UzD7u9P8ufOO++mUzNCeI3nDE1rlmJ1v0YT5gOVzPhqmR9LeqpXNx4s5wLybMUatjJzg956SeN5bsLS6/aEs+BTWO1KZSth2HLOrCpljvup0AIU1aHxQegccFt8LvgGgcMijPbGgrG8AN3l9aB8OEpQRoh66xiL6wN+WRDouK6R5O+gnpTxIrM7rchwFkTK08aIsd87uX8MtGQTsMSLXxZyVFESzaHnNPCGVMANeA9FXbkVrhEWkPsiCQo0mwi1eVmQqAqKlQHevefTw== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by DB6PR01MB3895.eurprd01.prod.exchangelabs.com (2603:10a6:6:4b::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Sat, 7 May 2022 11:30:43 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Sat, 7 May 2022 11:30:43 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 May 2022 13:28:19 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [BapESKTDvAfl6w38Vp0u4jGMTnNpu9/M] X-ClientProxiedBy: ZRAP278CA0004.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::14) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220507112830.406162-32-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e7dd00b6-7b30-4bf6-2315-08da301d02a2 X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEvwPxT+mwCURHm2qGG32agMpraRfinc1wGxj6w3N61XKr772lAT/Wk9nuTsOLb3OOxf3K+5r0yhoemDIWcpU4xQdbY8Nt46V1SuogEUh1mTG3NRXB/ivGc6qe25jUEEsyROsu5PZSuuy2GvQGy6ZJQ3Wv5gKhfP7tAlLqlu0V5LgRBdaq5BfQWBWABQk/zcXdXjLloHLJ9cyxdl3RagLET5yyd81LC7tJmnNLofdDecS85Hs/+0iUiH40qF0m4eyZkSuVKiKKEO9HQ+Ct2iDe+vtx5pPItCecYHwAQttLlcLEzoxM/WjyMrbDQMommSWZ1JEDHWy+5iRzBJBes0RAWUdu77fusZKRp4wR0CyDz9z0z3nPZERN0mmQDIXtlZ5CDjlgmSAXs9D6a/1W98ihPit362/oGbfAuZc0/VFuFH6VnUtw3W6IKsKeDmbrPHDLE7jvUyxF0jzInJ0EgsGgGkxG5qMoROmJLCz19yay0wpYgEDEGtMpl0hg13fQlJCwibdHOq67sBPWA3lgt//fAHWog0mLZm9BH/dSX0NNrEyO0uwKV1mwK78A5cCo0eH9vfmcvoLka+lSzdiIp0uodnpSHrpIuFnUUSWOsB+/ANHeozmUYTWPm9n2Q/KRalwXDJj4gMmqLKOf0E4hWDKhrj9rCgEM4WIs15lbSo4zmkZGBJpW5ii/gGyfCOVIE5CmF5p8QvhhsAq4WAW6WHFawk1o5/Fs5OZuemv4+YOPv6uvMYrb/tHDqdQS7FHWF1Dfj5GEbrXN7BnNoxA8nv6E07 X-MS-TrafficTypeDiagnostic: DB6PR01MB3895:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3e47PVDUPvYNOQ4uhAircOpErOf0LnoLynLT0uxSKtJM9F1yg0LxMO7i5F5vFp3xQOk5r4iyaIG/7IP1RfHO28pCQHuQZdzecAtbPEYFpINxnEzARkyDumAvlJ36CyDNvLmVmTHNhKDlnXE5mka70jXe97m+D72TLGnNWkflAhOdikK9o1blJ9sr639B8q89/dMRA6c8yfeJxlAQ7M8+vWSGCa8CyJ1PDu0Pmpkf2fyzQIPVHtdXTiDi+DRjHYn1Q0VemthrT2CAvGpsG9k+FEQY8v+VXVttgSL4bDRRLQnmEqMVWDPNmnEk0g494uwEiXJ3fAVzodWPDTuCGt6ZPZ+0Y193SBE1RXfbGkt29P2jljGbBr+OYVgknZ7xMPmWobl2iT7SdhmEIub5Yj8QXMCCxUmMeuSeACl0XPS8nlLLKt7Z09k8HZGecRLm4U+k1H1CZCM+ytAZu1HABGVG0hK12N8Totq2BSGokeWG7DjFs+Qf72x7IV3WQufIBgDbGttZjAotSrMZR0n2wKzo0fWxgq00uM6l2cwtAqzy4hNC+OUbNOiqUsQDTeplNVGEdrFl9GZwy/khsjITIqBhw0f4bANBK1b8RVAU5VOyEkG1IhH0kIGzXWy7bVW9TQuL X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Zk6QwduSeO7iDqPvS8CnRlpPWq1tpPheI1PwI7oFeL/9JDsDE5jNMi1fpVKG+LzU1o7C/Kd4A4cvZ76U+rj7i+nFMn6e5xs5cw6gm1j519rjW7fQ6796nJMyEHGC0Hu84QvOSjZQGR+jEqsOhN5/EbzsvhHD/2FTSXFOPe/edR2xUITqBGEzibwi8qAB0Do5ENlUKySLOrfgOR916/zIEUSjnTVLAzkdUKhw/J+xmswxDdtl6g1Q38uLDDKKLGH6wv+1qmzzw62iiwZUbrGNxMSyQvjB0M7Ch/wyZSOQEPoMzCV31h92Txf6oJ79wRpcgW5IDccKfAoeYNDROFR+KRn70Ucg75+CV7h3mR9TdD3TTd2E5F7v6VWXfykVo+NanEg65kyEZNrbgxtPruYHXUmJuujy/IkOGEmgsfFkoQkGxgQeRV3g0DhUUUiygmrrcR7wRkZhQaODYqy2EmhBJl75NgHu99KB32sA18utEGvzF6RSVVuOXkMPuCRJLiz3/aGVsveV6j/tlNxX6pqzZV9+fBvA/V74+TKTyRg5aedFKrATHqkaAwG1qI8R/79jlKv6He4FdUREtbItOrSMb2H+WdcCyK+s2l6GCi4fj893JFovS4S5lq674clrvTfRq+Pzd9vHT0Ak+zfWdRvHxwihNSFsq5fLZ/T0WJmoZ1bzXa/0bqe/IHj4BsW8CXXVNUoYM3+gGSppoPI9S1MmKON7R3YHeF9kykcir3Oblt/i3P4QsRyJdv6zNf2oSHaEHrH1t4Jf0ECaDkQ3dopWPaoZQnNZoHiIXDdBc4EDxLeXkpkLrNU9qRRewNXMgpfOJub6+FL5b1hB3hmmQyCwfwh9JLpzNchnty9988I/vz72001Als3icW0zmPq/nKEVHrwQ+MzVk4KNQYCs0wjGfAWpO+xbr3FSus1wqsIpk6pDP5qu6+x4LBDovAMzMGPLCZ/5luxRRVRRPXj5m9pGUzpCjxTE6UO0FL5CpK9/APLEcyqI288VQiLMRzMBi7gNENI9QcYWsUNaujt1fB52NFbbUhby8u38IZFPcq14IZilwxn4Pu8PAJFN2J3Lvfa2gdq3cWrGNxAh3Mo9yqmwAVYgrY9/DVOFo1Aa4eth4XhebdY4wt+RjoXDj6izqYNaqipfmOEpjfHeQ12fVC6MK+EkWI3vZp6ZucViduXvXfl78oCaxQLvOUXqN7DiT4lAvKE4ZsBIsiMUoe1rlq2T8RoQRG3ZLOWBIf+mTKlFM/uIporU7LJY4GohGvV1u7yPIi49RtkdP6aBpJiRQmCb6+c9uAGH1uFBu+zgOaCgO9w+tAPLi6Ztr4qNKvY/dNV/1j713Yh5SESHiP7Uijl3LI8sVatzsPmci2i2Gaz4H+w+AFYZ9F/2c5G3LfylW14vIpCWe5EqsbPx0nmA9My5uFYIv+8mli1lhITA6J3Ejs5bl1MjTvE6bFaSM2vMGEfK X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e7dd00b6-7b30-4bf6-2315-08da301d02a2 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2022 11:30:38.4585 (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: DB6PR01MB3895 Subject: [FFmpeg-devel] [PATCH 33/44] avformat/utils: Move guessing frame rate/SAR to avformat.c 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: kx1l/ajLd95a It is not explicitly forbidden to call these functions with muxers (although it is probably intended to be only called by demuxers; av_guess_sample_aspect_ratio even says that "the stream aspect ratio is set by the demuxer"). Signed-off-by: Andreas Rheinhardt --- libavformat/avformat.c | 45 ++++++++++++++++++++++++++++++++++++++++++ libavformat/utils.c | 45 ------------------------------------------ 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/libavformat/avformat.c b/libavformat/avformat.c index 7fab0dd99d..78bec2f736 100644 --- a/libavformat/avformat.c +++ b/libavformat/avformat.c @@ -19,6 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include "libavutil/avassert.h" #include "libavutil/avstring.h" #include "libavutil/channel_layout.h" @@ -436,6 +437,50 @@ error: return ret; } +AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame) +{ + AVRational undef = {0, 1}; + AVRational stream_sample_aspect_ratio = stream ? stream->sample_aspect_ratio : undef; + AVRational codec_sample_aspect_ratio = stream && stream->codecpar ? stream->codecpar->sample_aspect_ratio : undef; + AVRational frame_sample_aspect_ratio = frame ? frame->sample_aspect_ratio : codec_sample_aspect_ratio; + + av_reduce(&stream_sample_aspect_ratio.num, &stream_sample_aspect_ratio.den, + stream_sample_aspect_ratio.num, stream_sample_aspect_ratio.den, INT_MAX); + if (stream_sample_aspect_ratio.num <= 0 || stream_sample_aspect_ratio.den <= 0) + stream_sample_aspect_ratio = undef; + + av_reduce(&frame_sample_aspect_ratio.num, &frame_sample_aspect_ratio.den, + frame_sample_aspect_ratio.num, frame_sample_aspect_ratio.den, INT_MAX); + if (frame_sample_aspect_ratio.num <= 0 || frame_sample_aspect_ratio.den <= 0) + frame_sample_aspect_ratio = undef; + + if (stream_sample_aspect_ratio.num) + return stream_sample_aspect_ratio; + else + return frame_sample_aspect_ratio; +} + +AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame) +{ + AVRational fr = st->r_frame_rate; + AVCodecContext *const avctx = ffstream(st)->avctx; + AVRational codec_fr = avctx->framerate; + AVRational avg_fr = st->avg_frame_rate; + + if (avg_fr.num > 0 && avg_fr.den > 0 && fr.num > 0 && fr.den > 0 && + av_q2d(avg_fr) < 70 && av_q2d(fr) > 210) { + fr = avg_fr; + } + + if (avctx->ticks_per_frame > 1) { + if ( codec_fr.num > 0 && codec_fr.den > 0 && + (fr.num == 0 || av_q2d(codec_fr) < av_q2d(fr)*0.7 && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr))) > 0.1)) + fr = codec_fr; + } + + return fr; +} + int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt, AVStream *ost, const AVStream *ist, enum AVTimebaseSource copy_tb) diff --git a/libavformat/utils.c b/libavformat/utils.c index ebee44f47d..272b8790a6 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -808,51 +808,6 @@ int avformat_network_deinit(void) return 0; } -AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame) -{ - AVRational undef = {0, 1}; - AVRational stream_sample_aspect_ratio = stream ? stream->sample_aspect_ratio : undef; - AVRational codec_sample_aspect_ratio = stream && stream->codecpar ? stream->codecpar->sample_aspect_ratio : undef; - AVRational frame_sample_aspect_ratio = frame ? frame->sample_aspect_ratio : codec_sample_aspect_ratio; - - av_reduce(&stream_sample_aspect_ratio.num, &stream_sample_aspect_ratio.den, - stream_sample_aspect_ratio.num, stream_sample_aspect_ratio.den, INT_MAX); - if (stream_sample_aspect_ratio.num <= 0 || stream_sample_aspect_ratio.den <= 0) - stream_sample_aspect_ratio = undef; - - av_reduce(&frame_sample_aspect_ratio.num, &frame_sample_aspect_ratio.den, - frame_sample_aspect_ratio.num, frame_sample_aspect_ratio.den, INT_MAX); - if (frame_sample_aspect_ratio.num <= 0 || frame_sample_aspect_ratio.den <= 0) - frame_sample_aspect_ratio = undef; - - if (stream_sample_aspect_ratio.num) - return stream_sample_aspect_ratio; - else - return frame_sample_aspect_ratio; -} - -AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame) -{ - AVRational fr = st->r_frame_rate; - AVCodecContext *const avctx = ffstream(st)->avctx; - AVRational codec_fr = avctx->framerate; - AVRational avg_fr = st->avg_frame_rate; - - if (avg_fr.num > 0 && avg_fr.den > 0 && fr.num > 0 && fr.den > 0 && - av_q2d(avg_fr) < 70 && av_q2d(fr) > 210) { - fr = avg_fr; - } - - - if (avctx->ticks_per_frame > 1) { - if ( codec_fr.num > 0 && codec_fr.den > 0 && - (fr.num == 0 || av_q2d(codec_fr) < av_q2d(fr)*0.7 && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr))) > 0.1)) - fr = codec_fr; - } - - return fr; -} - void ff_format_io_close_default(AVFormatContext *s, AVIOContext *pb) { avio_close(pb);