C908: vp9_vert_8x8_8bpp_c: 22.0 vp9_vert_8x8_8bpp_rvi: 15.7 vp9_vert_16x16_8bpp_c: 71.2 vp9_vert_16x16_8bpp_rvi: 39.0 vp9_vert_32x32_8bpp_c: 300.2 vp9_vert_32x32_8bpp_rvi: 135.2
Unified · Split
| @@ -63,6 +63,7 @@ OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_init.o · 62 unmodified lines | ||
| 63 | 63 | RV-OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_rvi.o |
| 64 | 64 | RVV-OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_rvv.o |
| 65 | 65 | OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9dsp_init.o |
| 66 | +RV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_intra_rvi.o | |
| 66 | 67 | RVV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_intra_rvv.o |
| 67 | 68 | OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_init.o |
| 68 | 69 | RVV-OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_rvv.o |
| @@ -0,0 +1,71 @@ | ||
| 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 | +#if __riscv_xlen >= 64 | |
| 24 | +func ff_v_32x32_rvi | |
| 25 | + ld t0, (a3) | |
| 26 | + ld t1, 8(a3) | |
| 27 | + ld t2, 16(a3) | |
| 28 | + ld t3, 24(a3) | |
| 29 | + .rept 16 | |
| 30 | + add a7, a0, a1 | |
| 31 | + sd t0, (a0) | |
| 32 | + sd t1, 8(a0) | |
| 33 | + sd t2, 16(a0) | |
| 34 | + sd t3, 24(a0) | |
| 35 | + sh1add a0, a1, a0 | |
| 36 | + sd t0, (a7) | |
| 37 | + sd t1, 8(a7) | |
| 38 | + sd t2, 16(a7) | |
| 39 | + sd t3, 24(a7) | |
| 40 | + .endr | |
| 41 | + | |
| 42 | + ret | |
| 43 | +endfunc | |
| 44 | + | |
| 45 | +func ff_v_16x16_rvi | |
| 46 | + ld t0, (a3) | |
| 47 | + ld t1, 8(a3) | |
| 48 | + .rept 8 | |
| 49 | + add a7, a0, a1 | |
| 50 | + sd t0, (a0) | |
| 51 | + sd t1, 8(a0) | |
| 52 | + sh1add a0, a1, a0 | |
| 53 | + sd t0, (a7) | |
| 54 | + sd t1, 8(a7) | |
| 55 | + .endr | |
| 56 | + | |
| 57 | + ret | |
| 58 | +endfunc | |
| 59 | + | |
| 60 | +func ff_v_8x8_rvi | |
| 61 | + ld t0, (a3) | |
| 62 | + .rept 4 | |
| 63 | + add a7, a0, a1 | |
| 64 | + sd t0, (a0) | |
| 65 | + sh1add a0, a1, a0 | |
| 66 | + sd t0, (a7) | |
| 67 | + .endr | |
| 68 | + | |
| 69 | + ret | |
| 70 | +endfunc | |
| 71 | +#endif | |
| @@ -60,6 +60,12 @@ void ff_dc_129_16x16_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l, · 59 unmodified lines | ||
| 60 | 60 | const uint8_t *a); |
| 61 | 61 | void ff_dc_129_8x8_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l, |
| 62 | 62 | const uint8_t *a); |
| 63 | +void ff_v_32x32_rvi(uint8_t *dst, ptrdiff_t stride, const uint8_t *l, | |
| 64 | + const uint8_t *a); | |
| 65 | +void ff_v_16x16_rvi(uint8_t *dst, ptrdiff_t stride, const uint8_t *l, | |
| 66 | + const uint8_t *a); | |
| 67 | +void ff_v_8x8_rvi(uint8_t *dst, ptrdiff_t stride, const uint8_t *l, | |
| 68 | + const uint8_t *a); | |
| 63 | 69 | |
| 64 | 70 | #define VP9_8TAP_RISCV_RVV_FUNC(SIZE, type, type_idx) \ |
| 65 | 71 | void ff_put_8tap_##type##_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \ |
| @@ -24,11 +24,19 @@ · 23 unmodified lines | ||
| 24 | 24 | #include "libavcodec/vp9dsp.h" |
| 25 | 25 | #include "vp9dsp.h" |
| 26 | 26 | |
| 27 | −static av_cold void vp9dsp_intrapred_init_rvv(VP9DSPContext *dsp, int bpp) | |
| 27 | +static av_cold void vp9dsp_intrapred_init_riscv(VP9DSPContext *dsp, int bpp) | |
| 28 | 28 | { |
| 29 | −#if HAVE_RVV | |
| 29 | +#if HAVE_RV | |
| 30 | 30 | int flags = av_get_cpu_flags(); |
| 31 | 31 | |
| 32 | +# if __riscv_xlen >= 64 | |
| 33 | + if (bpp == 8 && (flags & AV_CPU_FLAG_RVB_ADDR)) { | |
| 34 | + dsp->intra_pred[TX_32X32][VERT_PRED] = ff_v_32x32_rvi; | |
| 35 | + dsp->intra_pred[TX_16X16][VERT_PRED] = ff_v_16x16_rvi; | |
| 36 | + dsp->intra_pred[TX_8X8][VERT_PRED] = ff_v_8x8_rvi; | |
| 37 | + } | |
| 38 | +# endif | |
| 39 | +#if HAVE_RVV | |
| 32 | 40 | if (bpp == 8 && flags & AV_CPU_FLAG_RVV_I64 && ff_rv_vlen_least(128)) { |
| 33 | 41 | dsp->intra_pred[TX_8X8][DC_PRED] = ff_dc_8x8_rvv; |
| 34 | 42 | dsp->intra_pred[TX_8X8][LEFT_DC_PRED] = ff_dc_left_8x8_rvv; |
| @@ -53,9 +61,10 @@ static av_cold void vp9dsp_intrapred_init_rvv(VP9DSPContext *dsp, int bpp) · 18 unmodified lines | ||
| 53 | 61 | dsp->intra_pred[TX_16X16][TOP_DC_PRED] = ff_dc_top_16x16_rvv; |
| 54 | 62 | } |
| 55 | 63 | #endif |
| 64 | +#endif | |
| 56 | 65 | } |
| 57 | 66 | |
| 58 | 67 | av_cold void ff_vp9dsp_init_riscv(VP9DSPContext *dsp, int bpp, int bitexact) |
| 59 | 68 | { |
| 60 | − vp9dsp_intrapred_init_rvv(dsp, bpp); | |
| 69 | + vp9dsp_intrapred_init_riscv(dsp, bpp); | |
| 61 | 70 | } |