From patchwork Wed Mar 10 22:06:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hutchinson X-Patchwork-Id: 26341 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:6d42:0:0:0:0:0 with SMTP id i63csp13320ybc; Wed, 10 Mar 2021 14:06:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJwn2GnwRHts6Wt9ae6FoY4thEvlpOwZuT6Y5gGx+fhLfQWkMcoyFjTvDmSj/PbmloTWiQ8l X-Received: by 2002:a05:600c:4146:: with SMTP id h6mr5382618wmm.32.1615414004936; Wed, 10 Mar 2021 14:06:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615414004; cv=none; d=google.com; s=arc-20160816; b=E6RoLpYqd1muhE1LCl3DSZFQg5p3JTNniWTNt6R0G/RYV/2vtRn6cJVdsxDROk2+qk 9Px1vPsKGHH9nn4H7nVz1eHv2SxTBFtP4ZcSoJMbFhVZGBO8l5hjMADVJVrxJ92QtlbR hpsajlYqI3VectiypdIKCIxdEn2TzyoySAudQ1SzMdq4xEWSMIC3BxkIkKUzTecWmHjS Kv+ejtaz5iQ9K9SsajEaXMbmbC4+gWTX1LWl+mwgUrrwubhKaXKPOD2535ZMYz8vS8tz wdSGyTKXbIzTHXsizGPW7t+IajbKG6dJxc1xnAmko8JYh6GlyQRPf9SXmPrjjzdiyjdp 0T2g== 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=dTR08ZZT59eneWRo+lFZ4/6L2jwsbxuPnoInuoVEF+U=; b=rweauSeZxgZKPMD4NEDAhMJS9YSZ4cdfaTzXwOSsnzf8OBHSk9xkIKa6uVGyzzGSdn FWAqR9+xmgH9Q9XJ2wJYuDM7R5eYNfScnP2rlMPpiWHyZh1VQkmQfoFV/DdzPqc3KzZf cMvwH+D2EH2DKU7cKbAlO971Gi2PMvG3cI7jF+Fy5czZGOsiPmxqj2XyZw9pmj4xR7rp LGqT6zdPjI8CInC4orumxt/d75yJOaMDwlXM2u4FxYwl6LKeQTE6TtYUi+75NkkW32N2 VcfCDj/sLvgHCMLu/kmbm2SkCofDkYq8BQ59BimbZkwAFmJQJmhQpjBLsBQChUMXxH5Y e5LQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=JmpCYoGc; 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 g10si726508wmq.20.2021.03.10.14.06.32; Wed, 10 Mar 2021 14:06:44 -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=20161025 header.b=JmpCYoGc; 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 3D8A668AB51; Thu, 11 Mar 2021 00:06:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f174.google.com (mail-qk1-f174.google.com [209.85.222.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9E04868AAD5 for ; Thu, 11 Mar 2021 00:06:24 +0200 (EET) Received: by mail-qk1-f174.google.com with SMTP id b130so18596344qkc.10 for ; Wed, 10 Mar 2021 14:06:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=YpjaiX7N89AsWNS7S55NzQ5MR8u8UC54PVU0UEAWmYU=; b=JmpCYoGcp+gKpIgVPIeB5YqUzuDgxgGgAAlQt6EaEvSjFfaU3EyX+c6uAlRqp5kKcD dYTCQWTlY+WVdZoFRFwoKVxxKAzg8R6ePa1V2lVDUmdGM1O5Ehsin7+tcNGZpxtWE6CS zHs0+FYZlm6LGT6/PwjKC4IWUDq1NQK7ziQ4178E0bZSEm/Ax3DQky9tYr1m5EtQdLUz r/dw+DTznrTdHi1443taB/8pRgqwWvdEj4dbdBwKxw6PHGh5AMTr7wskDjjCaQw3SmLi iRiiW8OXN7ERFnr8ehDalDnZrb0mxG2CDZE3Ktx5N/aUrHnRpP8bF32yhPByUt6sgvw2 J0IQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=YpjaiX7N89AsWNS7S55NzQ5MR8u8UC54PVU0UEAWmYU=; b=BDCyvsRxfZ6Z6iT5nrStTdIQZm7FjX57QTTjsCUGeJejc6LtFoibXfktOeV+114uV3 VcyMGq3f+DApCs7wEfNw1H0AFANZdzslEdVTWSY0Nospn8D58oBIzCC9oulz/c8RAYKg 1ZDElBZkMjc+BjgVLaSIJSaGH/X3CW13D+qcQ0fucQpFj3J+2dA1bQiKyx4e2NvbLtYB /IVftw1zAAf7mhHmNZ9PjqewESTxIhJleJ66J3cQTOEQkZLBWmXQNXBpthLQb8yNDEQg PDfPMm+nqJtgVx7OU67b/qSFqmHCwleByqxkyRLpaM15+bMzEa9fRCFoEZVK2Wck+8ue 6bXg== X-Gm-Message-State: AOAM530LpGFrIUOjnM4sz2EpnYw1DUxcvMfFW3iLz6vv2lVKgKB+6iL+ 1juNH6TerfMme+jPPI1feV2oa5RxSMM= X-Received: by 2002:a05:620a:38f:: with SMTP id q15mr4867916qkm.379.1615413983261; Wed, 10 Mar 2021 14:06:23 -0800 (PST) Received: from localhost.localdomain ([75.115.109.114]) by smtp.gmail.com with ESMTPSA id g11sm548120qkk.5.2021.03.10.14.06.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Mar 2021 14:06:22 -0800 (PST) From: Stephen Hutchinson To: ffmpeg-devel@ffmpeg.org Date: Wed, 10 Mar 2021 17:06:12 -0500 Message-Id: <20210310220612.2990-1-qyot27@gmail.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avisynth: more intelligent RGB flipping X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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: UMmvmZ1wMjZv Content-Length: 4389 avs_is_color_space provides a generic way of checking whether the video is RGB, and has been available through AVSC_API since 2.6. This means that GetProcAddress doesn't have to run on every frame. --- libavformat/avisynth.c | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index 2c08ace8db..5756aea0b6 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -57,6 +57,7 @@ typedef struct AviSynthLibrary { AVSC_DECLARE_FUNC(avs_get_version); AVSC_DECLARE_FUNC(avs_get_video_info); AVSC_DECLARE_FUNC(avs_invoke); + AVSC_DECLARE_FUNC(avs_is_color_space); AVSC_DECLARE_FUNC(avs_release_clip); AVSC_DECLARE_FUNC(avs_release_value); AVSC_DECLARE_FUNC(avs_release_video_frame); @@ -133,6 +134,7 @@ static av_cold int avisynth_load_library(void) LOAD_AVS_FUNC(avs_get_version, 0); LOAD_AVS_FUNC(avs_get_video_info, 0); LOAD_AVS_FUNC(avs_invoke, 0); + LOAD_AVS_FUNC(avs_is_color_space, 1); LOAD_AVS_FUNC(avs_release_clip, 0); LOAD_AVS_FUNC(avs_release_value, 0); LOAD_AVS_FUNC(avs_release_video_frame, 0); @@ -628,7 +630,6 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, const unsigned char *src_p; int n, i, plane, rowsize, planeheight, pitch, bits, ret; const char *error; - int avsplus av_unused; if (avs->curr_frame >= avs->vi->num_frames) return AVERROR_EOF; @@ -638,19 +639,6 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, if (discard) return 0; -#ifdef _WIN32 - /* Detect whether we're using AviSynth 2.6 or AviSynth+ by - * looking for whether avs_is_planar_rgb exists. */ - if (GetProcAddress(avs_library.library, "avs_is_planar_rgb") == NULL) - avsplus = 0; - else - avsplus = 1; -#else - /* AviSynth+ is now the only variant of AviSynth we support - * on Linux and macOS. */ - avsplus = 1; -#endif - bits = avs_library.avs_bits_per_pixel(avs->vi); /* Without the cast to int64_t, calculation overflows at about 9k x 9k @@ -687,14 +675,9 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, planeheight = avs_library.avs_get_height_p(frame, plane); /* Flip RGB video. */ - if (avs_is_rgb24(avs->vi) || avs_is_rgb(avs->vi)) { - src_p = src_p + (planeheight - 1) * pitch; - pitch = -pitch; - } - - /* Flip Planar RGB video */ - if (avsplus && (avs_library.avs_is_planar_rgb(avs->vi) || - avs_library.avs_is_planar_rgba(avs->vi))) { + if (avs_library.avs_is_color_space(avs->vi, AVS_CS_BGR) || + avs_library.avs_is_color_space(avs->vi, AVS_CS_BGR48) || + avs_library.avs_is_color_space(avs->vi, AVS_CS_BGR64)) { src_p = src_p + (planeheight - 1) * pitch; pitch = -pitch; }