Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc
@ 2024-01-31 12:00 flow gg
  2024-01-31 16:31 ` Rémi Denis-Courmont
  0 siblings, 1 reply; 9+ messages in thread
From: flow gg @ 2024-01-31 12:00 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

[-- Attachment #1: Type: text/plain, Size: 1 bytes --]



[-- Attachment #2: 0002-lavc-rv34dsp-R-V-V-rv34_inv_transform_dc.patch --]
[-- Type: text/x-patch, Size: 5308 bytes --]

From 7e1c8d6b73afad9885222c0c9012543aface5397 Mon Sep 17 00:00:00 2001
From: sunyuechi <sunyuechi@iscas.ac.cn>
Date: Wed, 31 Jan 2024 19:03:20 +0800
Subject: [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc

C908:
rv34_inv_transform_dc_c: 35.5
rv34_inv_transform_dc_rvv_i32: 27.0
---
 libavcodec/riscv/Makefile       |  2 ++
 libavcodec/riscv/rv34dsp_init.c | 39 +++++++++++++++++++++++++++++++++
 libavcodec/riscv/rv34dsp_rvv.S  | 38 ++++++++++++++++++++++++++++++++
 libavcodec/rv34dsp.c            |  2 ++
 libavcodec/rv34dsp.h            |  1 +
 5 files changed, 82 insertions(+)
 create mode 100644 libavcodec/riscv/rv34dsp_init.c
 create mode 100644 libavcodec/riscv/rv34dsp_rvv.S

diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
index e15aba58f4..ffe6631cf2 100644
--- a/libavcodec/riscv/Makefile
+++ b/libavcodec/riscv/Makefile
@@ -44,6 +44,8 @@ RVV-OBJS-$(CONFIG_OPUS_DECODER) += riscv/opusdsp_rvv.o
 OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_init.o
 RV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvi.o
 RVV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvv.o
+OBJS-$(CONFIG_RV34DSP) += riscv/rv34dsp_init.o
+RVV-OBJS-$(CONFIG_RV34DSP) += riscv/rv34dsp_rvv.o
 OBJS-$(CONFIG_SVQ1_ENCODER) += riscv/svqenc_init.o
 RVV-OBJS-$(CONFIG_SVQ1_ENCODER) += riscv/svqenc_rvv.o
 OBJS-$(CONFIG_TAK_DECODER) += riscv/takdsp_init.o
diff --git a/libavcodec/riscv/rv34dsp_init.c b/libavcodec/riscv/rv34dsp_init.c
new file mode 100644
index 0000000000..852c8ad9a8
--- /dev/null
+++ b/libavcodec/riscv/rv34dsp_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/rv34dsp.h"
+
+void ff_rv34_inv_transform_dc_rvv(int16_t *block);
+
+av_cold void ff_rv34dsp_init_riscv(RV34DSPContext *c)
+{
+#if HAVE_RVV
+    int flags = av_get_cpu_flags();
+
+    if (flags & AV_CPU_FLAG_RVV_I32 && ff_get_rv_vlenb() >= 16) {
+        c->rv34_inv_transform_dc = ff_rv34_inv_transform_dc_rvv;
+    }
+#endif
+}
diff --git a/libavcodec/riscv/rv34dsp_rvv.S b/libavcodec/riscv/rv34dsp_rvv.S
new file mode 100644
index 0000000000..acf5b0c3e8
--- /dev/null
+++ b/libavcodec/riscv/rv34dsp_rvv.S
@@ -0,0 +1,38 @@
+/*
+ * 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"
+
+func ff_rv34_inv_transform_dc_rvv, zve32x
+        lh            t1, 0(a0)
+        slliw         t2, t1, 7
+        subw          t2, t2, t1
+        slliw         t2, t2, 2
+        subw          t2, t2, t1
+        sraiw         t2, t2, 11
+        slliw         t2, t2, 16
+        sraiw         t2, t2, 16
+        vsetivli      zero, 16, e16, m2, ta, ma
+        vmv.v.x       v8, t2
+        vsetivli      zero, 4, e8, mf4, ta, ma
+        vse64.v       v8, (a0)
+
+        ret
+endfunc
diff --git a/libavcodec/rv34dsp.c b/libavcodec/rv34dsp.c
index 8f9d88396c..44486f8edd 100644
--- a/libavcodec/rv34dsp.c
+++ b/libavcodec/rv34dsp.c
@@ -138,6 +138,8 @@ av_cold void ff_rv34dsp_init(RV34DSPContext *c)
 
 #if ARCH_ARM
     ff_rv34dsp_init_arm(c);
+#elif ARCH_RISCV
+    ff_rv34dsp_init_riscv(c);
 #elif ARCH_X86
     ff_rv34dsp_init_x86(c);
 #endif
diff --git a/libavcodec/rv34dsp.h b/libavcodec/rv34dsp.h
index 2e9ec4eee4..b15424d4ae 100644
--- a/libavcodec/rv34dsp.h
+++ b/libavcodec/rv34dsp.h
@@ -79,6 +79,7 @@ void ff_rv34dsp_init(RV34DSPContext *c);
 void ff_rv40dsp_init(RV34DSPContext *c);
 
 void ff_rv34dsp_init_arm(RV34DSPContext *c);
+void ff_rv34dsp_init_riscv(RV34DSPContext *c);
 void ff_rv34dsp_init_x86(RV34DSPContext *c);
 
 void ff_rv40dsp_init_aarch64(RV34DSPContext *c);
-- 
2.43.0


[-- Attachment #3: Type: text/plain, Size: 251 bytes --]

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc
  2024-01-31 12:00 [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc flow gg
@ 2024-01-31 16:31 ` Rémi Denis-Courmont
  2024-01-31 17:57   ` flow gg
  0 siblings, 1 reply; 9+ messages in thread
From: Rémi Denis-Courmont @ 2024-01-31 16:31 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Hi,

I think this breaks the build for RV32, and it lacks checks for the vector 
length.

Also fractional multipler should never be smaller than the ratio of the 
specified element size to the largest element size used in the function. Here 
it is largelly inconsequential, but for instance "e32, mf4" and "e64, mf2" are 
invalid.

-- 
雷米‧德尼-库尔蒙
http://www.remlab.net/



_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc
  2024-01-31 16:31 ` Rémi Denis-Courmont
@ 2024-01-31 17:57   ` flow gg
  2024-02-06 17:26     ` Rémi Denis-Courmont
  0 siblings, 1 reply; 9+ messages in thread
From: flow gg @ 2024-01-31 17:57 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

[-- Attachment #1: Type: text/plain, Size: 1333 bytes --]

> Also fractional multipler should never be smaller than the ratio of the
> specified element size to the largest element size used in the function.
Here
> it is largelly inconsequential, but for instance "e32, mf4" and "e64,
mf2" are
> invalid.

Thanks, I indeed almost forgot about this part

> I think this breaks the build for RV32

Okay, modified in the reply

> it lacks checks for the vector length.

In the rv34dsp_init.c, there's a check with ff_get_rv_vlenb() >= 16.
Doesn't this already check the vector length?



Rémi Denis-Courmont <remi@remlab.net> 于2024年2月1日周四 00:31写道:

> Hi,
>
> I think this breaks the build for RV32, and it lacks checks for the vector
> length.
>
> Also fractional multipler should never be smaller than the ratio of the
> specified element size to the largest element size used in the function.
> Here
> it is largelly inconsequential, but for instance "e32, mf4" and "e64, mf2"
> are
> invalid.
>
> --
> 雷米‧德尼-库尔蒙
> http://www.remlab.net/
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>

[-- Attachment #2: 0002-lavc-rv34dsp-R-V-V-rv34_inv_transform_dc.patch --]
[-- Type: text/x-patch, Size: 5308 bytes --]

From 538ff8b20ead25d95b8507e318207b19d89a63c2 Mon Sep 17 00:00:00 2001
From: sunyuechi <sunyuechi@iscas.ac.cn>
Date: Wed, 31 Jan 2024 19:03:20 +0800
Subject: [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc

C908:
rv34_inv_transform_dc_c: 35.5
rv34_inv_transform_dc_rvv_i32: 27.0
---
 libavcodec/riscv/Makefile       |  2 ++
 libavcodec/riscv/rv34dsp_init.c | 39 +++++++++++++++++++++++++++++++++
 libavcodec/riscv/rv34dsp_rvv.S  | 38 ++++++++++++++++++++++++++++++++
 libavcodec/rv34dsp.c            |  2 ++
 libavcodec/rv34dsp.h            |  1 +
 5 files changed, 82 insertions(+)
 create mode 100644 libavcodec/riscv/rv34dsp_init.c
 create mode 100644 libavcodec/riscv/rv34dsp_rvv.S

diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
index e15aba58f4..ffe6631cf2 100644
--- a/libavcodec/riscv/Makefile
+++ b/libavcodec/riscv/Makefile
@@ -44,6 +44,8 @@ RVV-OBJS-$(CONFIG_OPUS_DECODER) += riscv/opusdsp_rvv.o
 OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_init.o
 RV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvi.o
 RVV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvv.o
+OBJS-$(CONFIG_RV34DSP) += riscv/rv34dsp_init.o
+RVV-OBJS-$(CONFIG_RV34DSP) += riscv/rv34dsp_rvv.o
 OBJS-$(CONFIG_SVQ1_ENCODER) += riscv/svqenc_init.o
 RVV-OBJS-$(CONFIG_SVQ1_ENCODER) += riscv/svqenc_rvv.o
 OBJS-$(CONFIG_TAK_DECODER) += riscv/takdsp_init.o
diff --git a/libavcodec/riscv/rv34dsp_init.c b/libavcodec/riscv/rv34dsp_init.c
new file mode 100644
index 0000000000..852c8ad9a8
--- /dev/null
+++ b/libavcodec/riscv/rv34dsp_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/rv34dsp.h"
+
+void ff_rv34_inv_transform_dc_rvv(int16_t *block);
+
+av_cold void ff_rv34dsp_init_riscv(RV34DSPContext *c)
+{
+#if HAVE_RVV
+    int flags = av_get_cpu_flags();
+
+    if (flags & AV_CPU_FLAG_RVV_I32 && ff_get_rv_vlenb() >= 16) {
+        c->rv34_inv_transform_dc = ff_rv34_inv_transform_dc_rvv;
+    }
+#endif
+}
diff --git a/libavcodec/riscv/rv34dsp_rvv.S b/libavcodec/riscv/rv34dsp_rvv.S
new file mode 100644
index 0000000000..4b7a071f7c
--- /dev/null
+++ b/libavcodec/riscv/rv34dsp_rvv.S
@@ -0,0 +1,38 @@
+/*
+ * 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"
+
+func ff_rv34_inv_transform_dc_rvv, zve32x
+        lh            t1, 0(a0)
+        slli          t2, t1, 7
+        sub           t2, t2, t1
+        slli          t2, t2, 2
+        sub           t2, t2, t1
+        srai          t2, t2, 11
+        slli          t2, t2, 16
+        srai          t2, t2, 16
+        vsetivli      zero, 16, e16, m2, ta, ma
+        vmv.v.x       v8, t2
+        vsetivli      zero, 4, e8, mf4, ta, ma
+        vse64.v       v8, (a0)
+
+        ret
+endfunc
diff --git a/libavcodec/rv34dsp.c b/libavcodec/rv34dsp.c
index 8f9d88396c..44486f8edd 100644
--- a/libavcodec/rv34dsp.c
+++ b/libavcodec/rv34dsp.c
@@ -138,6 +138,8 @@ av_cold void ff_rv34dsp_init(RV34DSPContext *c)
 
 #if ARCH_ARM
     ff_rv34dsp_init_arm(c);
+#elif ARCH_RISCV
+    ff_rv34dsp_init_riscv(c);
 #elif ARCH_X86
     ff_rv34dsp_init_x86(c);
 #endif
diff --git a/libavcodec/rv34dsp.h b/libavcodec/rv34dsp.h
index 2e9ec4eee4..b15424d4ae 100644
--- a/libavcodec/rv34dsp.h
+++ b/libavcodec/rv34dsp.h
@@ -79,6 +79,7 @@ void ff_rv34dsp_init(RV34DSPContext *c);
 void ff_rv40dsp_init(RV34DSPContext *c);
 
 void ff_rv34dsp_init_arm(RV34DSPContext *c);
+void ff_rv34dsp_init_riscv(RV34DSPContext *c);
 void ff_rv34dsp_init_x86(RV34DSPContext *c);
 
 void ff_rv40dsp_init_aarch64(RV34DSPContext *c);
-- 
2.43.0


[-- Attachment #3: Type: text/plain, Size: 251 bytes --]

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc
  2024-01-31 17:57   ` flow gg
@ 2024-02-06 17:26     ` Rémi Denis-Courmont
  2024-02-07  0:12       ` flow gg
  0 siblings, 1 reply; 9+ messages in thread
From: Rémi Denis-Courmont @ 2024-02-06 17:26 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

	Hi,

I'm not sure why you're mixing element sizes this way, but the code should not 
even compile due to mismatched extensions.

-- 
Rémi Denis-Courmont
http://www.remlab.net/



_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc
  2024-02-06 17:26     ` Rémi Denis-Courmont
@ 2024-02-07  0:12       ` flow gg
  2024-02-09 21:13         ` Rémi Denis-Courmont
  0 siblings, 1 reply; 9+ messages in thread
From: flow gg @ 2024-02-07  0:12 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

[-- Attachment #1: Type: text/plain, Size: 617 bytes --]

My carelessness.. fixed it in the reply.

Rémi Denis-Courmont <remi@remlab.net> 于2024年2月7日周三 01:26写道:

>         Hi,
>
> I'm not sure why you're mixing element sizes this way, but the code should
> not
> even compile due to mismatched extensions.
>
> --
> Rémi Denis-Courmont
> http://www.remlab.net/
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>

[-- Attachment #2: 0002-lavc-rv34dsp-R-V-V-rv34_inv_transform_dc.patch --]
[-- Type: text/x-patch, Size: 5308 bytes --]

From c7013641191a05ea67b6151ce1a91393759aed12 Mon Sep 17 00:00:00 2001
From: sunyuechi <sunyuechi@iscas.ac.cn>
Date: Wed, 31 Jan 2024 19:03:20 +0800
Subject: [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc

C908:
rv34_inv_transform_dc_c: 35.5
rv34_inv_transform_dc_rvv_i32: 27.0
---
 libavcodec/riscv/Makefile       |  2 ++
 libavcodec/riscv/rv34dsp_init.c | 39 +++++++++++++++++++++++++++++++++
 libavcodec/riscv/rv34dsp_rvv.S  | 38 ++++++++++++++++++++++++++++++++
 libavcodec/rv34dsp.c            |  2 ++
 libavcodec/rv34dsp.h            |  1 +
 5 files changed, 82 insertions(+)
 create mode 100644 libavcodec/riscv/rv34dsp_init.c
 create mode 100644 libavcodec/riscv/rv34dsp_rvv.S

diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
index e15aba58f4..ffe6631cf2 100644
--- a/libavcodec/riscv/Makefile
+++ b/libavcodec/riscv/Makefile
@@ -44,6 +44,8 @@ RVV-OBJS-$(CONFIG_OPUS_DECODER) += riscv/opusdsp_rvv.o
 OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_init.o
 RV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvi.o
 RVV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvv.o
+OBJS-$(CONFIG_RV34DSP) += riscv/rv34dsp_init.o
+RVV-OBJS-$(CONFIG_RV34DSP) += riscv/rv34dsp_rvv.o
 OBJS-$(CONFIG_SVQ1_ENCODER) += riscv/svqenc_init.o
 RVV-OBJS-$(CONFIG_SVQ1_ENCODER) += riscv/svqenc_rvv.o
 OBJS-$(CONFIG_TAK_DECODER) += riscv/takdsp_init.o
diff --git a/libavcodec/riscv/rv34dsp_init.c b/libavcodec/riscv/rv34dsp_init.c
new file mode 100644
index 0000000000..852c8ad9a8
--- /dev/null
+++ b/libavcodec/riscv/rv34dsp_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/rv34dsp.h"
+
+void ff_rv34_inv_transform_dc_rvv(int16_t *block);
+
+av_cold void ff_rv34dsp_init_riscv(RV34DSPContext *c)
+{
+#if HAVE_RVV
+    int flags = av_get_cpu_flags();
+
+    if (flags & AV_CPU_FLAG_RVV_I32 && ff_get_rv_vlenb() >= 16) {
+        c->rv34_inv_transform_dc = ff_rv34_inv_transform_dc_rvv;
+    }
+#endif
+}
diff --git a/libavcodec/riscv/rv34dsp_rvv.S b/libavcodec/riscv/rv34dsp_rvv.S
new file mode 100644
index 0000000000..0011a17a22
--- /dev/null
+++ b/libavcodec/riscv/rv34dsp_rvv.S
@@ -0,0 +1,38 @@
+/*
+ * 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"
+
+func ff_rv34_inv_transform_dc_rvv, zve32x
+        lh            t1, 0(a0)
+        slli          t2, t1, 7
+        sub           t2, t2, t1
+        slli          t2, t2, 2
+        sub           t2, t2, t1
+        srai          t2, t2, 11
+        slli          t2, t2, 16
+        srai          t2, t2, 16
+        vsetivli      zero, 16, e16, m2, ta, ma
+        vmv.v.x       v8, t2
+        vsetivli      zero, 8, e8, mf2, ta, ma
+        vse32.v       v8, (a0)
+
+        ret
+endfunc
diff --git a/libavcodec/rv34dsp.c b/libavcodec/rv34dsp.c
index 8f9d88396c..44486f8edd 100644
--- a/libavcodec/rv34dsp.c
+++ b/libavcodec/rv34dsp.c
@@ -138,6 +138,8 @@ av_cold void ff_rv34dsp_init(RV34DSPContext *c)
 
 #if ARCH_ARM
     ff_rv34dsp_init_arm(c);
+#elif ARCH_RISCV
+    ff_rv34dsp_init_riscv(c);
 #elif ARCH_X86
     ff_rv34dsp_init_x86(c);
 #endif
diff --git a/libavcodec/rv34dsp.h b/libavcodec/rv34dsp.h
index 2e9ec4eee4..b15424d4ae 100644
--- a/libavcodec/rv34dsp.h
+++ b/libavcodec/rv34dsp.h
@@ -79,6 +79,7 @@ void ff_rv34dsp_init(RV34DSPContext *c);
 void ff_rv40dsp_init(RV34DSPContext *c);
 
 void ff_rv34dsp_init_arm(RV34DSPContext *c);
+void ff_rv34dsp_init_riscv(RV34DSPContext *c);
 void ff_rv34dsp_init_x86(RV34DSPContext *c);
 
 void ff_rv40dsp_init_aarch64(RV34DSPContext *c);
-- 
2.43.0


[-- Attachment #3: Type: text/plain, Size: 251 bytes --]

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc
  2024-02-07  0:12       ` flow gg
@ 2024-02-09 21:13         ` Rémi Denis-Courmont
  2024-02-10  1:57           ` flow gg
  0 siblings, 1 reply; 9+ messages in thread
From: Rémi Denis-Courmont @ 2024-02-09 21:13 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Le keskiviikkona 7. helmikuuta 2024, 2.12.22 EET flow gg a écrit :
> My carelessness.. fixed it in the reply.

I know I said to avoid scalar multiplications, but this may be taking it a 
little too far. Either this works:
   slli t1, t0, 9
   sh2add t0, t0, t0
   sub t0, t1, t0
or just:
   li t1, 13 * 13 * 3
   mul t0, t0, t1

Also the second vsetvl seems pointless, unless you specifically meant that the 
pointer was aligned to 32 bits?

-- 
Rémi Denis-Courmont
http://www.remlab.net/



_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc
  2024-02-09 21:13         ` Rémi Denis-Courmont
@ 2024-02-10  1:57           ` flow gg
  2024-02-10  9:18             ` Rémi Denis-Courmont
  0 siblings, 1 reply; 9+ messages in thread
From: flow gg @ 2024-02-10  1:57 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

[-- Attachment #1: Type: text/plain, Size: 953 bytes --]

Okay, I have updated them in the response

Rémi Denis-Courmont <remi@remlab.net> 于2024年2月10日周六 05:14写道:

> Le keskiviikkona 7. helmikuuta 2024, 2.12.22 EET flow gg a écrit :
> > My carelessness.. fixed it in the reply.
>
> I know I said to avoid scalar multiplications, but this may be taking it a
> little too far. Either this works:
>    slli t1, t0, 9
>    sh2add t0, t0, t0
>    sub t0, t1, t0
> or just:
>    li t1, 13 * 13 * 3
>    mul t0, t0, t1
>
> Also the second vsetvl seems pointless, unless you specifically meant that
> the
> pointer was aligned to 32 bits?
>
> --
> Rémi Denis-Courmont
> http://www.remlab.net/
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>

[-- Attachment #2: 0002-lavc-rv34dsp-R-V-V-rv34_inv_transform_dc.patch --]
[-- Type: text/x-patch, Size: 5127 bytes --]

From 45ca0ac11eea21e30071551959edef50e3935a37 Mon Sep 17 00:00:00 2001
From: sunyuechi <sunyuechi@iscas.ac.cn>
Date: Wed, 31 Jan 2024 19:03:20 +0800
Subject: [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc

C908:
rv34_inv_transform_dc_c: 35.5
rv34_inv_transform_dc_rvv_i32: 27.0
---
 libavcodec/riscv/Makefile       |  2 ++
 libavcodec/riscv/rv34dsp_init.c | 39 +++++++++++++++++++++++++++++++++
 libavcodec/riscv/rv34dsp_rvv.S  | 33 ++++++++++++++++++++++++++++
 libavcodec/rv34dsp.c            |  2 ++
 libavcodec/rv34dsp.h            |  1 +
 5 files changed, 77 insertions(+)
 create mode 100644 libavcodec/riscv/rv34dsp_init.c
 create mode 100644 libavcodec/riscv/rv34dsp_rvv.S

diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
index e15aba58f4..ffe6631cf2 100644
--- a/libavcodec/riscv/Makefile
+++ b/libavcodec/riscv/Makefile
@@ -44,6 +44,8 @@ RVV-OBJS-$(CONFIG_OPUS_DECODER) += riscv/opusdsp_rvv.o
 OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_init.o
 RV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvi.o
 RVV-OBJS-$(CONFIG_PIXBLOCKDSP) += riscv/pixblockdsp_rvv.o
+OBJS-$(CONFIG_RV34DSP) += riscv/rv34dsp_init.o
+RVV-OBJS-$(CONFIG_RV34DSP) += riscv/rv34dsp_rvv.o
 OBJS-$(CONFIG_SVQ1_ENCODER) += riscv/svqenc_init.o
 RVV-OBJS-$(CONFIG_SVQ1_ENCODER) += riscv/svqenc_rvv.o
 OBJS-$(CONFIG_TAK_DECODER) += riscv/takdsp_init.o
diff --git a/libavcodec/riscv/rv34dsp_init.c b/libavcodec/riscv/rv34dsp_init.c
new file mode 100644
index 0000000000..852c8ad9a8
--- /dev/null
+++ b/libavcodec/riscv/rv34dsp_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/rv34dsp.h"
+
+void ff_rv34_inv_transform_dc_rvv(int16_t *block);
+
+av_cold void ff_rv34dsp_init_riscv(RV34DSPContext *c)
+{
+#if HAVE_RVV
+    int flags = av_get_cpu_flags();
+
+    if (flags & AV_CPU_FLAG_RVV_I32 && ff_get_rv_vlenb() >= 16) {
+        c->rv34_inv_transform_dc = ff_rv34_inv_transform_dc_rvv;
+    }
+#endif
+}
diff --git a/libavcodec/riscv/rv34dsp_rvv.S b/libavcodec/riscv/rv34dsp_rvv.S
new file mode 100644
index 0000000000..21c203c0c4
--- /dev/null
+++ b/libavcodec/riscv/rv34dsp_rvv.S
@@ -0,0 +1,33 @@
+/*
+ * 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"
+
+func ff_rv34_inv_transform_dc_rvv, zve32x
+        lh            t1, 0(a0)
+        li            t0, 13 * 13 * 3
+        mul           t2, t0, t1
+        srai          t2, t2, 11
+        vsetivli      zero, 16, e16, m2, ta, ma
+        vmv.v.x       v8, t2
+        vse16.v       v8, (a0)
+
+        ret
+endfunc
diff --git a/libavcodec/rv34dsp.c b/libavcodec/rv34dsp.c
index 8f9d88396c..44486f8edd 100644
--- a/libavcodec/rv34dsp.c
+++ b/libavcodec/rv34dsp.c
@@ -138,6 +138,8 @@ av_cold void ff_rv34dsp_init(RV34DSPContext *c)
 
 #if ARCH_ARM
     ff_rv34dsp_init_arm(c);
+#elif ARCH_RISCV
+    ff_rv34dsp_init_riscv(c);
 #elif ARCH_X86
     ff_rv34dsp_init_x86(c);
 #endif
diff --git a/libavcodec/rv34dsp.h b/libavcodec/rv34dsp.h
index 2e9ec4eee4..b15424d4ae 100644
--- a/libavcodec/rv34dsp.h
+++ b/libavcodec/rv34dsp.h
@@ -79,6 +79,7 @@ void ff_rv34dsp_init(RV34DSPContext *c);
 void ff_rv40dsp_init(RV34DSPContext *c);
 
 void ff_rv34dsp_init_arm(RV34DSPContext *c);
+void ff_rv34dsp_init_riscv(RV34DSPContext *c);
 void ff_rv34dsp_init_x86(RV34DSPContext *c);
 
 void ff_rv40dsp_init_aarch64(RV34DSPContext *c);
-- 
2.43.0


[-- Attachment #3: Type: text/plain, Size: 251 bytes --]

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc
  2024-02-10  1:57           ` flow gg
@ 2024-02-10  9:18             ` Rémi Denis-Courmont
  2024-02-10 15:29               ` flow gg
  0 siblings, 1 reply; 9+ messages in thread
From: Rémi Denis-Courmont @ 2024-02-10  9:18 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Happy new year,

The gains are -unsurprisingly- modest here. Did you try to reorder 
instructions to improve scheduling?

-- 
Rémi Denis-Courmont
http://www.remlab.net/



_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc
  2024-02-10  9:18             ` Rémi Denis-Courmont
@ 2024-02-10 15:29               ` flow gg
  0 siblings, 0 replies; 9+ messages in thread
From: flow gg @ 2024-02-10 15:29 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Happy new year ~

Yes, I've tried reordering.

Rémi Denis-Courmont <remi@remlab.net> 于2024年2月10日周六 17:18写道:

> Happy new year,
>
> The gains are -unsurprisingly- modest here. Did you try to reorder
> instructions to improve scheduling?
>
> --
> Rémi Denis-Courmont
> http://www.remlab.net/
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-02-10 15:29 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-31 12:00 [FFmpeg-devel] [PATCH 2/4] lavc/rv34dsp: R-V V rv34_inv_transform_dc flow gg
2024-01-31 16:31 ` Rémi Denis-Courmont
2024-01-31 17:57   ` flow gg
2024-02-06 17:26     ` Rémi Denis-Courmont
2024-02-07  0:12       ` flow gg
2024-02-09 21:13         ` Rémi Denis-Courmont
2024-02-10  1:57           ` flow gg
2024-02-10  9:18             ` Rémi Denis-Courmont
2024-02-10 15:29               ` flow gg

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git