C908: vp9_avg4_8bpp_c: 1.2 vp9_avg4_8bpp_rvv_i64: 1.0 vp9_avg8_8bpp_c: 3.7 vp9_avg8_8bpp_rvv_i64: 1.5 vp9_avg16_8bpp_c: 14.7 vp9_avg16_8bpp_rvv_i64: 3.5 vp9_avg32_8bpp_c: 57.7 vp9_avg32_8bpp_rvv_i64: 10.0 vp9_avg64_8bpp_c: 229.0 vp9_avg64_8bpp_rvv_i64: 31.7
Unified · Split
| @@ -69,6 +69,7 @@ RVV-OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_rvv.o · 68 unmodified lines | |||
| 69 | OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9dsp_init.o | 69 | OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9dsp_init.o |
| 70 | RV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_intra_rvi.o \ | 70 | RV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_intra_rvi.o \ |
| 71 | riscv/vp9_mc_rvi.o | 71 | riscv/vp9_mc_rvi.o |
| 72 | RVV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_intra_rvv.o | 72 | RVV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_intra_rvv.o \ |
| 73 | riscv/vp9_mc_rvv.o | ||
| 73 | OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_init.o | 74 | OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_init.o |
| 74 | RVV-OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_rvv.o | 75 | RVV-OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_rvv.o |
| @@ -0,0 +1,58 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2024 Institue of Software Chinese Academy of Sciences (ISCAS). | ||
| 3 | * | ||
| 4 | * This file is part of FFmpeg. | ||
| 5 | * | ||
| 6 | * FFmpeg is free software; you can redistribute it and/or | ||
| 7 | * modify it under the terms of the GNU Lesser General Public | ||
| 8 | * License as published by the Free Software Foundation; either | ||
| 9 | * version 2.1 of the License, or (at your option) any later version. | ||
| 10 | * | ||
| 11 | * FFmpeg is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 14 | * Lesser General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU Lesser General Public | ||
| 17 | * License along with FFmpeg; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #include "libavutil/riscv/asm.S" | ||
| 22 | |||
| 23 | .macro vsetvlstatic8 len an maxlen mn=m4 | ||
| 24 | .if \len == 4 | ||
| 25 | vsetivli zero, \len, e8, mf4, ta, ma | ||
| 26 | .elseif \len == 8 | ||
| 27 | vsetivli zero, \len, e8, mf2, ta, ma | ||
| 28 | .elseif \len == 16 | ||
| 29 | vsetivli zero, \len, e8, m1, ta, ma | ||
| 30 | .elseif \len == 32 | ||
| 31 | li \an, \len | ||
| 32 | vsetvli zero, \an, e8, m2, ta, ma | ||
| 33 | .elseif \len == 64 | ||
| 34 | li \an, \maxlen | ||
| 35 | vsetvli zero, \an, e8, \mn, ta, ma | ||
| 36 | .endif | ||
| 37 | .endm | ||
| 38 | |||
| 39 | .macro copy_avg len | ||
| 40 | func ff_avg\len\()_rvv, zve32x | ||
| 41 | csrwi vxrm, 0 | ||
| 42 | vsetvlstatic8 \len t0 64 | ||
| 43 | 1: | ||
| 44 | vle8.v v8, (a2) | ||
| 45 | vle8.v v16, (a0) | ||
| 46 | vaaddu.vv v8, v8, v16 | ||
| 47 | addi a4, a4, -1 | ||
| 48 | vse8.v v8, (a0) | ||
| 49 | add a2, a2, a3 | ||
| 50 | add a0, a0, a1 | ||
| 51 | bnez a4, 1b | ||
| 52 | ret | ||
| 53 | endfunc | ||
| 54 | .endm | ||
| 55 | |||
| 56 | .irp len, 64, 32, 16, 8, 4 | ||
| 57 | copy_avg \len | ||
| 58 | .endr | ||
| @@ -48,6 +48,24 @@ static av_cold void vp9dsp_mc_init_riscv(VP9DSPContext *dsp, int bpp) · 47 unmodified lines | |||
| 48 | } | 48 | } |
| 49 | # endif | 49 | # endif |
| 50 | 50 | ||
| 51 | #if HAVE_RVV | ||
| 52 | if (bpp == 8 && (flags & AV_CPU_FLAG_RVV_I32) && ff_rv_vlen_least(128)) { | ||
| 53 | |||
| 54 | #define init_fpel(idx1, sz) \ | ||
| 55 | dsp->mc[idx1][FILTER_8TAP_SMOOTH ][1][0][0] = ff_avg##sz##_rvv; \ | ||
| 56 | dsp->mc[idx1][FILTER_8TAP_REGULAR][1][0][0] = ff_avg##sz##_rvv; \ | ||
| 57 | dsp->mc[idx1][FILTER_8TAP_SHARP ][1][0][0] = ff_avg##sz##_rvv; \ | ||
| 58 | dsp->mc[idx1][FILTER_BILINEAR ][1][0][0] = ff_avg##sz##_rvv | ||
| 59 | |||
| 60 | init_fpel(0, 64); | ||
| 61 | init_fpel(1, 32); | ||
| 62 | init_fpel(2, 16); | ||
| 63 | init_fpel(3, 8); | ||
| 64 | init_fpel(4, 4); | ||
| 65 | |||
| 66 | #undef init_fpel | ||
| 67 | } | ||
| 68 | #endif | ||
| 51 | #endif | 69 | #endif |
| 52 | } | 70 | } |
| 53 | 71 | ||