From patchwork Mon Aug 29 00:02:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hutchinson X-Patchwork-Id: 37538 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp1633664pzh; Sun, 28 Aug 2022 17:03:19 -0700 (PDT) X-Google-Smtp-Source: AA6agR7zyECbvfrzJqscZqwKsVmt863PGdJdIuLl4FJSP7vMlA0X2RIoj4u/kttuKhhZjRFI57G9 X-Received: by 2002:a17:907:9484:b0:73c:37bb:c4d7 with SMTP id dm4-20020a170907948400b0073c37bbc4d7mr12276220ejc.748.1661731399402; Sun, 28 Aug 2022 17:03:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661731399; cv=none; d=google.com; s=arc-20160816; b=Hfxom8By82egFI/x7QKUIhsk7wS3LllFvXduTkyRV47hYLRLi7SiFcmoyDescF6V4G RsReCJ42uMWLqkYEcum0U/rWqX44+20MiSgNGCKsOL3lmN2eWzoyA8MjBxqqNy4WF9RJ tPkOstqEP3nnckAVHWfILr+rT7KgRv7t6ibB64AyT7RW6daHemj560lSfKWUeum/6idr weURw4mXrQICiP9Yb7481SrQfkS3gDIA9epmoG2HOW6pWfht4FwTHovbuv0Aissb/2Wv cCssqUiiXv//Au0K6AuVsQO0mj8qTOi9M5vtjsm8osEG6p36hw65zwz/9uR4QNdixXA9 X51Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=ViBoTfArEp/ir6lBdDXcHSpI5NLTVbyHlh83sSP+V7A=; b=iaLIfQmNc86EqRPSJNMJAcjNlbYb23+VkBdSlJLsRHiI+MRMGbSVhRffObmZlD+m9e 6L0mGxh4nJjK310OOecwlLFyasa9cyU1hkUQKK1sh2t3zWv7R0IXQMbY3/WpErbQtBox lkjAiHxu3Q0FijcEFn5hYkrWzZDlt7ypWnQXPOHaM7at3xUj2O60TTzzvKE9qH1IdkAv H+9CEMBkBEo4cdtAw0Gkv9NpvklTe/0iwhIOIvAHCF1YHGo4ttqbtL9qZ8hXbxLL5lOd /FwUkyGcYXakskAPv4wv6y9BkOQzcUs8lIE7nY5lmnJ7XusrdNfF+A9l26/A3V06psX5 Whpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=FqVwPQTM; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r26-20020a50c01a000000b00446d0b01815si4744740edb.338.2022.08.28.17.03.19; Sun, 28 Aug 2022 17:03:19 -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=@gmail.com header.s=20210112 header.b=FqVwPQTM; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3B1BD68B8BD; Mon, 29 Aug 2022 03:03:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-vs1-f52.google.com (mail-vs1-f52.google.com [209.85.217.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 289BD68B7D5 for ; Mon, 29 Aug 2022 03:02:55 +0300 (EEST) Received: by mail-vs1-f52.google.com with SMTP id j6so906131vsr.0 for ; Sun, 28 Aug 2022 17:02:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=ElJDvJQ8KM2aXaB2kw92aGESe+K9Bc0cc0AzYZLCJSs=; b=FqVwPQTM1fht03AhE5UU9pwx0A7RdShkpw+JvWuHsSeRZ1VdeT9sd1Uuw3Nmz5jM0T 4NyToStX+lm+gpfYDHZRBbqKTJsMNADHB0+g6QSDiRPpvQjNThPOOuL97irhIGG+ZwrX Z/qZBEp+ZXPHXzEwC8hpUUscAcNjVKYAuRoa9Ww56rVy2fxKI5z4l63Ndj9P1XDfmtIS g1YddEdU0+SCO0bAP2wsZ1bIuTS+PypKpjr6KREeitdBYw7SSQtkwfBCR0jwCauBoG4l nmhZCya1IDWilsheKrM9u6+BUCkKI7hjExk+elz9ZjcKDjbz7mE5q3Ypo8QDoJepsQYH 61tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=ElJDvJQ8KM2aXaB2kw92aGESe+K9Bc0cc0AzYZLCJSs=; b=W8VoigCi6fH92/ENIU1bYCBuRqKvi1isWG7QuQVBgJT9FFS4lexeDbeWSyvW7/eqnS GUQk8kzSmtwJ8G07czNWYYgP55pVqiZZnuxtJ9zJhoQN+vvQf1YR9u82L/wtHYK2uudd XO3qmJ0JfZ0d7/r/z+rhh7Bljdtgz/6nAai8124oWknHD6lWfp56xir9NB/6cRxXGoAA pPoxPD6uShKJQzbCCya1CaPBIjXoN8ymBw5R3fewhw4uyFMkNpFu8mIQ30kdMUa8SLGx ATts8LXkjTqZkuNWnKV43Dye4AwZbwqajqh/nk3sFgkWKwlzIqkQGFLYCQ9ap6VjEo66 4kqg== X-Gm-Message-State: ACgBeo3uzwaaJkTxpcDP30W/P8fpLGV9iVuMn4rfGxb6f1+zPadCQxTd 7AfUxuNTQC0InThYFX1KDYVvwTut5YxDvw== X-Received: by 2002:a67:ea58:0:b0:38f:d89a:e4b3 with SMTP id r24-20020a67ea58000000b0038fd89ae4b3mr2526190vso.51.1661731373410; Sun, 28 Aug 2022 17:02:53 -0700 (PDT) Received: from cappuccino.. (075-115-109-114.inf.spectrum.com. [75.115.109.114]) by smtp.gmail.com with ESMTPSA id z5-20020ab05645000000b0039f07e29623sm1382804uaa.4.2022.08.28.17.02.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Aug 2022 17:02:52 -0700 (PDT) From: Stephen Hutchinson To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Aug 2022 20:02:37 -0400 Message-Id: <20220829000244.71123-3-qyot27@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220829000244.71123-1-qyot27@gmail.com> References: <20220829000244.71123-1-qyot27@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/9] avformat/avisynth: add read_frameprop_sar option 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: Stephen Hutchinson Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: VDqYkY85m3sP Because SAR is much more likely to be negatively affected by operations made in-script, given that resizing is probably far more common than the sort of color manipulation involved in most of the other frame properties, the safest option is to disable reading it by default, allowing users to opt in. Signed-off-by: Stephen Hutchinson --- libavformat/avisynth.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index d978e6ec40..d503c7ed40 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -21,6 +21,7 @@ #include "libavutil/attributes.h" #include "libavutil/internal.h" +#include "libavutil/opt.h" #include "libavcodec/internal.h" @@ -86,6 +87,7 @@ typedef struct AviSynthLibrary { } AviSynthLibrary; typedef struct AviSynthContext { + const AVClass *class; AVS_ScriptEnvironment *env; AVS_Clip *clip; const AVS_VideoInfo *vi; @@ -100,6 +102,9 @@ typedef struct AviSynthContext { int error; + /* (de)activate reading frame properties */ + int frameprop_sar; + /* Linked list pointers. */ struct AviSynthContext *next; } AviSynthContext; @@ -732,9 +737,11 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) } /* Sample aspect ratio */ - sar_num = avs_library.avs_prop_get_int(avs->env, avsmap, "_SARNum", 0, &error); - sar_den = avs_library.avs_prop_get_int(avs->env, avsmap, "_SARDen", 0, &error); - st->sample_aspect_ratio = (AVRational){ sar_num, sar_den }; + if (avs->frameprop_sar) { + sar_num = avs_library.avs_prop_get_int(avs->env, avsmap, "_SARNum", 0, &error); + sar_den = avs_library.avs_prop_get_int(avs->env, avsmap, "_SARDen", 0, &error); + st->sample_aspect_ratio = (AVRational){ sar_num, sar_den }; + } avs_library.avs_release_video_frame(frame); } else { @@ -1140,6 +1147,19 @@ static int avisynth_read_seek(AVFormatContext *s, int stream_index, return 0; } +#define OFFSET(x) offsetof(AviSynthContext, x) +static const AVOption avisynth_options[] = { + { "read_frameprop_sar", "Read SAR from script's frame properties (AviSynth+ v3.7.1+).", OFFSET(frameprop_sar), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, AV_OPT_FLAG_DECODING_PARAM }, + { NULL }, +}; + +static const AVClass avisynth_demuxer_class = { + .class_name = "AviSynth demuxer", + .item_name = av_default_item_name, + .option = avisynth_options, + .version = LIBAVUTIL_VERSION_INT, +}; + const AVInputFormat ff_avisynth_demuxer = { .name = "avisynth", .long_name = NULL_IF_CONFIG_SMALL("AviSynth script"), @@ -1149,4 +1169,5 @@ const AVInputFormat ff_avisynth_demuxer = { .read_close = avisynth_read_close, .read_seek = avisynth_read_seek, .extensions = "avs", + .priv_class = &avisynth_demuxer_class, };