From patchwork Tue Jun 6 22:23:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marvin Scholz X-Patchwork-Id: 41985 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c526:b0:117:ac03:c9de with SMTP id gm38csp690184pzb; Tue, 6 Jun 2023 15:24:44 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4rK8wmfwVm32Z8wh8lPSgReTMIh8GdiTqVbbzqGS4CliE4JVHXaOeumAg1NGSjeBf4DoS7 X-Received: by 2002:a17:906:58c9:b0:974:62d1:e942 with SMTP id e9-20020a17090658c900b0097462d1e942mr4474807ejs.21.1686090284190; Tue, 06 Jun 2023 15:24:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686090284; cv=none; d=google.com; s=arc-20160816; b=Kwl3oERAuvFkpogJSyaHntgsIoY+l310U/nkUSS6GuU/CYiZt/56GYy7y2j82lqA8+ 53t9gndeoQCkrROWAWkSnqh7AXkvrnm9KG1axy1hde2FFRGiIEzndrJ+LIsbpb2vBhDW i9CuhDveOaB9cwHKeigJJEfsvS7Lz5OnSoOT9jg5ydWFr9V8QBJcufVzfENWPHK6KpYw ahqu9e8rIAs57aSuzM5zh/2kv4uu59LdeuxBWolnlrMphlijeMdI8GqNJPcnn4w4QMHE XrVKHCA0toRs8NKE432YTp1Zgp4byEazAKJh70eszyXU/q/rbqUuK2TOzrIjSWSp9RON YrBQ== 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=fWy4hBxxWtLqr3MXHOjIog8cXiKusNJSLKcfA5OCLuU=; b=zLqQlvJxDMJeZsJx8EQrURA2Lj63YQ1oTdi70MkJSpQGpEvHD/yn0U+BN6uVZTUZua Vu/InUFJ1rxwso33lciK+SDBid8okwh1+HHSd0KT9h6W1gkM9ceuVmNrpTWagw/aqa28 UCh7YilDAMFMYbeNmbxwBQ6Wkke73Gspi6QhIlXDmPL1J4WyQBSglE109DDSD2UstLTA ztBzbALzfo2aGHY5ZQzA8aq+8x4/QTCg8203Q9qhRkdquzHBuhbdEPsGglVJp38IeTEG 8Rgn5ZdksjTIL2M7zUXBTSp3tjWL/GgropchhJFvXkQ/z0dsKfPEq7LqCKegTb3Em3aR QXxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=q9ss39a5; 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 u1-20020a1709061da100b0096f441389d3si6673315ejh.659.2023.06.06.15.24.18; Tue, 06 Jun 2023 15:24:44 -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=20221208 header.b=q9ss39a5; 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 1D24368C35D; Wed, 7 Jun 2023 01:23:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A810D68C32A for ; Wed, 7 Jun 2023 01:23:39 +0300 (EEST) Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-9745baf7c13so842645266b.1 for ; Tue, 06 Jun 2023 15:23:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686090219; x=1688682219; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=W2Jo19G65g+bT+RtFthV59Y3QFy7e21jNyLfSjgvRcU=; b=q9ss39a5ftnRgToHGNxvoIG/1VzNZf4s5IKHiC0yL5lOSybMdioEWUt+vc9Ktxr+VO KbOgmyGSyDZyi6/VcQh4KQbg6Nghfe+Lv8C0lVcupOzdCPNvyA4CDlmrDNTv7Xl3EJUn YD77slGQt8Yj0AzAh5naMECm2pWG1bRsrPSCrYO8pWshu0p/q7urTA4k3E1FX5bEv7qN aarpz1H2+HMHctaBuw0gkJrHmbbCi/P+DBigk7BNHBwa3GWqJqOmU7kMmO8jz/cu5Euu 3KcClNQrFqblbBnhqlx9pyumiF6vOFUIAb8mGNsRTCIU65auROCPkWzQ2R3ULkrszAT6 Gw9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686090219; x=1688682219; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=W2Jo19G65g+bT+RtFthV59Y3QFy7e21jNyLfSjgvRcU=; b=HdyuHRG3r/zbzruEDHHiKcM5NHlWr4b78BNvArQykfqarTYAqUMnpfky8EsoD3Jbwv GUzF0YHA0Ez4jUQswZ4MFY+TkDaJVM/bUVXcpd+tWxMgXQDkVLaN3UCGbYbH6DDc4CDM Qxh7NN4lBT+goo/etRcrzqqVUUfshKXNCh77xmyN95cP1jzjPCH7M2VueOz/gQNg2/H/ /9t9FtjtiAS5Nt6pA1H/Hsp42SAZ4NWiwm5M9sf7Q3sGuxdvSwMEBNrYC55f4cfsd8og 2erzIdKqUmC3PJXYdBxycDR40pm2myZXUuXTrL2DQ5Ue5Ky9ZMAxdfWQ18cGiqbjbByl VGQg== X-Gm-Message-State: AC+VfDxo3aB17ISpVdJpzm3rNB+k3BScl3/6Xj+P7MLXqf4sEBMbii5b ar3Illsjw93ln8/C9l5jETohLzrjA4Q= X-Received: by 2002:a17:907:6e06:b0:973:d1ce:dbe8 with SMTP id sd6-20020a1709076e0600b00973d1cedbe8mr3998819ejc.46.1686090219030; Tue, 06 Jun 2023 15:23:39 -0700 (PDT) Received: from MBP-von-Marvin.fritz.box (dynamic-2a01-0c22-a967-d100-5963-60a3-e682-252f.c22.pool.telefonica.de. [2a01:c22:a967:d100:5963:60a3:e682:252f]) by smtp.gmail.com with ESMTPSA id f18-20020a170906825200b00965ac1510f8sm6087541ejx.185.2023.06.06.15.23.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jun 2023 15:23:38 -0700 (PDT) From: Marvin Scholz To: ffmpeg-devel@ffmpeg.org Date: Wed, 7 Jun 2023 00:23:02 +0200 Message-Id: <20230606222302.21495-4-epirat07@gmail.com> X-Mailer: git-send-email 2.37.0 (Apple Git-136) In-Reply-To: <20230606222302.21495-1-epirat07@gmail.com> References: <20230530015854.31900-1-epirat07@gmail.com> <20230606222302.21495-1-epirat07@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 4/4] lavfi/vf_xfade_vulkan: add slide transitions 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: Marvin Scholz Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: oXMezs4+B3jn --- libavfilter/vf_xfade_vulkan.c | 58 +++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/libavfilter/vf_xfade_vulkan.c b/libavfilter/vf_xfade_vulkan.c index 58552ab734..f1f248c288 100644 --- a/libavfilter/vf_xfade_vulkan.c +++ b/libavfilter/vf_xfade_vulkan.c @@ -72,6 +72,10 @@ enum XFadeTransitions { WIPERIGHT, WIPEUP, WIPEDOWN, + SLIDEDOWN, + SLIDEUP, + SLIDELEFT, + SLIDERIGHT, NB_TRANSITIONS, }; @@ -128,12 +132,62 @@ static const char transition_wipedown[] = { C(0, } ) }; +#define SHADER_SLIDE_COMMON \ + C(0, void slide(int idx, ivec2 pos, float progress, ivec2 direction) ) \ + C(0, { ) \ + C(1, ivec2 size = imageSize(output_images[idx]); ) \ + C(1, ivec2 pi = ivec2(progress * size); ) \ + C(1, ivec2 p = pos + pi * direction; ) \ + C(1, ivec2 f = p % size; ) \ + C(1, f = f + size * ivec2(f.x < 0, f.y < 0); ) \ + C(1, vec4 a = texture(a_images[idx], f); ) \ + C(1, vec4 b = texture(b_images[idx], f); ) \ + C(1, vec4 r = (p.y >= 0 && p.x >= 0 && size.y > p.y && size.x > p.x) ? a : b; ) \ + C(1, imageStore(output_images[idx], pos, r); ) \ + C(0, } ) + +static const char transition_slidedown[] = { + SHADER_SLIDE_COMMON + C(0, void transition(int idx, ivec2 pos, float progress) ) + C(0, { ) + C(1, slide(idx, pos, progress, ivec2(0, -1)); ) + C(0, } ) +}; + +static const char transition_slideup[] = { + SHADER_SLIDE_COMMON + C(0, void transition(int idx, ivec2 pos, float progress) ) + C(0, { ) + C(1, slide(idx, pos, progress, ivec2(0, +1)); ) + C(0, } ) +}; + +static const char transition_slideleft[] = { + SHADER_SLIDE_COMMON + C(0, void transition(int idx, ivec2 pos, float progress) ) + C(0, { ) + C(1, slide(idx, pos, progress, ivec2(+1, 0)); ) + C(0, } ) +}; + +static const char transition_slideright[] = { + SHADER_SLIDE_COMMON + C(0, void transition(int idx, ivec2 pos, float progress) ) + C(0, { ) + C(1, slide(idx, pos, progress, ivec2(-1, 0)); ) + C(0, } ) +}; + static const char* transitions_map[NB_TRANSITIONS] = { [FADE] = transition_fade, [WIPELEFT] = transition_wipeleft, [WIPERIGHT] = transition_wiperight, [WIPEUP] = transition_wipeup, [WIPEDOWN] = transition_wipedown, + [SLIDEDOWN] = transition_slidedown, + [SLIDEUP] = transition_slideup, + [SLIDELEFT] = transition_slideleft, + [SLIDERIGHT]= transition_slideright, }; static av_cold int init_vulkan(AVFilterContext *avctx) @@ -481,6 +535,10 @@ static const AVOption xfade_vulkan_options[] = { { "wiperight", "wipe right transition", 0, AV_OPT_TYPE_CONST, {.i64=WIPERIGHT}, 0, 0, FLAGS, "transition" }, { "wipeup", "wipe up transition", 0, AV_OPT_TYPE_CONST, {.i64=WIPEUP}, 0, 0, FLAGS, "transition" }, { "wipedown", "wipe down transition", 0, AV_OPT_TYPE_CONST, {.i64=WIPEDOWN}, 0, 0, FLAGS, "transition" }, + { "slidedown", "slide down transition", 0, AV_OPT_TYPE_CONST, {.i64=SLIDEDOWN}, 0, 0, FLAGS, "transition" }, + { "slideup", "slide up transition", 0, AV_OPT_TYPE_CONST, {.i64=SLIDEUP}, 0, 0, FLAGS, "transition" }, + { "slideleft", "slide left transition", 0, AV_OPT_TYPE_CONST, {.i64=SLIDELEFT}, 0, 0, FLAGS, "transition" }, + { "slideright","slide right transition", 0, AV_OPT_TYPE_CONST, {.i64=SLIDERIGHT}, 0, 0, FLAGS, "transition" }, { "duration", "set cross fade duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64=1000000}, 0, 60000000, FLAGS }, { "offset", "set cross fade start relative to first input stream", OFFSET(offset), AV_OPT_TYPE_DURATION, {.i64=0}, INT64_MIN, INT64_MAX, FLAGS }, { NULL }