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 ABD2843CAC for ; Sun, 4 Sep 2022 19:08:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id ADE6568B898; Sun, 4 Sep 2022 22:08:44 +0300 (EEST) Received: from mail-vs1-f42.google.com (mail-vs1-f42.google.com [209.85.217.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E940268B83C for ; Sun, 4 Sep 2022 22:08:38 +0300 (EEST) Received: by mail-vs1-f42.google.com with SMTP id j6so7058696vsr.0 for ; Sun, 04 Sep 2022 12:08:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date; bh=EHZ5Xq1FYam3/7s+S52HRXZ4Qc8TyzpDoPVdWPJRjmg=; b=dku6iK1gsiJwZy7Jebrg/iDbgZVRLChoZVrhqzpimZw6x0e5uiQDl/1emYABWQ8Y6G P81XZD+vD14YKz5lt5hDDDMUkC9V1mSjxNUdryAFgQkunuq0yhAPShysaRL+1Z2Q9zS3 gNAumzs0ewSv/mqmJWUgEKCF8BBwMpDrBAg8884nLAlfGFPVnaWw8LMcSaiRRnunKr19 CeQFQLzLHGlSWGWOjUZ5+1Z+aq7VssbIda8OZw70G/XXcJnDwHG6Ks+XqY+j+gCbfCMJ hYAk7PIzXU6IuOqa0dzkNGtiv/P5QX93H8CCB59dO5zTGxnO3PHqtiI647BOuSTsuAjw dzrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date; bh=EHZ5Xq1FYam3/7s+S52HRXZ4Qc8TyzpDoPVdWPJRjmg=; b=c9Fjgf6elfXD58Be3kMt+094pAMygKED848hlT+HaPmHGqpnwQKUR8vasnNobAtwQr f0VyHSYt7UYNeGT2iV2JZIc3HsuuVtoTEDdvVlrYEeylAnlJus2yBlQXfxZMbWVIqqEh Y02RECUntijJOylaSUYYDY1HKj3olJzkQ4XuqKD4O6sKi6I2H7YMG5X5FpTjz8KmJv5V 9ZlCEhNfIw1qQBr+GTFJGAxL+yZTnVMTaRxYg7SmJ78urtTZ5wyecy+vz8910j1WpkRZ epWz8qQCQg0XQkLdAA9cQ064SDxdr3JjMKvyErjW66V33iD2iagnLMgy0FphTt+ZgpeI 6tLQ== X-Gm-Message-State: ACgBeo3qm+EbZN01bKw6OktVmTpVBi4rVA2lxnPXNx7K9mixvSep1KBM nDYNovLiRg1zTCZFK53q1Uum2uYoWAeFtg== X-Google-Smtp-Source: AA6agR7PEWjZnxQOaUUpQRm1nwJJBDKnt48F+YCF9AHoe55xff+Ym+8PoenNhxHFxkfzHjyzoCXkhQ== X-Received: by 2002:a67:eb55:0:b0:390:9aea:bfad with SMTP id x21-20020a67eb55000000b003909aeabfadmr12018528vso.49.1662318517295; Sun, 04 Sep 2022 12:08:37 -0700 (PDT) Received: from [192.168.1.15] (075-115-109-114.inf.spectrum.com. [75.115.109.114]) by smtp.gmail.com with ESMTPSA id 2-20020a1f1902000000b00377fba67271sm1155762vkz.34.2022.09.04.12.08.36 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 04 Sep 2022 12:08:36 -0700 (PDT) Message-ID: <8fbe604d-86b7-1cde-d35a-d4960cddd86d@gmail.com> Date: Sun, 4 Sep 2022 15:08:36 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Content-Language: en-US To: FFmpeg development discussions and patches References: <20220831002340.31886-1-qyot27@gmail.com> <20220831002340.31886-3-qyot27@gmail.com> From: Stephen Hutchinson In-Reply-To: <20220831002340.31886-3-qyot27@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH 2/3 v2] avformat/avisynth: implement avisynth_flags 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 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 8/30/22 8:23 PM, Stephen Hutchinson wrote: > Signed-off-by: Stephen Hutchinson > --- > libavformat/avisynth.c | 52 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 52 insertions(+) > > diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c > index d978e6ec40..7bb2977383 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" > > @@ -85,7 +86,18 @@ typedef struct AviSynthLibrary { > #undef AVSC_DECLARE_FUNC > } AviSynthLibrary; > > +typedef enum AviSynthFlags { > + AVISYNTH_FRAMEPROP_FIELD_ORDER = (1 << 0), > + AVISYNTH_FRAMEPROP_RANGE = (1 << 1), > + AVISYNTH_FRAMEPROP_PRIMARIES = (1 << 2), > + AVISYNTH_FRAMEPROP_TRANSFER = (1 << 3), > + AVISYNTH_FRAMEPROP_MATRIX = (1 << 4), > + AVISYNTH_FRAMEPROP_CHROMA_LOCATION = (1 << 5), > + AVISYNTH_FRAMEPROP_SAR = (1 << 6), > +} AviSynthFlags; > + > typedef struct AviSynthContext { > + const AVClass *class; > AVS_ScriptEnvironment *env; > AVS_Clip *clip; > const AVS_VideoInfo *vi; > @@ -100,6 +112,8 @@ typedef struct AviSynthContext { > > int error; > > + uint32_t flags; > + > /* Linked list pointers. */ > struct AviSynthContext *next; > } AviSynthContext; > @@ -518,6 +532,7 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) > avsmap = avs_library.avs_get_frame_props_ro(avs->env, frame); > > /* Field order */ > + if(avs->flags & AVISYNTH_FRAMEPROP_FIELD_ORDER) { > if(avs_library.avs_prop_get_type(avs->env, avsmap, "_FieldBased") == AVS_PROPTYPE_UNSET) { > st->codecpar->field_order = AV_FIELD_UNKNOWN; > } else { > @@ -535,8 +550,10 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) > st->codecpar->field_order = AV_FIELD_UNKNOWN; > } > } > + } > > /* Color Range */ > + if(avs->flags & AVISYNTH_FRAMEPROP_RANGE) { > if(avs_library.avs_prop_get_type(avs->env, avsmap, "_ColorRange") == AVS_PROPTYPE_UNSET) { > st->codecpar->color_range = AVCOL_RANGE_UNSPECIFIED; > } else { > @@ -551,8 +568,10 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) > st->codecpar->color_range = AVCOL_RANGE_UNSPECIFIED; > } > } > + } > > /* Color Primaries */ > + if(avs->flags & AVISYNTH_FRAMEPROP_PRIMARIES) { > switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_Primaries", 0, &error)) { > case 1: > st->codecpar->color_primaries = AVCOL_PRI_BT709; > @@ -593,8 +612,10 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) > default: > st->codecpar->color_primaries = AVCOL_PRI_UNSPECIFIED; > } > + } > > /* Color Transfer Characteristics */ > + if(avs->flags & AVISYNTH_FRAMEPROP_TRANSFER) { > switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_Transfer", 0, &error)) { > case 1: > st->codecpar->color_trc = AVCOL_TRC_BT709; > @@ -650,8 +671,10 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) > default: > st->codecpar->color_trc = AVCOL_TRC_UNSPECIFIED; > } > + } > > /* Matrix coefficients */ > + if(avs->flags & AVISYNTH_FRAMEPROP_MATRIX) { > if(avs_library.avs_prop_get_type(avs->env, avsmap, "_Matrix") == AVS_PROPTYPE_UNSET) { > st->codecpar->color_space = AVCOL_SPC_UNSPECIFIED; > } else { > @@ -702,8 +725,10 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) > st->codecpar->color_space = AVCOL_SPC_UNSPECIFIED; > } > } > + } > > /* Chroma Location */ > + if(avs->flags & AVISYNTH_FRAMEPROP_CHROMA_LOCATION) { > if(avs_library.avs_prop_get_type(avs->env, avsmap, "_ChromaLocation") == AVS_PROPTYPE_UNSET) { > st->codecpar->chroma_location = AVCHROMA_LOC_UNSPECIFIED; > } else { > @@ -730,11 +755,14 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) > st->codecpar->chroma_location = AVCHROMA_LOC_UNSPECIFIED; > } > } > + } > > /* Sample aspect ratio */ > + if(avs->flags & AVISYNTH_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 +1168,29 @@ static int avisynth_read_seek(AVFormatContext *s, int stream_index, > return 0; > } > > +#define AVISYNTH_FRAMEPROP_DEFAULT AVISYNTH_FRAMEPROP_FIELD_ORDER | AVISYNTH_FRAMEPROP_RANGE | \ > + AVISYNTH_FRAMEPROP_PRIMARIES | AVISYNTH_FRAMEPROP_TRANSFER | \ > + AVISYNTH_FRAMEPROP_MATRIX | AVISYNTH_FRAMEPROP_CHROMA_LOCATION > +#define OFFSET(x) offsetof(AviSynthContext, x) > +static const AVOption avisynth_options[] = { > + { "avisynth_flags", "set flags related to reading frame properties from script (AviSynth+ v3.7.1 or higher)", OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = AVISYNTH_FRAMEPROP_DEFAULT}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM, "flags" }, > + { "field_order", "read field order", 0, AV_OPT_TYPE_CONST, {.i64 = AVISYNTH_FRAMEPROP_FIELD_ORDER}, 0, 1, AV_OPT_FLAG_DECODING_PARAM, "flags" }, > + { "range", "read color range", 0, AV_OPT_TYPE_CONST, {.i64 = AVISYNTH_FRAMEPROP_RANGE}, 0, 1, AV_OPT_FLAG_DECODING_PARAM, "flags" }, > + { "primaries", "read color primaries", 0, AV_OPT_TYPE_CONST, {.i64 = AVISYNTH_FRAMEPROP_PRIMARIES}, 0, 1, AV_OPT_FLAG_DECODING_PARAM, "flags" }, > + { "transfer", "read color transfer characteristics", 0, AV_OPT_TYPE_CONST, {.i64 = AVISYNTH_FRAMEPROP_TRANSFER}, 0, 1, AV_OPT_FLAG_DECODING_PARAM, "flags" }, > + { "matrix", "read matrix coefficients", 0, AV_OPT_TYPE_CONST, {.i64 = AVISYNTH_FRAMEPROP_MATRIX}, 0, 1, AV_OPT_FLAG_DECODING_PARAM, "flags" }, > + { "chroma_location", "read chroma location", 0, AV_OPT_TYPE_CONST, {.i64 = AVISYNTH_FRAMEPROP_CHROMA_LOCATION}, 0, 1, AV_OPT_FLAG_DECODING_PARAM, "flags" }, > + { "sar", "read sample aspect ratio", 0, AV_OPT_TYPE_CONST, {.i64 = AVISYNTH_FRAMEPROP_SAR}, 0, 1, AV_OPT_FLAG_DECODING_PARAM, "flags" }, > + { 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 +1200,5 @@ const AVInputFormat ff_avisynth_demuxer = { > .read_close = avisynth_read_close, > .read_seek = avisynth_read_seek, > .extensions = "avs", > + .priv_class = &avisynth_demuxer_class, > }; Pushed. _______________________________________________ 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".