From patchwork Sun Feb 27 20:03:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hutchinson X-Patchwork-Id: 34538 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:d078:0:0:0:0 with SMTP id x24csp2106113nkx; Sun, 27 Feb 2022 12:03:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJx9Sbv3eBO1DLhm73SYyShcTjVlCo014I9B0jMOxQOrTmCnsV/8T+rn4JXNpn0RF96LVMLh X-Received: by 2002:a17:906:b351:b0:6ca:8d27:526a with SMTP id cd17-20020a170906b35100b006ca8d27526amr13331417ejb.289.1645992220949; Sun, 27 Feb 2022 12:03:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645992220; cv=none; d=google.com; s=arc-20160816; b=Zd0unJ9nQbJ7KTVSSUL/wNuAmnOGtOUWxG14vCk4YvWZE9s0s2rOdV8QXXeRr1zBIc kR1keypEHiEjCPMoUT4FiDm5HspjO6/j1MePDTf5GMKNZ4Qm6L8OeRa+0WPu2sAZfmJB NFbIFhdulrnfWDDYVGelqsYFl76yHF0g9XN1Bi1oRZwWTg/y3jEnJcC+FaMT6kQX6ttc D7TTb8HF+uCZDz3hoNIzcIpsCwSlHxFDOhZNNi68/6UFvam0592ZligxPJRhCalvwcVD 9apqGWAPUe1P1V5AP9sHegdJIaATnKnrESBYJkDuPOHaQh79okgsglVJwxHBGMmKMpTc OQ7w== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=oVjUIpJOttdrDom9FvaUlNINWlPK1nkAumQJ5YJ/FIA=; b=x7Enyxxx3z0/It6dDq9jBw0o4hr0WhFD0F30DSmfAqN7WNdedIgVwvKOZbtZXFbiQF fr+1s9xtsfgHFzvWTswYB9eeICJipIGbfPu+Kqk1sWBgCB2fVspCcmLeNV6g7eW7g2A7 3pUqs1h2cK3eAE2dC8mUWOWWgHHSlYOLPmduOydrE3/We0jruHm4gK0V5GpRwotowkT3 2Y4XXNWjF+5J0io5qrsruTSzc+0r+INgLca2GOFg123H77uktRdWYFwxWqGHlZiugnAi 6Fc/ChsS+vPyZN7hIl8Td2iGpBBZ9Q/ZDlfYHtveZSVRtxXxK1KEVXV4gswI47Sh6OgX UrNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="h/TplvUJ"; 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 td7-20020a1709078c8700b006d20d00ef37si4885839ejc.259.2022.02.27.12.03.39; Sun, 27 Feb 2022 12:03:40 -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=@gmail.com header.s=20210112 header.b="h/TplvUJ"; 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 3834368B15F; Sun, 27 Feb 2022 22:03:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-vs1-f45.google.com (mail-vs1-f45.google.com [209.85.217.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F39FE68B0C4 for ; Sun, 27 Feb 2022 22:03:32 +0200 (EET) Received: by mail-vs1-f45.google.com with SMTP id w4so10981727vsq.1 for ; Sun, 27 Feb 2022 12:03:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=mmt35LSdlLJyuT/z0VBZ9Vq+3zChxDKHWaKZnzcjHBI=; b=h/TplvUJJSOGE42ZXz3ASp3dCQI+3DvZSyztO23ZlhFQlzi3VC/Rvk5RBYpL24CBeE Af3PZWiJNmBifpC6ZK8QBgCa/5gUf5OZtfoDkWw9/XyUkGmR4bcFhLkQ0CRpSWdAY7Ol 5RB+lg2Kg9PACDzJlGdSLmuAXSJb8P81KIfgA8w67QpEX5Dox6LSIV0IOiae8VlsoxnA c69bpzibKVCx/+XW1nWpqewK04y3CQa8uaYG92FafJBOlz+CttxM9vvphWc2wRJ/b44j 47KHfESQLxnxYMbhWmOBDkXV/taJoJ1lnX5bnKR0qAgBAd7Ip64Oh5fAQD8npIlCMmHJ 1dIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=mmt35LSdlLJyuT/z0VBZ9Vq+3zChxDKHWaKZnzcjHBI=; b=u2voNaU4my4l1glSrMB+BkWMwHurP4XqWn4cYRRBYC2ExXsNzVtL1MINSWaYjc4bDn d9qYCrShuMhwxBwYSbKKYqrE2dyHcfFtESYGNxYrT3bQsze99eI1LjhSwosj8UJMXoRk pWQLqJ6RI4yADaCbxabDiC4Ofim03O43buMnji0RQxe+D01JdcBF4JN3o7m4n2V8ncLk nUItGZ50xbmBc78cVL9gPBTEmCZISc3eIMe9KHw6bkWdml0oC7G8Dc4Dytz92Qsfu20f ZDJIlGHfl4psy09/qv53cF5mSH++xlIea8XGlCngA7jSS1ihwCwS/jtVfrpzkcvsSOap tmBQ== X-Gm-Message-State: AOAM533/lbDA5wTmEphEH/2u4ytbwzw9L2rJupU0NY+T52wic5tvMGpE AUihqHn991HTM+CwHHnQ3lRluNS0ul7DJQ== X-Received: by 2002:a05:6102:32c7:b0:31e:6c9d:4786 with SMTP id o7-20020a05610232c700b0031e6c9d4786mr3775690vss.69.1645992210638; Sun, 27 Feb 2022 12:03:30 -0800 (PST) Received: from cappuccino.. ([75.115.109.114]) by smtp.gmail.com with ESMTPSA id h20-20020a056122065400b0032d7987ef1asm1321678vkp.11.2022.02.27.12.03.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Feb 2022 12:03:30 -0800 (PST) From: Stephen Hutchinson To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Feb 2022 15:03:22 -0500 Message-Id: <20220227200322.11600-1-qyot27@gmail.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/avisynth: fix fallbacks for four frameprops 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: OfnbMzDWeJaW If _FieldBased, _Matrix, _ColorRange, or _ChromaLocation haven't been set, that absence would be interpreted as 0, leading to those being set to case 0 instead of default. There is no case 0 for _Primaries and _Transfer, so those were correctly falling back to the default case. Signed-off-by: Stephen Hutchinson --- libavformat/avisynth.c | 184 ++++++++++++++++++++++------------------- 1 file changed, 101 insertions(+), 83 deletions(-) diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index 318588ff52..8ba2bdead2 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -78,6 +78,7 @@ typedef struct AviSynthLibrary { AVSC_DECLARE_FUNC(avs_is_planar_rgba); AVSC_DECLARE_FUNC(avs_get_frame_props_ro); AVSC_DECLARE_FUNC(avs_prop_get_int); + AVSC_DECLARE_FUNC(avs_prop_get_type); AVSC_DECLARE_FUNC(avs_get_env_property); #undef AVSC_DECLARE_FUNC } AviSynthLibrary; @@ -158,6 +159,7 @@ static av_cold int avisynth_load_library(void) LOAD_AVS_FUNC(avs_is_planar_rgba, 1); LOAD_AVS_FUNC(avs_get_frame_props_ro, 1); LOAD_AVS_FUNC(avs_prop_get_int, 1); + LOAD_AVS_FUNC(avs_prop_get_type, 1); LOAD_AVS_FUNC(avs_get_env_property, 1); #undef LOAD_AVS_FUNC @@ -511,30 +513,38 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) avsmap = avs_library.avs_get_frame_props_ro(avs->env, frame); /* Field order */ - switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_FieldBased", 0, &error)) { - case 0: - st->codecpar->field_order = AV_FIELD_PROGRESSIVE; - break; - case 1: - st->codecpar->field_order = AV_FIELD_BB; - break; - case 2: - st->codecpar->field_order = AV_FIELD_TT; - break; - default: + if(avs_library.avs_prop_get_type(avs->env, avsmap, "_FieldBased") == AVS_PROPTYPE_UNSET) { st->codecpar->field_order = AV_FIELD_UNKNOWN; + } else { + switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_FieldBased", 0, &error)) { + case 0: + st->codecpar->field_order = AV_FIELD_PROGRESSIVE; + break; + case 1: + st->codecpar->field_order = AV_FIELD_BB; + break; + case 2: + st->codecpar->field_order = AV_FIELD_TT; + break; + default: + st->codecpar->field_order = AV_FIELD_UNKNOWN; + } } /* Color Range */ - switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_ColorRange", 0, &error)) { - case 0: - st->codecpar->color_range = AVCOL_RANGE_JPEG; - break; - case 1: - st->codecpar->color_range = AVCOL_RANGE_MPEG; - break; - default: + if(avs_library.avs_prop_get_type(avs->env, avsmap, "_ColorRange") == AVS_PROPTYPE_UNSET) { st->codecpar->color_range = AVCOL_RANGE_UNSPECIFIED; + } else { + switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_ColorRange", 0, &error)) { + case 0: + st->codecpar->color_range = AVCOL_RANGE_JPEG; + break; + case 1: + st->codecpar->color_range = AVCOL_RANGE_MPEG; + break; + default: + st->codecpar->color_range = AVCOL_RANGE_UNSPECIFIED; + } } /* Color Primaries */ @@ -637,75 +647,83 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) } /* Matrix coefficients */ - switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_Matrix", 0, &error)) { - case 0: - st->codecpar->color_space = AVCOL_SPC_RGB; - break; - case 1: - st->codecpar->color_space = AVCOL_SPC_BT709; - break; - case 2: - st->codecpar->color_space = AVCOL_SPC_UNSPECIFIED; - break; - case 4: - st->codecpar->color_space = AVCOL_SPC_FCC; - break; - case 5: - st->codecpar->color_space = AVCOL_SPC_BT470BG; - break; - case 6: - st->codecpar->color_space = AVCOL_SPC_SMPTE170M; - break; - case 7: - st->codecpar->color_space = AVCOL_SPC_SMPTE240M; - break; - case 8: - st->codecpar->color_space = AVCOL_SPC_YCGCO; - break; - case 9: - st->codecpar->color_space = AVCOL_SPC_BT2020_NCL; - break; - case 10: - st->codecpar->color_space = AVCOL_SPC_BT2020_CL; - break; - case 11: - st->codecpar->color_space = AVCOL_SPC_SMPTE2085; - break; - case 12: - st->codecpar->color_space = AVCOL_SPC_CHROMA_DERIVED_NCL; - break; - case 13: - st->codecpar->color_space = AVCOL_SPC_CHROMA_DERIVED_CL; - break; - case 14: - st->codecpar->color_space = AVCOL_SPC_ICTCP; - break; - default: + if(avs_library.avs_prop_get_type(avs->env, avsmap, "_Matrix") == AVS_PROPTYPE_UNSET) { st->codecpar->color_space = AVCOL_SPC_UNSPECIFIED; + } else { + switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_Matrix", 0, &error)) { + case 0: + st->codecpar->color_space = AVCOL_SPC_RGB; + break; + case 1: + st->codecpar->color_space = AVCOL_SPC_BT709; + break; + case 2: + st->codecpar->color_space = AVCOL_SPC_UNSPECIFIED; + break; + case 4: + st->codecpar->color_space = AVCOL_SPC_FCC; + break; + case 5: + st->codecpar->color_space = AVCOL_SPC_BT470BG; + break; + case 6: + st->codecpar->color_space = AVCOL_SPC_SMPTE170M; + break; + case 7: + st->codecpar->color_space = AVCOL_SPC_SMPTE240M; + break; + case 8: + st->codecpar->color_space = AVCOL_SPC_YCGCO; + break; + case 9: + st->codecpar->color_space = AVCOL_SPC_BT2020_NCL; + break; + case 10: + st->codecpar->color_space = AVCOL_SPC_BT2020_CL; + break; + case 11: + st->codecpar->color_space = AVCOL_SPC_SMPTE2085; + break; + case 12: + st->codecpar->color_space = AVCOL_SPC_CHROMA_DERIVED_NCL; + break; + case 13: + st->codecpar->color_space = AVCOL_SPC_CHROMA_DERIVED_CL; + break; + case 14: + st->codecpar->color_space = AVCOL_SPC_ICTCP; + break; + default: + st->codecpar->color_space = AVCOL_SPC_UNSPECIFIED; + } } /* Chroma Location */ - switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_ChromaLocation", 0, &error)) { - case 0: - st->codecpar->chroma_location = AVCHROMA_LOC_LEFT; - break; - case 1: - st->codecpar->chroma_location = AVCHROMA_LOC_CENTER; - break; - case 2: - st->codecpar->chroma_location = AVCHROMA_LOC_TOPLEFT; - break; - case 3: - st->codecpar->chroma_location = AVCHROMA_LOC_TOP; - break; - case 4: - st->codecpar->chroma_location = AVCHROMA_LOC_BOTTOMLEFT; - break; - case 5: - st->codecpar->chroma_location = AVCHROMA_LOC_BOTTOM; - break; - default: + if(avs_library.avs_prop_get_type(avs->env, avsmap, "_ChromaLocation") == AVS_PROPTYPE_UNSET) { st->codecpar->chroma_location = AVCHROMA_LOC_UNSPECIFIED; + } else { + switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_ChromaLocation", 0, &error)) { + case 0: + st->codecpar->chroma_location = AVCHROMA_LOC_LEFT; + break; + case 1: + st->codecpar->chroma_location = AVCHROMA_LOC_CENTER; + break; + case 2: + st->codecpar->chroma_location = AVCHROMA_LOC_TOPLEFT; + break; + case 3: + st->codecpar->chroma_location = AVCHROMA_LOC_TOP; + break; + case 4: + st->codecpar->chroma_location = AVCHROMA_LOC_BOTTOMLEFT; + break; + case 5: + st->codecpar->chroma_location = AVCHROMA_LOC_BOTTOM; + break; + default: + st->codecpar->chroma_location = AVCHROMA_LOC_UNSPECIFIED; + } } } else { st->codecpar->field_order = AV_FIELD_UNKNOWN;