From patchwork Tue May 21 17:13:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: uk7b@foxmail.com X-Patchwork-Id: 49105 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:9214:b0:1af:fc2d:ff5a with SMTP id tl20csp127536pzb; Tue, 21 May 2024 10:14:30 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUXmvJz6slT4BOQySChAhg+/9CeYRb41rdKlNQsfhlT0RdlHAAI/7ronq+niCIjV9NzIOzymil5ydmtu78HMnWMFFrqidmrqmTzKw== X-Google-Smtp-Source: AGHT+IEK5rKtkgJApvmQZLPRa0xoNMiyqPY6+vhr+uNQqHj0YHR5E22vNGZ92PTqg2UVZnlULhCo X-Received: by 2002:a50:cd5d:0:b0:574:f26f:cb63 with SMTP id 4fb4d7f45d1cf-574f26fd504mr14169131a12.27.1716311670168; Tue, 21 May 2024 10:14:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716311670; cv=none; d=google.com; s=arc-20160816; b=rB34Gv5xxUgCquzvkxsODU6FeuPv2FZ/SkAMxUV7Evw+TBjNI/6z9uGUSWYVbs+kOk 18ca88FI/klJynvfRQgeaJ36TVWqrc+9/s5efCckNxGAFA51f/dIfeOKyE+rMYFBPYhQ 7mo2iAdVdsJO0Ry7FSGgheJxSeZYbJ9TRAYEx9tLcj6sdGO9bJJatbIyySJrimrYSMNd YrgFVf4GvCMpUaqs0N6CI/skExA9kCzCyChNtn2prCorv0KuhKJ7gjRI1+A2sm9NDEmD caMpr528+Pquvr3Yvfonpp1lPSct4ifdoB9XdVYd6XUFm6VLuoK0y0ozYKGMv5pcfg8u y03g== 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:date :to:from:message-id:dkim-signature:delivered-to; bh=J5JQJUzl+fG+jNvm51dSD+gLQb3jqnHVTuHH4kVBf4k=; fh=D0bFwGkf4X22/D/bfeDVrXKIx7S6kcXsNzy10j8ORbQ=; b=O+obM9X+dxrR3ea+CVh17rq2R9pExV6U6+wPCjUbtfHSxv9Gj3mFF0jY/NRy/eQXQP NQjredUVwBRVG/Fk3VW3gNs9+4IY5MtvNvxJny2ic4rcRWG5cpeYV3KsvkLpg2PvwM+2 ftriFM1D/CWsEZXbkkMtfBk2OlA+P2Ti/PXgM/1ja+m5cG8XxGEptEwGAITaFf3f7TWM unz8IKcrR3VdyIdLIqSgFHpJVtaVeSi6l1bsZW4ramOtjcuAXaYb8Bm5MM2WXRbysLVv Vhc6WGFAcrotDRboTE+Yg/WS/DFCOx2kkOHoekpTeZ00jvMsINE7DI3c6eh2DXd1+URi 2XOA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=ezG34Y41; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5733bbc2d7esi14932059a12.0.2024.05.21.10.14.28; Tue, 21 May 2024 10:14:30 -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=@foxmail.com header.s=s201512 header.b=ezG34Y41; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E1E6B68D38D; Tue, 21 May 2024 20:14:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-49.mail.qq.com (out162-62-57-49.mail.qq.com [162.62.57.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 489E768D0A4 for ; Tue, 21 May 2024 20:14:03 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1716311634; bh=Zf0LdU5LsZAJv653iXyP6xd3/+5sucD6XuPCbuB69Pw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ezG34Y41BSUIhykIQIkCKYwmHJKkyigFc7AJgZ7ix/wreXQrrzDXjuFb+Od1z0z9N pdrU2HkVIzFbiG7a2U2BHOsnSxv0Ujqr6Io8+RvcmqB1wton+kVtqCuJbhwVU5hdXy u/jkGJZJZJ+tJRkWeZIOCAttLPfIgNCITkWB5hRo= Received: from localhost.localdomain ([42.177.176.187]) by newxmesmtplogicsvrszb9-1.qq.com (NewEsmtp) with SMTP id 374AC612; Wed, 22 May 2024 01:13:52 +0800 X-QQ-mid: xmsmtpt1716311633t913sz8vi Message-ID: X-QQ-XMAILINFO: OOPJ7pYMv25tfMoNpiIDa4s69xJSes5EBzfOeR61bDeq5g4Ogd7fVBHJbQiFYn TC5Ai6LKGE5jhpqgQK1DxtrdcnDDUf+RFTj5IJX6NRa89heS7WQNuDd4jXPupctHq+hvI5VJ6DeQ GvfTN30BiuFzu57bXXvt7Akxf5Fvlkr4kqROPYf4uapMhAVFkdZdPKKb90R/UUzoVOUSmIa3yikG AWLhFzfdZ30NMZ3XzMqHC5RdgYCVCkz6aBh1WsVqtQ8sR8aeG/4pMGTjYo4i31VmSkAuqud8lYeM WPAgtpTwnR5kjezTDTG/3abcDPDbOkEotMxQGWo3JepCmW1u8qgcdpOBL6GmaZr59za4t2yp14+H ldkiFEFzK2+/Ogom39wPLRg/PhSNfHHRX9Gx+Wp6vQ1y4rvOgnXJImtw7wuiiVaedklGl4poz+/y gxx6+w4wYqxq1LJs4tuKzz2XkeenbycLQFeFwHtsd95EV8QkUVZoM/b7XhXkEg62OlWtci6/vJYD NlbqFwqRO3MfVy7oTVPknmeBiwVm8lw/9egAuj1D+0UfsIRCmFL+TUb6ckb71W9aSwStaY446hPc GE79Q/HWxbYMgV9GOXtfE9tvc6Ktagy8yufsvOid2BdOyNWk9dto0C6r0Bda6FoxN7BYU0DYvvFg FGhVpMaSJsHCoHs/orzZU8g7OhtDKiGaWBNIAOWBFv8+ji29mnwyu9SrggQm67W2xgRWTm/ZaPJP 5OYOglVggFx8FdSAoNrhORY6eKUjKO9Z7WTAekF0iGO8IRbey1HckRPppjVcjlC4C0fCYPfCvKuh /FnbMaUFD+UaBIts9l63gDsp/LaE9FDkzfWQlxg7pjsGe6WHnEpQY/LGovt/AVyTNYcaIUB/7G9i e72h9iZqQS7ar7f+ShSjbyhdl0vlCgfFbgeunucE+C+GyVLKKojJscujFBA9KDy4PT4bFjbCTi X-QQ-XMRINFO: OD9hHCdaPRBwq3WW+NvGbIU= From: uk7b@foxmail.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 May 2024 01:13:16 +0800 X-OQ-MSGID: <20240521171319.2629938-2-uk7b@foxmail.com> X-Mailer: git-send-email 2.45.1 In-Reply-To: <20240521171319.2629938-1-uk7b@foxmail.com> References: <20240521171319.2629938-1-uk7b@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/5] lavc/vp9dsp: R-V V mc bilin h v 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: sunyuechi Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: RRU2AwqFtNzX From: sunyuechi C908: vp9_avg_bilin_4h_8bpp_c: 5.2 vp9_avg_bilin_4h_8bpp_rvv_i64: 2.2 vp9_avg_bilin_4v_8bpp_c: 5.5 vp9_avg_bilin_4v_8bpp_rvv_i64: 2.2 vp9_avg_bilin_8h_8bpp_c: 20.0 vp9_avg_bilin_8h_8bpp_rvv_i64: 4.5 vp9_avg_bilin_8v_8bpp_c: 21.0 vp9_avg_bilin_8v_8bpp_rvv_i64: 4.2 vp9_avg_bilin_16h_8bpp_c: 78.2 vp9_avg_bilin_16h_8bpp_rvv_i64: 9.0 vp9_avg_bilin_16v_8bpp_c: 82.0 vp9_avg_bilin_16v_8bpp_rvv_i64: 9.0 vp9_avg_bilin_32h_8bpp_c: 325.5 vp9_avg_bilin_32h_8bpp_rvv_i64: 26.2 vp9_avg_bilin_32v_8bpp_c: 326.2 vp9_avg_bilin_32v_8bpp_rvv_i64: 26.2 vp9_avg_bilin_64h_8bpp_c: 1265.7 vp9_avg_bilin_64h_8bpp_rvv_i64: 91.5 vp9_avg_bilin_64v_8bpp_c: 1317.0 vp9_avg_bilin_64v_8bpp_rvv_i64: 91.2 vp9_put_bilin_4h_8bpp_c: 4.5 vp9_put_bilin_4h_8bpp_rvv_i64: 1.7 vp9_put_bilin_4v_8bpp_c: 4.7 vp9_put_bilin_4v_8bpp_rvv_i64: 1.7 vp9_put_bilin_8h_8bpp_c: 17.0 vp9_put_bilin_8h_8bpp_rvv_i64: 3.5 vp9_put_bilin_8v_8bpp_c: 18.0 vp9_put_bilin_8v_8bpp_rvv_i64: 3.5 vp9_put_bilin_16h_8bpp_c: 65.2 vp9_put_bilin_16h_8bpp_rvv_i64: 7.5 vp9_put_bilin_16v_8bpp_c: 85.7 vp9_put_bilin_16v_8bpp_rvv_i64: 7.5 vp9_put_bilin_32h_8bpp_c: 257.5 vp9_put_bilin_32h_8bpp_rvv_i64: 23.5 vp9_put_bilin_32v_8bpp_c: 274.5 vp9_put_bilin_32v_8bpp_rvv_i64: 23.5 vp9_put_bilin_64h_8bpp_c: 1040.5 vp9_put_bilin_64h_8bpp_rvv_i64: 82.5 vp9_put_bilin_64v_8bpp_c: 1108.7 vp9_put_bilin_64v_8bpp_rvv_i64: 82.2 --- libavcodec/riscv/vp9_mc_rvv.S | 43 ++++++++++++++++++++++++++++++++++ libavcodec/riscv/vp9dsp.h | 12 +++++----- libavcodec/riscv/vp9dsp_init.c | 21 +++++++++++++++++ 3 files changed, 70 insertions(+), 6 deletions(-) diff --git a/libavcodec/riscv/vp9_mc_rvv.S b/libavcodec/riscv/vp9_mc_rvv.S index 7cb38ec94a..739380d9a9 100644 --- a/libavcodec/riscv/vp9_mc_rvv.S +++ b/libavcodec/riscv/vp9_mc_rvv.S @@ -53,6 +53,49 @@ func ff_vp9_avg\len\()_rvv, zve32x endfunc .endm +.macro bilin_load dst len op type mn +.ifc \type,v + add t5, a2, a3 +.else + addi t5, a2, 1 +.endif + vle8.v v8, (a2) + vle8.v v0, (t5) + vwmulu.vx v16, v0, \mn + vwmaccsu.vx v16, t1, v8 + vwadd.wx v16, v16, t4 + vnsra.wi v16, v16, 4 + vadd.vv \dst, v16, v8 +.ifc \op,avg + vle8.v v16, (a0) + vaaddu.vv \dst, \dst, v16 +.endif +.endm + +.macro bilin_h_v len op type mn +func ff_\op\()_vp9_bilin_\len\()\type\()_rvv, zve32x +.ifc \op,avg + csrwi vxrm, 0 +.endif + vsetvlstatic8 \len, t0, 64 + li t4, 8 + neg t1, \mn +1: + addi a4, a4, -1 + bilin_load v0, \len, \op, \type, \mn + vse8.v v0, (a0) + add a2, a2, a3 + add a0, a0, a1 + bnez a4, 1b + + ret +endfunc +.endm + .irp len, 64, 32, 16, 8, 4 copy_avg \len + .irp op, put, avg + bilin_h_v \len, \op, h, a5 + bilin_h_v \len, \op, v, a6 + .endr .endr diff --git a/libavcodec/riscv/vp9dsp.h b/libavcodec/riscv/vp9dsp.h index ff8431591c..8fb326dae0 100644 --- a/libavcodec/riscv/vp9dsp.h +++ b/libavcodec/riscv/vp9dsp.h @@ -113,27 +113,27 @@ void ff_avg_8tap_##type##_##SIZE##hv_rvv(uint8_t *dst, ptrdiff_t dststride, \ int h, int mx, int my); #define VP9_BILINEAR_RISCV_RVV_FUNC(SIZE) \ -void ff_put_bilin_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \ +void ff_put_vp9_bilin_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \ const uint8_t *src, ptrdiff_t srcstride, \ int h, int mx, int my); \ \ -void ff_put_bilin_##SIZE##v_rvv(uint8_t *dst, ptrdiff_t dststride, \ +void ff_put_vp9_bilin_##SIZE##v_rvv(uint8_t *dst, ptrdiff_t dststride, \ const uint8_t *src, ptrdiff_t srcstride, \ int h, int mx, int my); \ \ -void ff_put_bilin_##SIZE##hv_rvv(uint8_t *dst, ptrdiff_t dststride, \ +void ff_put_vp9_bilin_##SIZE##hv_rvv(uint8_t *dst, ptrdiff_t dststride, \ const uint8_t *src, ptrdiff_t srcstride, \ int h, int mx, int my); \ \ -void ff_avg_bilin_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \ +void ff_avg_vp9_bilin_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \ const uint8_t *src, ptrdiff_t srcstride, \ int h, int mx, int my); \ \ -void ff_avg_bilin_##SIZE##v_rvv(uint8_t *dst, ptrdiff_t dststride, \ +void ff_avg_vp9_bilin_##SIZE##v_rvv(uint8_t *dst, ptrdiff_t dststride, \ const uint8_t *src, ptrdiff_t srcstride, \ int h, int mx, int my); \ \ -void ff_avg_bilin_##SIZE##hv_rvv(uint8_t *dst, ptrdiff_t dststride, \ +void ff_avg_vp9_bilin_##SIZE##hv_rvv(uint8_t *dst, ptrdiff_t dststride, \ const uint8_t *src, ptrdiff_t srcstride, \ int h, int mx, int my); diff --git a/libavcodec/riscv/vp9dsp_init.c b/libavcodec/riscv/vp9dsp_init.c index 454dcd963f..9606d8545f 100644 --- a/libavcodec/riscv/vp9dsp_init.c +++ b/libavcodec/riscv/vp9dsp_init.c @@ -63,6 +63,27 @@ static av_cold void vp9dsp_mc_init_riscv(VP9DSPContext *dsp, int bpp) init_fpel(3, 8); init_fpel(4, 4); + dsp->mc[0][FILTER_BILINEAR ][0][0][1] = ff_put_vp9_bilin_64v_rvv; + dsp->mc[0][FILTER_BILINEAR ][0][1][0] = ff_put_vp9_bilin_64h_rvv; + dsp->mc[0][FILTER_BILINEAR ][1][0][1] = ff_avg_vp9_bilin_64v_rvv; + dsp->mc[0][FILTER_BILINEAR ][1][1][0] = ff_avg_vp9_bilin_64h_rvv; + dsp->mc[1][FILTER_BILINEAR ][0][0][1] = ff_put_vp9_bilin_32v_rvv; + dsp->mc[1][FILTER_BILINEAR ][0][1][0] = ff_put_vp9_bilin_32h_rvv; + dsp->mc[1][FILTER_BILINEAR ][1][0][1] = ff_avg_vp9_bilin_32v_rvv; + dsp->mc[1][FILTER_BILINEAR ][1][1][0] = ff_avg_vp9_bilin_32h_rvv; + dsp->mc[2][FILTER_BILINEAR ][0][0][1] = ff_put_vp9_bilin_16v_rvv; + dsp->mc[2][FILTER_BILINEAR ][0][1][0] = ff_put_vp9_bilin_16h_rvv; + dsp->mc[2][FILTER_BILINEAR ][1][0][1] = ff_avg_vp9_bilin_16v_rvv; + dsp->mc[2][FILTER_BILINEAR ][1][1][0] = ff_avg_vp9_bilin_16h_rvv; + dsp->mc[3][FILTER_BILINEAR ][0][0][1] = ff_put_vp9_bilin_8v_rvv; + dsp->mc[3][FILTER_BILINEAR ][0][1][0] = ff_put_vp9_bilin_8h_rvv; + dsp->mc[3][FILTER_BILINEAR ][1][0][1] = ff_avg_vp9_bilin_8v_rvv; + dsp->mc[3][FILTER_BILINEAR ][1][1][0] = ff_avg_vp9_bilin_8h_rvv; + dsp->mc[4][FILTER_BILINEAR ][0][0][1] = ff_put_vp9_bilin_4v_rvv; + dsp->mc[4][FILTER_BILINEAR ][0][1][0] = ff_put_vp9_bilin_4h_rvv; + dsp->mc[4][FILTER_BILINEAR ][1][0][1] = ff_avg_vp9_bilin_4v_rvv; + dsp->mc[4][FILTER_BILINEAR ][1][1][0] = ff_avg_vp9_bilin_4h_rvv; + #undef init_fpel } #endif