This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 87190fff6e42fc24c23c1a3b8e5831d800eebac7
Author:     Rémi Denis-Courmont <[email protected]>
AuthorDate: Thu Dec 11 18:58:37 2025 +0200
Commit:     Rémi Denis-Courmont <[email protected]>
CommitDate: Sun Dec 14 10:33:40 2025 +0200

    lavc/llvidencdsp: R-V B sub_median_pred
    
    SiFive U74:
    sub_median_pred_c:                                  238947.3 ( 1.00x)
    sub_median_pred_rvb_b:                              106686.9 ( 2.24x)
    
    SpacemiT X60:
    sub_median_pred_c:                                  297862.8 ( 1.00x)
    sub_median_pred_rvb_b:                              101992.2 ( 2.92x)
---
 libavcodec/riscv/Makefile                          |  1 +
 libavcodec/riscv/llvidencdsp_init.c                | 13 +++++-
 .../riscv/{mpegvideo_rvv.S => llvidencdsp_rvb.S}   | 50 ++++++++++------------
 3 files changed, 36 insertions(+), 28 deletions(-)

diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
index 38021f873f..20f6bc73d6 100644
--- a/libavcodec/riscv/Makefile
+++ b/libavcodec/riscv/Makefile
@@ -46,6 +46,7 @@ RVV-OBJS-$(CONFIG_LLAUDDSP) += riscv/llauddsp_rvv.o
 OBJS-$(CONFIG_LLVIDDSP) += riscv/llviddsp_init.o
 RVV-OBJS-$(CONFIG_LLVIDDSP) += riscv/llviddsp_rvv.o
 OBJS-$(CONFIG_LLVIDENCDSP) += riscv/llvidencdsp_init.o
+RV-OBJS-$(CONFIG_LLVIDDSP) += riscv/llvidencdsp_rvb.o
 RVV-OBJS-$(CONFIG_LLVIDENCDSP) += riscv/llvidencdsp_rvv.o
 OBJS-$(CONFIG_LPC) += riscv/lpc_init.o
 RVV-OBJS-$(CONFIG_LPC) += riscv/lpc_rvv.o
diff --git a/libavcodec/riscv/llvidencdsp_init.c 
b/libavcodec/riscv/llvidencdsp_init.c
index bd2ffef42f..75f8438ab4 100644
--- a/libavcodec/riscv/llvidencdsp_init.c
+++ b/libavcodec/riscv/llvidencdsp_init.c
@@ -24,6 +24,12 @@
 #include "libavutil/cpu.h"
 #include "libavcodec/lossless_videoencdsp.h"
 
+#include "libavcodec/mathops.h"
+#include <sys/param.h>
+
+void ff_llvidenc_sub_median_pred_rvb(uint8_t *dst, const uint8_t *src1,
+                                     const uint8_t *src2, intptr_t w,
+                                     int *left, int *left_top);
 void ff_llvidenc_diff_bytes_rvv(uint8_t *dst, const uint8_t *src1,
                                 const uint8_t *src2, intptr_t w);
 void ff_llvidenc_sub_left_predict_rvv(uint8_t *dst, const uint8_t *src,
@@ -32,12 +38,17 @@ void ff_llvidenc_sub_left_predict_rvv(uint8_t *dst, const 
uint8_t *src,
 
 av_cold void ff_llvidencdsp_init_riscv(LLVidEncDSPContext *c)
 {
-#if HAVE_RVV
+#if HAVE_RV
     int flags = av_get_cpu_flags();
 
+    if (flags & AV_CPU_FLAG_RVB_BASIC)
+        c->sub_median_pred = ff_llvidenc_sub_median_pred_rvb;
+
+#if HAVE_RVV
     if (flags & AV_CPU_FLAG_RVV_I32) {
         c->diff_bytes = ff_llvidenc_diff_bytes_rvv;
         c->sub_left_predict = ff_llvidenc_sub_left_predict_rvv;
     }
 #endif
+#endif
 }
diff --git a/libavcodec/riscv/mpegvideo_rvv.S 
b/libavcodec/riscv/llvidencdsp_rvb.S
similarity index 56%
copy from libavcodec/riscv/mpegvideo_rvv.S
copy to libavcodec/riscv/llvidencdsp_rvb.S
index 5312413db4..d34aef394e 100644
--- a/libavcodec/riscv/mpegvideo_rvv.S
+++ b/libavcodec/riscv/llvidencdsp_rvb.S
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2024 Rémi Denis-Courmont.
+ * Copyright © 2025 Rémi Denis-Courmont.
  *
  * This file is part of FFmpeg.
  *
@@ -20,34 +20,30 @@
 
 #include "libavutil/riscv/asm.S"
 
-func ff_h263_dct_unquantize_intra_rvv
+func ff_llvidenc_sub_median_pred_rvb, zbb
         lpad    0
-        addi    a1, a1, 2
-        beqz    a4, 1f
-        slli    a3, a3, 1
-        mv      a4, zero
-        j       2f
-endfunc
-
-func ff_h263_dct_unquantize_inter_rvv, zve32x, zba
-        lpad    0
-        addi    a2, a2, 1
+        lbu     t4, (a4)    # l
+        lbu     t5, (a5)    # lt
+        add     a3, a0, a3
 1:
-        addi    a4, a3, -1
-        slli    a3, a3, 1
-        ori     a4, a4, 1
-2:
-        vsetvli t0, a2, e16, m8, ta, mu
-        vle16.v v8, (a1)
-        sub     a2, a2, t0
-        vmv.v.x v16, a4
-        vmslt.vi    v0, v8, 0
-        vneg.v  v16, v16, v0.t
-        vmsne.vi    v0, v8, 0
-        vmadd.vx    v8, a3, v16, v0.t
-        vse16.v v8, (a1)
-        sh1add  a1, t0, a1
-        bnez    a2, 2b
+        lbu     t1, (a1)    # src1
+        addi    a1, a1, 1
+        add     t6, t4, t1
+        max     t3, t4, t1
+        sub     t6, t6, t5  # l + src1 - lt
+        min     t0, t4, t1
+        andi    t6, t6, 0xff
+        mv      t5, t1
+        min     t3, t3, t6
+        lbu     t4, (a2)    # src2
+        addi    a0, a0, 1
+        max     t6, t0, t3  # mid_pred(...)
+        sub     t0, t4, t6
+        addi    a2, a2, 1
+        sb      t0, -1(a0)
+        bne     a0, a3, 1b
 
+        sw      t4, (a4)
+        sw      t5, (a5)
         ret
 endfunc

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to