From patchwork Fri Feb 2 05:03:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: flow gg X-Patchwork-Id: 45970 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a28:b0:199:de12:6fa6 with SMTP id cj40csp730410pzb; Thu, 1 Feb 2024 21:03:58 -0800 (PST) X-Google-Smtp-Source: AGHT+IG0AJDbL8Chl93LPtD204WRh9A1tA1a0I7nakTTOGz/mrZgzwYv6AFku/mLbFYSAZdDo2Vp X-Received: by 2002:a17:906:c43:b0:a31:8c73:f42d with SMTP id t3-20020a1709060c4300b00a318c73f42dmr770572ejf.28.1706850237936; Thu, 01 Feb 2024 21:03:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1706850237; cv=none; d=google.com; s=arc-20160816; b=W/C9LJthX8Noz7phMnNyhpRnC8HBYUWs1bM9IKQUsx/EJb2LaouGdp0pFDRlZnKNlc 5WRRarbcUbnqwA259HogAcGpdqBMLwh9yu8jlE6hQg4O6kjFxEDev2u88+JWznGYLhTf V1JfL57Di8HtCkk5Xt7Ks983t5A5jK/WZtfjpKfmt9ttZMKhZfGbvKurbZCgaPZ3FnMg oNwGWmy2T3dFx6a/HniikSMl4dAMG0rLihCFSrMqPvv+8cuxLWbGLZmzq+PBJcwmVSkn jILdDNzfKn9C/0mxCYtpeUESXQr3Ut3X64EY8zf9fVAEWFmj0p5y/xhe+7VgybqcSMgi +h4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:mime-version:dkim-signature:delivered-to; bh=RQdEhFXFLIr506mqhkez19N9TKcc9FRCshXk8pIkBhU=; fh=FGq2Tomb6jJXL3qScpiEnDIVeQMzSOv14aY0hTr30VI=; b=rocDLYyT1a/w4eoy5k7iW0pMa87trFWdLg4VGbgX8t3WomHQ1G6ZMch/S9WgQtP6VQ 4LHYBkTvleJCmfAJ/T6IV6DSaUqh0ST3I8WrAPeQPBFzMk0A4OAzgme6AWWOrLQCcSes 569BMLLwpXzb+UmZyNUKthAyD9OiecOKP4rGF6BOVLtmvAfnclVGUkFr/C7YO56UcaBA /tDepCB6eNSZUEN7Ze3FTCWlVaDbMJVeERdcrRJ1GE/lhRe56PzN5sVirWeVgKe51tRg OJpzNuHSDLaxweL7kmULf8/emAHvN/RbTVqv2dkMTj+2bP3YPFgK7zg5ZCqR/cx+osoA LE6Q==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=JMfi6iNX; 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 X-Forwarded-Encrypted: i=0; AJvYcCWg7U1OeNmlSjct4ORomDPdEGZ02VYTAoD/b6jtMDwManot1cvDIYg4ZHAPguY7lA5EfLr8gCpMTrmAeCEFYK1rVzylsYHRyNoEsCl2AmgcLgxJ/1BxMo1E+7k/18NyaGJ4V5MV+Fg1GTp/o4d8o418GgjZLewHLNY6Kq4krH9hpW0sIi5crLA/hgC0ywbNbDdKryZ9uV5smSk+S8cvyK2cGCjd6gKcNcrZcDNQYeG6l1Zu54czIYbLglzguNUhszFeXT7p+BZ6c5eyC4m7CXl/uB2X6h5sRnNvuXGLsmY1lEIL2R6ZWMdQiYYImmufbBR+34VTSv6P3Y3lm5MJ7SLOeLHGMZEMNCiUlOenetX5igheU9o7lcYVT6gohmix61CIlQS8GdrnoQW1ZsKPirKq3eXLnrucjHSATzJSH7ZlXy5CaBMWKAyoJP8UwzzigvWyXY1ZCuzkZMyhRj6Qt6uLzvilmWopn9CbGmi7RI7JQy/Km0uOqocEe8uLPuKQbwqIZ3gxeKyEo6ExQ5pg+6BzuW+eiXm+DAKm+lnI9S+vRvvEnJuevEaaYZFq7d56LvoPAHdUAdywBxBQ76beqxdj76dP2P4sJRn9ZiZfqUWvlivMnis3flKPkMTK6woAyaJSSdALWhS04DMrtIvp+GEhfjP8DMBJqMA2mCkvXx1HpGkuvR+RztASmgiJpW1VTzRYKTfPhxFPNDbuiP4/nHR2fV4VmouYClqId3Eex4J921Ho0gVowAeav1yWSCOv7lzWldGv4MF/wMYGnzPXUywuvSDwbM4BDmzT019ApVIBIL16yI32Hc0dxO/QQXW8MFY2YtDxCzixC0NSjkp7FqfBomRTDpfonvcnFTSMLe/CrBg4h2Euy+E9vsyu3MxqSsD167p/71KctqyBOXM8tqNlv+Z7+CoRmSwjmvlOhKD0g1f9ERDuvbiiLEGBZRXBye+MeZ ko06Rdtq+0tjf875NmdMqtnHhZp3qYjwAXuqgYe/SY7Y/80Cp62l/uCOVP5t8SzI8pnQ3qxO4mp55F1nrltq7CF898WCm7rCafhtomD+PvrdtZC8qJx2lAtM+6uqmgU1riIbIprcDnwn4EHZOLkpMXuZVAEUlzBPlthuXGKmXPEfgB3R7RRER1wlznIyt9F68lWWY22Naa1YRfERw/yg7+PiYGw5gtjLFZcwE9RsZUARiE37mkEK+DAWFw/xoeGhhZDXMCIiD2xrTGUDvfTzOlS8WEpJVNQu12zPrEFA1llY7ftXe6RlsCMnTNR+7T9zjcNrGmWuEV8mniJhCjcMflYiEivAr1f8diPELjjV2x6UBf9fU6LVL6EAMZKvZc2ds/UX3kfkL2F//8mqL+HrP7J7WiRR06EnywjjmJp+mifgpVAGn8sL3p35NW9uKO/QyDyUKLcIfyNMqCn8kXTxLnRtGbFeTU9NGgdWhv7TBtM4g/SctX3xJ4hurp+nVZShgs+0e73eLGB2fCemb8lf3TI9jzanFKaEq11ckLygSCAVMLLOfL9zraNltUXFBYkiqaQcK3mxILeQFPDrjuzVJOmeZ9yg42fvT1nDI2nPV+VyFHCAbbFYm69vYZgslcpdwKtx8y2ObEjYE= Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id kk4-20020a170907766400b00a317c932971si481966ejc.233.2024.02.01.21.03.57; Thu, 01 Feb 2024 21:03:57 -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=20230601 header.b=JMfi6iNX; 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 762EF68CEC9; Fri, 2 Feb 2024 07:03:54 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ua1-f53.google.com (mail-ua1-f53.google.com [209.85.222.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6BAE368CEC9 for ; Fri, 2 Feb 2024 07:03:47 +0200 (EET) Received: by mail-ua1-f53.google.com with SMTP id a1e0cc1a2514c-7d2e21181c1so828678241.3 for ; Thu, 01 Feb 2024 21:03:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706850225; x=1707455025; darn=ffmpeg.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Y96MZam+TC935TALJBwORNRKIsoXxZuzl/K1t7FoVps=; b=JMfi6iNXkoU0+R7ToxqYFycknDJUEeKzGM5IWBO9JVkJQ3HLKo//Bh/NSFEWGHZdam ylZRyct6ndR5j/5QzKsCIdcUAOP0LzLQ3dNesH050mgJ2VqIOQL5+rYviYYbJTplReot sCsLkS48H3Qi7zJdviLq6QfJy49bLhtXI1xL8PVyc9tCoGOot5SWhFwdPQKOX8qqpc73 MkMYpT3L/vTM8tXAy5BACjKvpI2F2Mj5RpvOWvJNlU3ojU4/DDi7RN+Q5d1FqImbXczt srqkkng5/50QeZ3WA2Gvg5AtkmbtjLhNQNZ2q9kx3tpcCKa2oHHEwOxOUAJSER5YYpKR 19JQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706850225; x=1707455025; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Y96MZam+TC935TALJBwORNRKIsoXxZuzl/K1t7FoVps=; b=Gb1O7GePH/A7q0qSY4n5xMlHhagPptP0wjZdrPyNRc2F/sDwgycAjo+KgWqRAWEmeP Kwkoy476wPVClFD8/MQgQDtwAz/e1xkiLy/qa4Py9enJ6BOXSMEz6sVysN5GQBBhZ8PU ouvKwqixz1LZ/S2IIa3tdY8fjimlqNMRJceWXd90s6v2cBw5PbS/S95LfFQjlFdn10N+ QdCmDQcyMyLYuYwzu6JMrHwVPcScntpGoqq3X1KEO9LoiU/RD1Fb0EYZSmwqVXsonjdc 4AadRXXaKQsmDplUJ+U9m0bM9b57LVGhSFKcmvMlAcEjcSS481t8jS4JCzvkdXmW4X6v YKbQ== X-Gm-Message-State: AOJu0YzewBl4WIesg3oOgPK4Fec8eOI9L4a1ORDdZUMOO6zjrMI7Gm0N DXJKwLZ7H1p/crbpGzBwoBbHzles5o3QcHCTypI4zLiaA0/9kP1UfpwwNQOnkhJs1fKhFN3qPRN Nehy56A2B4VpGC/kqQuRiFQQd4YfNCRJWn1o= X-Received: by 2002:a67:cd94:0:b0:46b:3c0d:8d26 with SMTP id r20-20020a67cd94000000b0046b3c0d8d26mr1132183vsl.1.1706850225334; Thu, 01 Feb 2024 21:03:45 -0800 (PST) MIME-Version: 1.0 From: flow gg Date: Fri, 2 Feb 2024 13:03:33 +0800 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH 1/3] lavc/vp8dsp: R-V V vp8_idct_dc_add 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Ma67wCOpsWkJ From 32fdf006a81da78bde29b5cc0c26446d0bb3390d Mon Sep 17 00:00:00 2001 From: sunyuechi Date: Fri, 2 Feb 2024 12:49:07 +0800 Subject: [PATCH 1/3] lavc/vp8dsp: R-V V vp8_idct_dc_add c908: vp8_idct_dc_add_c: 102.2 vp8_idct_dc_add_rvv_i32: 42.0 --- libavcodec/riscv/Makefile | 2 ++ libavcodec/riscv/vp8dsp_init.c | 39 ++++++++++++++++++++++++++++++ libavcodec/riscv/vp8dsp_rvv.S | 44 ++++++++++++++++++++++++++++++++++ libavcodec/vp8dsp.c | 2 ++ libavcodec/vp8dsp.h | 1 + 5 files changed, 88 insertions(+) create mode 100644 libavcodec/riscv/vp8dsp_init.c create mode 100644 libavcodec/riscv/vp8dsp_rvv.S diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile index 579a716487..97067558d8 100644 --- a/libavcodec/riscv/Makefile +++ b/libavcodec/riscv/Makefile @@ -56,5 +56,7 @@ OBJS-$(CONFIG_UTVIDEO_DECODER) += riscv/utvideodsp_init.o RVV-OBJS-$(CONFIG_UTVIDEO_DECODER) += riscv/utvideodsp_rvv.o OBJS-$(CONFIG_VC1DSP) += riscv/vc1dsp_init.o RVV-OBJS-$(CONFIG_VC1DSP) += riscv/vc1dsp_rvv.o +OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_init.o +RVV-OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_rvv.o OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_init.o RVV-OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_rvv.o diff --git a/libavcodec/riscv/vp8dsp_init.c b/libavcodec/riscv/vp8dsp_init.c new file mode 100644 index 0000000000..ab020070eb --- /dev/null +++ b/libavcodec/riscv/vp8dsp_init.c @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024 Institue of Software Chinese Academy of Sciences (ISCAS). + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" + +#include "libavutil/attributes.h" +#include "libavutil/cpu.h" +#include "libavutil/riscv/cpu.h" +#include "libavcodec/vp8dsp.h" + +void ff_vp8_idct_dc_add_rvv(uint8_t *dst, int16_t block[16], ptrdiff_t stride); + +av_cold void ff_vp8dsp_init_riscv(VP8DSPContext *c) +{ +#if HAVE_RVV + int flags = av_get_cpu_flags(); + + if (flags & AV_CPU_FLAG_RVV_I32 && ff_get_rv_vlenb() >= 16) { + c->vp8_idct_dc_add = ff_vp8_idct_dc_add_rvv; + } +#endif +} diff --git a/libavcodec/riscv/vp8dsp_rvv.S b/libavcodec/riscv/vp8dsp_rvv.S new file mode 100644 index 0000000000..8609b79937 --- /dev/null +++ b/libavcodec/riscv/vp8dsp_rvv.S @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2024 Institue of Software Chinese Academy of Sciences (ISCAS). + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/riscv/asm.S" + +.macro vp8_idct_dc_add + vlse32.v v0, (a0), a2 + lh a5, 0(a1) + sh zero, 0(a1) + addi a5, a5, 4 + srai t1, a5, 3 + vsetivli zero, 4*4, e16, m2, ta, ma + vzext.vf2 v2, v0 + vadd.vx v2, v2, t1 + vmax.vx v2, v2, zero + vsetvli zero, zero, e8, m1, ta, ma + vnclipu.wi v0, v2, 0 + vsetivli zero, 4, e8, mf4, ta, ma + vsse32.v v0, (a0), a2 +.endm + +func ff_vp8_idct_dc_add_rvv, zve32x + vsetivli zero, 4, e8, mf4, ta, ma + vp8_idct_dc_add + + ret +endfunc diff --git a/libavcodec/vp8dsp.c b/libavcodec/vp8dsp.c index 7a85e9f4ca..72d4ea3793 100644 --- a/libavcodec/vp8dsp.c +++ b/libavcodec/vp8dsp.c @@ -742,6 +742,8 @@ av_cold void ff_vp8dsp_init(VP8DSPContext *dsp) ff_vp8dsp_init_aarch64(dsp); #elif ARCH_ARM ff_vp8dsp_init_arm(dsp); +#elif ARCH_RISCV + ff_vp8dsp_init_riscv(dsp); #elif ARCH_X86 ff_vp8dsp_init_x86(dsp); #elif ARCH_MIPS diff --git a/libavcodec/vp8dsp.h b/libavcodec/vp8dsp.h index 16b5e9c35b..30dc2c6cc1 100644 --- a/libavcodec/vp8dsp.h +++ b/libavcodec/vp8dsp.h @@ -92,6 +92,7 @@ void ff_vp78dsp_init_x86(VP8DSPContext *c); void ff_vp8dsp_init(VP8DSPContext *c); void ff_vp8dsp_init_aarch64(VP8DSPContext *c); void ff_vp8dsp_init_arm(VP8DSPContext *c); +void ff_vp8dsp_init_riscv(VP8DSPContext *c); void ff_vp8dsp_init_x86(VP8DSPContext *c); void ff_vp8dsp_init_mips(VP8DSPContext *c); void ff_vp8dsp_init_loongarch(VP8DSPContext *c); -- 2.43.0