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 E20D846A1F for ; Sun, 28 Jul 2024 13:09:13 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DEC9868D7CD; Sun, 28 Jul 2024 16:09:10 +0300 (EEST) Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B889868C46F for ; Sun, 28 Jul 2024 16:09:04 +0300 (EEST) Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-2f01e9f53e3so39599371fa.1 for ; Sun, 28 Jul 2024 06:09:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1722172143; x=1722776943; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=pjBVW19bV07mITWm7vFgulJYr5REBg5UUmlp1pYa28U=; b=V/qRMi5mB2SUjI2UmRBRbP1kKjF/h0eTqCHmSE+RN8P5hgO4jS4JMbe3wMVWuYhh8h IYt4EoUTwdFb686u1YE0rxQAnsuIkgR3gPFo1Ro7cDhSRC/vz39ErKZihsRCEWmcERAK d6Dyfb0fecTK1g9NiTQTnI/UgRD1Sluod/sEjtRWaSD9Ct0WG2wcteS3y/47qtD0WvkR DO1zn4Cj/JMFSztLnGm2ml8ruEPsplx5Z9+9YEGJVr3ZENsEdh91sKuYJr0IPzQiKAnR Cl6UTBOiT0uIrNZGb4bp0Bi0J64o3TLBLWCB8YkV5sM+LR16fST8Bedx+oOshELQTMDk Gy1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722172143; x=1722776943; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=pjBVW19bV07mITWm7vFgulJYr5REBg5UUmlp1pYa28U=; b=LVK2oqvRQA8tpNxAxjSNnA37yAahqdclKgd0UNQWzbUGtOyYA++HvcOnbzV9XLwm39 XTbEAdCuP3rNGN0o6x5X+nT3GeZurXi0MDSkVOV4hQaf9Ni10hJxpLvWVzlsoW0jDEHp aPvUDeBE6o3TzQhOtOtjYnsDK+ZvJkWt3qjwMbUKtQ17AAoI1qiJ//8v7MEwrcrlfvi1 REw7pLdp0peLMBithgpfULKJB1s3Bj9s3BKZbIrB+Cd0N3JCoRXeCm6EagK+iLqKN1Vv TZpAgH9XmZY834Feye+pp5Kq367NHHPm7lutZ6kKn+ca0Rtc6d0uxgThodvCvu+uINdv PnSA== X-Gm-Message-State: AOJu0Yx8IZb7W3qXwtWo+VU11KnNxyLvR+fUPM3BKvqV+toHRXlwCPro TzZVLv2KtW2iqyZ5dlmYFEHVnoVivm149CCBCGFGItRCtNMaCiUzff/tYgBCq7k= X-Google-Smtp-Source: AGHT+IHpsoy6iTuODbPkplatjXO2D7Dfc7EAizy5MQ8ieckkFa3cD429YnzLpJ9xq+4+BVchhykgrQ== X-Received: by 2002:a2e:9d87:0:b0:2ef:32bb:5368 with SMTP id 38308e7fff4ca-2f12ee10842mr40033021fa.11.1722172142715; Sun, 28 Jul 2024 06:09:02 -0700 (PDT) Received: from [192.168.178.81] (dslb-088-072-175-225.088.072.pools.vodafone-ip.de. [88.72.175.225]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a7acab2316dsm386481166b.2.2024.07.28.06.09.01 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 28 Jul 2024 06:09:02 -0700 (PDT) Message-ID: Date: Sun, 28 Jul 2024 15:09:00 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: Content-Language: en-US From: Ramiro Polla In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH v3 1/2] libavformat/vapoursynth: Update to API version 4, load library at runtime 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 2024-07-23 16:51, Stefan Oltmanns via ffmpeg-devel wrote: > this is revised patch, this is the first part that just updates to the > API v4 of VapourSynth. > > Changes in API v4: > -All functions previously in header are now part of the "vssapi" object > -Renames of different types and functions > -YCoCg is not treated as different format to YUV anymore > -Some pointers to arrays are now arrays inside a struct. > From 164a440ffbb5951ca38bfff56e7b62bd677d1f52 Mon Sep 17 00:00:00 2001 > From: Stefan Oltmanns > Date: Tue, 23 Jul 2024 16:15:36 +0200 > Subject: [PATCH 1/2] avformat/vapoursynth: Update to API version 4 > > Signed-off-by: Stefan Oltmanns > --- > configure | 2 +- > libavformat/vapoursynth.c | 84 +++++++++++++++++++++------------------ > 2 files changed, 46 insertions(+), 40 deletions(-) > > diff --git a/configure b/configure > index f6f5c29fea..c50b5ad4b4 100755 > --- a/configure > +++ b/configure > @@ -7085,7 +7085,7 @@ enabled rkmpp && { require_pkg_config rkmpp rockchip_mpp rockchip/r > { enabled libdrm || > die "ERROR: rkmpp requires --enable-libdrm"; } > } > -enabled vapoursynth && require_pkg_config vapoursynth "vapoursynth-script >= 42" VSScript.h vsscript_init > +enabled vapoursynth && require_pkg_config vapoursynth "vapoursynth-script >= 55" VSScript4.h getVSScriptAPI > > > if enabled gcrypt; then > diff --git a/libavformat/vapoursynth.c b/libavformat/vapoursynth.c > index 8a2519e19a..ce15f68180 100644 > --- a/libavformat/vapoursynth.c > +++ b/libavformat/vapoursynth.c > @@ -25,8 +25,7 @@ > > #include > > -#include > -#include > +#include > > #include "libavutil/avassert.h" > #include "libavutil/avstring.h" > @@ -41,6 +40,7 @@ > #include "internal.h" > > struct VSState { > + const VSSCRIPTAPI *vssapi; > VSScript *vss; > }; > > @@ -49,10 +49,10 @@ typedef struct VSContext { > > AVBufferRef *vss_state; > > + const VSSCRIPTAPI *vssapi; > const VSAPI *vsapi; > - VSCore *vscore; > > - VSNodeRef *outnode; > + VSNode *outnode; > int is_cfr; > int current_frame; > > @@ -75,8 +75,7 @@ static void free_vss_state(void *opaque, uint8_t *data) > struct VSState *vss = opaque; > > if (vss->vss) { > - vsscript_freeScript(vss->vss); > - vsscript_finalize(); > + vss->vssapi->freeScript(vss->vss); > } > } > > @@ -90,7 +89,6 @@ static av_cold int read_close_vs(AVFormatContext *s) > av_buffer_unref(&vs->vss_state); > > vs->vsapi = NULL; > - vs->vscore = NULL; > vs->outnode = NULL; > > return 0; > @@ -106,7 +104,7 @@ static av_cold int is_native_endian(enum AVPixelFormat pixfmt) > return pd && (!!HAVE_BIGENDIAN == !!(pd->flags & AV_PIX_FMT_FLAG_BE)); > } > > -static av_cold enum AVPixelFormat match_pixfmt(const VSFormat *vsf, int c_order[4]) > +static av_cold enum AVPixelFormat match_pixfmt(const VSVideoFormat *vsf, int c_order[4]) > { > static const int yuv_order[4] = {0, 1, 2, 0}; > static const int rgb_order[4] = {1, 2, 0, 0}; > @@ -128,13 +126,12 @@ static av_cold enum AVPixelFormat match_pixfmt(const VSFormat *vsf, int c_order[ > pd->log2_chroma_h != vsf->subSamplingH) > continue; > > - is_rgb = vsf->colorFamily == cmRGB; > + is_rgb = vsf->colorFamily == cfRGB; > if (is_rgb != !!(pd->flags & AV_PIX_FMT_FLAG_RGB)) > continue; > > - is_yuv = vsf->colorFamily == cmYUV || > - vsf->colorFamily == cmYCoCg || > - vsf->colorFamily == cmGray; > + is_yuv = vsf->colorFamily == cfYUV || > + vsf->colorFamily == cfGray; > if (!is_rgb && !is_yuv) > continue; > > @@ -176,15 +173,30 @@ static av_cold int read_header_vs(AVFormatContext *s) > int64_t sz = avio_size(pb); > char *buf = NULL; > char dummy; > + char vsfmt[32]; > const VSVideoInfo *info; > struct VSState *vss_state; > int err = 0; > > + if (!(vs->vssapi = getVSScriptAPI(VSSCRIPT_API_VERSION))) { > + av_log(s, AV_LOG_ERROR, "Failed to initialize VSScript (possibly PYTHONPATH not set).\n"); > + err = AVERROR_EXTERNAL; > + goto done; > + } > + > + if (!(vs->vsapi = vs->vssapi->getVSAPI(VAPOURSYNTH_API_VERSION))) { > + av_log(s, AV_LOG_ERROR, "Could not get VSAPI. " > + "Check VapourSynth installation.\n"); > + err = AVERROR_EXTERNAL; > + goto done; > + } > + > vss_state = av_mallocz(sizeof(*vss_state)); > if (!vss_state) { > err = AVERROR(ENOMEM); > goto done; > } > + vss_state->vssapi = vs->vssapi; > > vs->vss_state = av_buffer_create(NULL, 0, free_vss_state, vss_state, 0); > if (!vs->vss_state) { > @@ -193,16 +205,9 @@ static av_cold int read_header_vs(AVFormatContext *s) > goto done; > } > > - if (!vsscript_init()) { > - av_log(s, AV_LOG_ERROR, "Failed to initialize VSScript (possibly PYTHONPATH not set).\n"); > - err = AVERROR_EXTERNAL; > - goto done; > - } > - > - if (vsscript_createScript(&vss_state->vss)) { > + if (!(vss_state->vss = vs->vssapi->createScript(NULL))) { > av_log(s, AV_LOG_ERROR, "Failed to create script instance.\n"); > err = AVERROR_EXTERNAL; > - vsscript_finalize(); > goto done; > } > > @@ -235,17 +240,14 @@ static av_cold int read_header_vs(AVFormatContext *s) > } > > buf[sz] = '\0'; > - if (vsscript_evaluateScript(&vss_state->vss, buf, s->url, 0)) { > - const char *msg = vsscript_getError(vss_state->vss); > + if (vs->vssapi->evaluateBuffer(vss_state->vss, buf, s->url)) { > + const char *msg = vs->vssapi->getError(vss_state->vss); > av_log(s, AV_LOG_ERROR, "Failed to parse script: %s\n", msg ? msg : "(unknown)"); > err = AVERROR_EXTERNAL; > goto done; > } > > - vs->vsapi = vsscript_getVSApi(); > - vs->vscore = vsscript_getCore(vss_state->vss); > - > - vs->outnode = vsscript_getOutput(vss_state->vss, 0); > + vs->outnode = vs->vssapi->getOutputNode(vss_state->vss, 0); > if (!vs->outnode) { > av_log(s, AV_LOG_ERROR, "Could not get script output node.\n"); > err = AVERROR_EXTERNAL; > @@ -260,7 +262,7 @@ static av_cold int read_header_vs(AVFormatContext *s) > > info = vs->vsapi->getVideoInfo(vs->outnode); > > - if (!info->format || !info->width || !info->height) { > + if (!info->format.colorFamily || !info->width || !info->height) { > av_log(s, AV_LOG_ERROR, "Non-constant input format not supported.\n"); > err = AVERROR_PATCHWELCOME; > goto done; > @@ -280,18 +282,22 @@ static av_cold int read_header_vs(AVFormatContext *s) > st->codecpar->codec_id = AV_CODEC_ID_WRAPPED_AVFRAME; > st->codecpar->width = info->width; > st->codecpar->height = info->height; > - st->codecpar->format = match_pixfmt(info->format, vs->c_order); > + st->codecpar->format = match_pixfmt(&info->format, vs->c_order); > > if (st->codecpar->format == AV_PIX_FMT_NONE) { > - av_log(s, AV_LOG_ERROR, "Unsupported VS pixel format %s\n", info->format->name); > + if(vs->vsapi->getVideoFormatName(&info->format, vsfmt)) > + av_log(s, AV_LOG_ERROR, "Unsupported VS pixel format %s\n", vsfmt); > + else > + av_log(s, AV_LOG_ERROR, "Unsupported VS pixel format\n"); > err = AVERROR_EXTERNAL; > goto done; > } > - av_log(s, AV_LOG_VERBOSE, "VS format %s -> pixfmt %s\n", info->format->name, > - av_get_pix_fmt_name(st->codecpar->format)); > - > - if (info->format->colorFamily == cmYCoCg) > - st->codecpar->color_space = AVCOL_SPC_YCGCO; > + if (vs->vsapi->getVideoFormatName(&info->format, vsfmt)) > + av_log(s, AV_LOG_VERBOSE, "VS format %s -> pixfmt %s\n", > + vsfmt, av_get_pix_fmt_name(st->codecpar->format)); > + else > + av_log(s, AV_LOG_VERBOSE, "VS format -> pixfmt %s\n", > + av_get_pix_fmt_name(st->codecpar->format)); Could you change this to have a single call go av_log()? Possibly using a %s with a string for the unknown format. Same thing for the other av_log() above. [...] Also could you give us a very minimal test script to test this? Regards, Ramiro _______________________________________________ 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".