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 1/4] lavu/float_dsp: add double-precision scalar product
@ 2024-05-29 14:59 Rémi Denis-Courmont
  2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 2/4] lavf: get rid of bespoke double scalar products Rémi Denis-Courmont
                   ` (3 more replies)
  0 siblings, 4 replies; 14+ messages in thread
From: Rémi Denis-Courmont @ 2024-05-29 14:59 UTC (permalink / raw)
  To: ffmpeg-devel

The function pointer is appended to the structure for backward binary
compatibility. Fortunately, this is allocated by libavutil, not by the
user, so increasing the structure size is safe.
---
 doc/APIchanges        |  3 +++
 libavutil/float_dsp.c | 12 ++++++++++++
 libavutil/float_dsp.h | 14 ++++++++++++++
 libavutil/version.h   |  2 +-
 4 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 60f056b863..50c51c664f 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,9 @@ The last version increases of all libraries were on 2024-03-07
 
 API changes, most recent first:
 
+2024-05-29 - xxxxxxxxxx - lavu 59.21.100 - float_dsp.h
+  Add AVFloatDSPContext.scalarproduct_double.
+
 2024-05-23 - xxxxxxxxxx - lavu 59.20.100 - channel_layout.h
   Add av_channel_layout_ambisonic_order().
 
diff --git a/libavutil/float_dsp.c b/libavutil/float_dsp.c
index e9fb023466..1c5bb05636 100644
--- a/libavutil/float_dsp.c
+++ b/libavutil/float_dsp.c
@@ -132,6 +132,17 @@ float avpriv_scalarproduct_float_c(const float *v1, const float *v2, int len)
     return p;
 }
 
+static double ff_scalarproduct_double_c(const double *v1, const double *v2,
+                                        size_t len)
+{
+    double p = 0.0;
+
+    for (size_t i = 0; i < len; i++)
+        p += v1[i] * v2[i];
+
+    return p;
+}
+
 av_cold AVFloatDSPContext *avpriv_float_dsp_alloc(int bit_exact)
 {
     AVFloatDSPContext *fdsp = av_mallocz(sizeof(AVFloatDSPContext));
@@ -149,6 +160,7 @@ av_cold AVFloatDSPContext *avpriv_float_dsp_alloc(int bit_exact)
     fdsp->vector_fmul_reverse = vector_fmul_reverse_c;
     fdsp->butterflies_float = butterflies_float_c;
     fdsp->scalarproduct_float = avpriv_scalarproduct_float_c;
+    fdsp->scalarproduct_double = ff_scalarproduct_double_c;
 
 #if ARCH_AARCH64
     ff_float_dsp_init_aarch64(fdsp);
diff --git a/libavutil/float_dsp.h b/libavutil/float_dsp.h
index 342a8715c5..b6b5b0a3b3 100644
--- a/libavutil/float_dsp.h
+++ b/libavutil/float_dsp.h
@@ -19,6 +19,8 @@
 #ifndef AVUTIL_FLOAT_DSP_H
 #define AVUTIL_FLOAT_DSP_H
 
+#include <stddef.h>
+
 typedef struct AVFloatDSPContext {
     /**
      * Calculate the entry wise product of two vectors of floats and store the result in
@@ -187,6 +189,18 @@ typedef struct AVFloatDSPContext {
      */
     void (*vector_dmul)(double *dst, const double *src0, const double *src1,
                         int len);
+
+    /**
+     * Calculate the scalar product of two vectors of doubles.
+     *
+     * @param v1  first vector
+     * @param v2  second vector
+     * @param len length of vectors
+     *
+     * @return inner product of the vectors
+     */
+    double (*scalarproduct_double)(const double *v1, const double *v2,
+                                   size_t len);
 } AVFloatDSPContext;
 
 /**
diff --git a/libavutil/version.h b/libavutil/version.h
index 9c7146c228..9d08d56884 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  59
-#define LIBAVUTIL_VERSION_MINOR  20
+#define LIBAVUTIL_VERSION_MINOR  21
 #define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
-- 
2.45.1

_______________________________________________
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] 14+ messages in thread

* [FFmpeg-devel] [PATCH 2/4] lavf: get rid of bespoke double scalar products
  2024-05-29 14:59 [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product Rémi Denis-Courmont
@ 2024-05-29 14:59 ` Rémi Denis-Courmont
  2024-05-29 15:46   ` Andreas Rheinhardt
  2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 3/4] checkasm/float_dsp: add double-precision scalar product Rémi Denis-Courmont
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 14+ messages in thread
From: Rémi Denis-Courmont @ 2024-05-29 14:59 UTC (permalink / raw)
  To: ffmpeg-devel

---
 libavfilter/aap_template.c   | 14 +-------------
 libavfilter/anlms_template.c | 16 ++--------------
 libavfilter/arls_template.c  | 14 +-------------
 3 files changed, 4 insertions(+), 40 deletions(-)

diff --git a/libavfilter/aap_template.c b/libavfilter/aap_template.c
index ea9c815a89..0e0580fb32 100644
--- a/libavfilter/aap_template.c
+++ b/libavfilter/aap_template.c
@@ -36,18 +36,6 @@
 #define fn2(a,b)   fn3(a,b)
 #define fn(a)      fn2(a, SAMPLE_FORMAT)
 
-#if DEPTH == 64
-static double scalarproduct_double(const double *v1, const double *v2, int len)
-{
-    double p = 0.0;
-
-    for (int i = 0; i < len; i++)
-        p += v1[i] * v2[i];
-
-    return p;
-}
-#endif
-
 static ftype fn(fir_sample)(AudioAPContext *s, ftype sample, ftype *delay,
                             ftype *coeffs, ftype *tmp, int *offset)
 {
@@ -60,7 +48,7 @@ static ftype fn(fir_sample)(AudioAPContext *s, ftype sample, ftype *delay,
 #if DEPTH == 32
     output = s->fdsp->scalarproduct_float(delay, tmp, s->kernel_size);
 #else
-    output = scalarproduct_double(delay, tmp, s->kernel_size);
+    output = s->fdsp->scalarproduct_double(delay, tmp, s->kernel_size);
 #endif
 
     if (--(*offset) < 0)
diff --git a/libavfilter/anlms_template.c b/libavfilter/anlms_template.c
index b25df4fa18..a8d1dbfe0f 100644
--- a/libavfilter/anlms_template.c
+++ b/libavfilter/anlms_template.c
@@ -33,18 +33,6 @@
 #define fn2(a,b)   fn3(a,b)
 #define fn(a)      fn2(a, SAMPLE_FORMAT)
 
-#if DEPTH == 64
-static double scalarproduct_double(const double *v1, const double *v2, int len)
-{
-    double p = 0.0;
-
-    for (int i = 0; i < len; i++)
-        p += v1[i] * v2[i];
-
-    return p;
-}
-#endif
-
 static ftype fn(fir_sample)(AudioNLMSContext *s, ftype sample, ftype *delay,
                             ftype *coeffs, ftype *tmp, int *offset)
 {
@@ -58,7 +46,7 @@ static ftype fn(fir_sample)(AudioNLMSContext *s, ftype sample, ftype *delay,
 #if DEPTH == 32
     output = s->fdsp->scalarproduct_float(delay, tmp, s->kernel_size);
 #else
-    output = scalarproduct_double(delay, tmp, s->kernel_size);
+    output = s->fdsp->scalarproduct_double(delay, tmp, s->kernel_size);
 #endif
 
     if (--(*offset) < 0)
@@ -85,7 +73,7 @@ static ftype fn(process_sample)(AudioNLMSContext *s, ftype input, ftype desired,
 #if DEPTH == 32
     sum = s->fdsp->scalarproduct_float(delay, delay, s->kernel_size);
 #else
-    sum = scalarproduct_double(delay, delay, s->kernel_size);
+    sum = s->fdsp->scalarproduct_double(delay, delay, s->kernel_size);
 #endif
     norm = s->eps + sum;
     b = mu * e / norm;
diff --git a/libavfilter/arls_template.c b/libavfilter/arls_template.c
index d8b19d89a5..c67b48cf6f 100644
--- a/libavfilter/arls_template.c
+++ b/libavfilter/arls_template.c
@@ -39,18 +39,6 @@
 #define fn2(a,b)   fn3(a,b)
 #define fn(a)      fn2(a, SAMPLE_FORMAT)
 
-#if DEPTH == 64
-static double scalarproduct_double(const double *v1, const double *v2, int len)
-{
-    double p = 0.0;
-
-    for (int i = 0; i < len; i++)
-        p += v1[i] * v2[i];
-
-    return p;
-}
-#endif
-
 static ftype fn(fir_sample)(AudioRLSContext *s, ftype sample, ftype *delay,
                             ftype *coeffs, ftype *tmp, int *offset)
 {
@@ -64,7 +52,7 @@ static ftype fn(fir_sample)(AudioRLSContext *s, ftype sample, ftype *delay,
 #if DEPTH == 32
     output = s->fdsp->scalarproduct_float(delay, tmp, s->kernel_size);
 #else
-    output = scalarproduct_double(delay, tmp, s->kernel_size);
+    output = s->fdsp->scalarproduct_double(delay, tmp, s->kernel_size);
 #endif
 
     if (--(*offset) < 0)
-- 
2.45.1

_______________________________________________
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] 14+ messages in thread

* [FFmpeg-devel] [PATCH 3/4] checkasm/float_dsp: add double-precision scalar product
  2024-05-29 14:59 [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product Rémi Denis-Courmont
  2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 2/4] lavf: get rid of bespoke double scalar products Rémi Denis-Courmont
@ 2024-05-29 14:59 ` Rémi Denis-Courmont
  2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 4/4] lavc/float_dsp: R-V V scalarproduct_double Rémi Denis-Courmont
  2024-05-29 15:44 ` [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product Andreas Rheinhardt
  3 siblings, 0 replies; 14+ messages in thread
From: Rémi Denis-Courmont @ 2024-05-29 14:59 UTC (permalink / raw)
  To: ffmpeg-devel

---
 tests/checkasm/float_dsp.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/tests/checkasm/float_dsp.c b/tests/checkasm/float_dsp.c
index cadfa65e2a..296db1cff9 100644
--- a/tests/checkasm/float_dsp.c
+++ b/tests/checkasm/float_dsp.c
@@ -278,6 +278,22 @@ static void test_scalarproduct_float(const float *src0, const float *src1)
     bench_new(src0, src1, LEN);
 }
 
+static void test_scalarproduct_double(const double *src0, const double *src1)
+{
+    double cprod, oprod;
+
+    declare_func_float(double, const double *, const double *, size_t);
+
+    cprod = call_ref(src0, src1, LEN);
+    oprod = call_new(src0, src1, LEN);
+    if (!double_near_abs_eps(cprod, oprod, ARBITRARY_SCALARPRODUCT_CONST)) {
+        fprintf(stderr, "%- .12f - %- .12f = % .12g\n",
+                cprod, oprod, cprod - oprod);
+        fail();
+    }
+    bench_new(src0, src1, LEN);
+}
+
 void checkasm_check_float_dsp(void)
 {
     LOCAL_ALIGNED_32(float,  src0,     [LEN]);
@@ -334,6 +350,9 @@ void checkasm_check_float_dsp(void)
     if (check_func(fdsp->scalarproduct_float, "scalarproduct_float"))
         test_scalarproduct_float(src3, src4);
     report("scalarproduct_float");
+    if (check_func(fdsp->scalarproduct_double, "scalarproduct_double"))
+        test_scalarproduct_double(dbl_src0, dbl_src1);
+    report("scalarproduct_double");
 
     av_freep(&fdsp);
 }
-- 
2.45.1

_______________________________________________
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] 14+ messages in thread

* [FFmpeg-devel] [PATCH 4/4] lavc/float_dsp: R-V V scalarproduct_double
  2024-05-29 14:59 [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product Rémi Denis-Courmont
  2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 2/4] lavf: get rid of bespoke double scalar products Rémi Denis-Courmont
  2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 3/4] checkasm/float_dsp: add double-precision scalar product Rémi Denis-Courmont
@ 2024-05-29 14:59 ` Rémi Denis-Courmont
  2024-05-29 15:42   ` Andreas Rheinhardt
  2024-05-29 15:44 ` [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product Andreas Rheinhardt
  3 siblings, 1 reply; 14+ messages in thread
From: Rémi Denis-Courmont @ 2024-05-29 14:59 UTC (permalink / raw)
  To: ffmpeg-devel

C908:
scalarproduct_double_c:       39.2
scalarproduct_double_rvv_f64: 10.5

X60:
scalarproduct_double_c:       35.0
scalarproduct_double_rvv_f64:  5.2
---
 libavutil/riscv/float_dsp_init.c |  3 +++
 libavutil/riscv/float_dsp_rvv.S  | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/libavutil/riscv/float_dsp_init.c b/libavutil/riscv/float_dsp_init.c
index 585f237225..155496fa6b 100644
--- a/libavutil/riscv/float_dsp_init.c
+++ b/libavutil/riscv/float_dsp_init.c
@@ -46,6 +46,8 @@ void ff_vector_dmac_scalar_rvv(double *dst, const double *src, double mul,
                                 int len);
 void ff_vector_dmul_scalar_rvv(double *dst, const double *src, double mul,
                                 int len);
+double ff_scalarproduct_double_rvv(const double *v1, const double *v2,
+                                   size_t len);
 
 av_cold void ff_float_dsp_init_riscv(AVFloatDSPContext *fdsp)
 {
@@ -68,6 +70,7 @@ av_cold void ff_float_dsp_init_riscv(AVFloatDSPContext *fdsp)
             fdsp->vector_dmul = ff_vector_dmul_rvv;
             fdsp->vector_dmac_scalar = ff_vector_dmac_scalar_rvv;
             fdsp->vector_dmul_scalar = ff_vector_dmul_scalar_rvv;
+            fdsp->scalarproduct_double = ff_scalarproduct_double_rvv;
         }
     }
 #endif
diff --git a/libavutil/riscv/float_dsp_rvv.S b/libavutil/riscv/float_dsp_rvv.S
index 7cfc890bc2..4379534af7 100644
--- a/libavutil/riscv/float_dsp_rvv.S
+++ b/libavutil/riscv/float_dsp_rvv.S
@@ -237,3 +237,24 @@ NOHWD   mv       a2, a3
 
         ret
 endfunc
+
+func ff_scalarproduct_double_rvv, zve64f
+        vsetvli      t0, zero, e64, m8, ta, ma
+        vmv.v.x      v8, zero
+        vmv.s.x      v0, zero
+1:
+        vsetvli      t0, a2, e64, m8, tu, ma
+        vle64.v      v16, (a0)
+        sub          a2, a2, t0
+        vle64.v      v24, (a1)
+        sh3add       a0, t0, a0
+        vfmacc.vv    v8, v16, v24
+        sh3add       a1, t0, a1
+        bnez         a2, 1b
+
+        vsetvli      t0, zero, e64, m8, ta, ma
+        vfredusum.vs v0, v8, v0
+        vfmv.f.s     fa0, v0
+NOHWD   fmv.x.w      a0, fa0
+        ret
+endfunc
-- 
2.45.1

_______________________________________________
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] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 4/4] lavc/float_dsp: R-V V scalarproduct_double
  2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 4/4] lavc/float_dsp: R-V V scalarproduct_double Rémi Denis-Courmont
@ 2024-05-29 15:42   ` Andreas Rheinhardt
  0 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2024-05-29 15:42 UTC (permalink / raw)
  To: ffmpeg-devel

Rémi Denis-Courmont:
> C908:
> scalarproduct_double_c:       39.2
> scalarproduct_double_rvv_f64: 10.5
> 
> X60:
> scalarproduct_double_c:       35.0
> scalarproduct_double_rvv_f64:  5.2
> ---
>  libavutil/riscv/float_dsp_init.c |  3 +++
>  libavutil/riscv/float_dsp_rvv.S  | 21 +++++++++++++++++++++
>  2 files changed, 24 insertions(+)
> 
> diff --git a/libavutil/riscv/float_dsp_init.c b/libavutil/riscv/float_dsp_init.c
> index 585f237225..155496fa6b 100644
> --- a/libavutil/riscv/float_dsp_init.c
> +++ b/libavutil/riscv/float_dsp_init.c
> @@ -46,6 +46,8 @@ void ff_vector_dmac_scalar_rvv(double *dst, const double *src, double mul,
>                                  int len);
>  void ff_vector_dmul_scalar_rvv(double *dst, const double *src, double mul,
>                                  int len);
> +double ff_scalarproduct_double_rvv(const double *v1, const double *v2,
> +                                   size_t len);
>  
>  av_cold void ff_float_dsp_init_riscv(AVFloatDSPContext *fdsp)
>  {
> @@ -68,6 +70,7 @@ av_cold void ff_float_dsp_init_riscv(AVFloatDSPContext *fdsp)
>              fdsp->vector_dmul = ff_vector_dmul_rvv;
>              fdsp->vector_dmac_scalar = ff_vector_dmac_scalar_rvv;
>              fdsp->vector_dmul_scalar = ff_vector_dmul_scalar_rvv;
> +            fdsp->scalarproduct_double = ff_scalarproduct_double_rvv;
>          }
>      }
>  #endif
> diff --git a/libavutil/riscv/float_dsp_rvv.S b/libavutil/riscv/float_dsp_rvv.S
> index 7cfc890bc2..4379534af7 100644
> --- a/libavutil/riscv/float_dsp_rvv.S
> +++ b/libavutil/riscv/float_dsp_rvv.S
> @@ -237,3 +237,24 @@ NOHWD   mv       a2, a3
>  
>          ret
>  endfunc
> +
> +func ff_scalarproduct_double_rvv, zve64f
> +        vsetvli      t0, zero, e64, m8, ta, ma
> +        vmv.v.x      v8, zero
> +        vmv.s.x      v0, zero
> +1:
> +        vsetvli      t0, a2, e64, m8, tu, ma
> +        vle64.v      v16, (a0)
> +        sub          a2, a2, t0
> +        vle64.v      v24, (a1)
> +        sh3add       a0, t0, a0
> +        vfmacc.vv    v8, v16, v24
> +        sh3add       a1, t0, a1
> +        bnez         a2, 1b
> +
> +        vsetvli      t0, zero, e64, m8, ta, ma
> +        vfredusum.vs v0, v8, v0
> +        vfmv.f.s     fa0, v0
> +NOHWD   fmv.x.w      a0, fa0
> +        ret
> +endfunc

s/lavc/lavu/
_______________________________________________
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] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product
  2024-05-29 14:59 [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product Rémi Denis-Courmont
                   ` (2 preceding siblings ...)
  2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 4/4] lavc/float_dsp: R-V V scalarproduct_double Rémi Denis-Courmont
@ 2024-05-29 15:44 ` Andreas Rheinhardt
  2024-05-29 15:51   ` Rémi Denis-Courmont
  3 siblings, 1 reply; 14+ messages in thread
From: Andreas Rheinhardt @ 2024-05-29 15:44 UTC (permalink / raw)
  To: ffmpeg-devel

Rémi Denis-Courmont:
> The function pointer is appended to the structure for backward binary
> compatibility. Fortunately, this is allocated by libavutil, not by the
> user, so increasing the structure size is safe.
> ---
>  doc/APIchanges        |  3 +++
>  libavutil/float_dsp.c | 12 ++++++++++++
>  libavutil/float_dsp.h | 14 ++++++++++++++
>  libavutil/version.h   |  2 +-
>  4 files changed, 30 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 60f056b863..50c51c664f 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2024-03-07
>  
>  API changes, most recent first:
>  
> +2024-05-29 - xxxxxxxxxx - lavu 59.21.100 - float_dsp.h
> +  Add AVFloatDSPContext.scalarproduct_double.

float_dsp.h is not a public header (the allocator is avpriv:
avpriv_float_dsp_alloc), so there must not be an APIchanges entry for this.

> +
>  2024-05-23 - xxxxxxxxxx - lavu 59.20.100 - channel_layout.h
>    Add av_channel_layout_ambisonic_order().
>  
> diff --git a/libavutil/float_dsp.c b/libavutil/float_dsp.c
> index e9fb023466..1c5bb05636 100644
> --- a/libavutil/float_dsp.c
> +++ b/libavutil/float_dsp.c
> @@ -132,6 +132,17 @@ float avpriv_scalarproduct_float_c(const float *v1, const float *v2, int len)
>      return p;
>  }
>  
> +static double ff_scalarproduct_double_c(const double *v1, const double *v2,

Don't use an ff_ prefix for a static function.

> +                                        size_t len)
> +{
> +    double p = 0.0;
> +
> +    for (size_t i = 0; i < len; i++)
> +        p += v1[i] * v2[i];
> +
> +    return p;
> +}
> +
>  av_cold AVFloatDSPContext *avpriv_float_dsp_alloc(int bit_exact)
>  {
>      AVFloatDSPContext *fdsp = av_mallocz(sizeof(AVFloatDSPContext));
> @@ -149,6 +160,7 @@ av_cold AVFloatDSPContext *avpriv_float_dsp_alloc(int bit_exact)
>      fdsp->vector_fmul_reverse = vector_fmul_reverse_c;
>      fdsp->butterflies_float = butterflies_float_c;
>      fdsp->scalarproduct_float = avpriv_scalarproduct_float_c;
> +    fdsp->scalarproduct_double = ff_scalarproduct_double_c;
>  
>  #if ARCH_AARCH64
>      ff_float_dsp_init_aarch64(fdsp);
> diff --git a/libavutil/float_dsp.h b/libavutil/float_dsp.h
> index 342a8715c5..b6b5b0a3b3 100644
> --- a/libavutil/float_dsp.h
> +++ b/libavutil/float_dsp.h
> @@ -19,6 +19,8 @@
>  #ifndef AVUTIL_FLOAT_DSP_H
>  #define AVUTIL_FLOAT_DSP_H
>  
> +#include <stddef.h>
> +
>  typedef struct AVFloatDSPContext {
>      /**
>       * Calculate the entry wise product of two vectors of floats and store the result in
> @@ -187,6 +189,18 @@ typedef struct AVFloatDSPContext {
>       */
>      void (*vector_dmul)(double *dst, const double *src0, const double *src1,
>                          int len);
> +
> +    /**
> +     * Calculate the scalar product of two vectors of doubles.
> +     *
> +     * @param v1  first vector
> +     * @param v2  second vector

Are these supposed to obey additional alignment beyond that imposed by
double? (Does your RISC-V implementation require it?)

> +     * @param len length of vectors
> +     *
> +     * @return inner product of the vectors
> +     */
> +    double (*scalarproduct_double)(const double *v1, const double *v2,
> +                                   size_t len);
>  } AVFloatDSPContext;
>  
>  /**
> diff --git a/libavutil/version.h b/libavutil/version.h
> index 9c7146c228..9d08d56884 100644
> --- a/libavutil/version.h
> +++ b/libavutil/version.h
> @@ -79,7 +79,7 @@
>   */
>  
>  #define LIBAVUTIL_VERSION_MAJOR  59
> -#define LIBAVUTIL_VERSION_MINOR  20
> +#define LIBAVUTIL_VERSION_MINOR  21
>  #define LIBAVUTIL_VERSION_MICRO 100
>  
>  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \

_______________________________________________
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] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/4] lavf: get rid of bespoke double scalar products
  2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 2/4] lavf: get rid of bespoke double scalar products Rémi Denis-Courmont
@ 2024-05-29 15:46   ` Andreas Rheinhardt
  2024-05-29 15:52     ` Rémi Denis-Courmont
  0 siblings, 1 reply; 14+ messages in thread
From: Andreas Rheinhardt @ 2024-05-29 15:46 UTC (permalink / raw)
  To: ffmpeg-devel

Rémi Denis-Courmont:
> ---
>  libavfilter/aap_template.c   | 14 +-------------
>  libavfilter/anlms_template.c | 16 ++--------------
>  libavfilter/arls_template.c  | 14 +-------------
>  3 files changed, 4 insertions(+), 40 deletions(-)
> 
> diff --git a/libavfilter/aap_template.c b/libavfilter/aap_template.c
> index ea9c815a89..0e0580fb32 100644
> --- a/libavfilter/aap_template.c
> +++ b/libavfilter/aap_template.c
> @@ -36,18 +36,6 @@
>  #define fn2(a,b)   fn3(a,b)
>  #define fn(a)      fn2(a, SAMPLE_FORMAT)
>  
> -#if DEPTH == 64
> -static double scalarproduct_double(const double *v1, const double *v2, int len)
> -{
> -    double p = 0.0;
> -
> -    for (int i = 0; i < len; i++)
> -        p += v1[i] * v2[i];
> -
> -    return p;
> -}
> -#endif
> -
>  static ftype fn(fir_sample)(AudioAPContext *s, ftype sample, ftype *delay,
>                              ftype *coeffs, ftype *tmp, int *offset)
>  {
> @@ -60,7 +48,7 @@ static ftype fn(fir_sample)(AudioAPContext *s, ftype sample, ftype *delay,
>  #if DEPTH == 32
>      output = s->fdsp->scalarproduct_float(delay, tmp, s->kernel_size);
>  #else
> -    output = scalarproduct_double(delay, tmp, s->kernel_size);
> +    output = s->fdsp->scalarproduct_double(delay, tmp, s->kernel_size);
>  #endif
>  
>      if (--(*offset) < 0)
> diff --git a/libavfilter/anlms_template.c b/libavfilter/anlms_template.c
> index b25df4fa18..a8d1dbfe0f 100644
> --- a/libavfilter/anlms_template.c
> +++ b/libavfilter/anlms_template.c
> @@ -33,18 +33,6 @@
>  #define fn2(a,b)   fn3(a,b)
>  #define fn(a)      fn2(a, SAMPLE_FORMAT)
>  
> -#if DEPTH == 64
> -static double scalarproduct_double(const double *v1, const double *v2, int len)
> -{
> -    double p = 0.0;
> -
> -    for (int i = 0; i < len; i++)
> -        p += v1[i] * v2[i];
> -
> -    return p;
> -}
> -#endif
> -
>  static ftype fn(fir_sample)(AudioNLMSContext *s, ftype sample, ftype *delay,
>                              ftype *coeffs, ftype *tmp, int *offset)
>  {
> @@ -58,7 +46,7 @@ static ftype fn(fir_sample)(AudioNLMSContext *s, ftype sample, ftype *delay,
>  #if DEPTH == 32
>      output = s->fdsp->scalarproduct_float(delay, tmp, s->kernel_size);
>  #else
> -    output = scalarproduct_double(delay, tmp, s->kernel_size);
> +    output = s->fdsp->scalarproduct_double(delay, tmp, s->kernel_size);
>  #endif
>  
>      if (--(*offset) < 0)
> @@ -85,7 +73,7 @@ static ftype fn(process_sample)(AudioNLMSContext *s, ftype input, ftype desired,
>  #if DEPTH == 32
>      sum = s->fdsp->scalarproduct_float(delay, delay, s->kernel_size);
>  #else
> -    sum = scalarproduct_double(delay, delay, s->kernel_size);
> +    sum = s->fdsp->scalarproduct_double(delay, delay, s->kernel_size);
>  #endif
>      norm = s->eps + sum;
>      b = mu * e / norm;
> diff --git a/libavfilter/arls_template.c b/libavfilter/arls_template.c
> index d8b19d89a5..c67b48cf6f 100644
> --- a/libavfilter/arls_template.c
> +++ b/libavfilter/arls_template.c
> @@ -39,18 +39,6 @@
>  #define fn2(a,b)   fn3(a,b)
>  #define fn(a)      fn2(a, SAMPLE_FORMAT)
>  
> -#if DEPTH == 64
> -static double scalarproduct_double(const double *v1, const double *v2, int len)
> -{
> -    double p = 0.0;
> -
> -    for (int i = 0; i < len; i++)
> -        p += v1[i] * v2[i];
> -
> -    return p;
> -}
> -#endif
> -
>  static ftype fn(fir_sample)(AudioRLSContext *s, ftype sample, ftype *delay,
>                              ftype *coeffs, ftype *tmp, int *offset)
>  {
> @@ -64,7 +52,7 @@ static ftype fn(fir_sample)(AudioRLSContext *s, ftype sample, ftype *delay,
>  #if DEPTH == 32
>      output = s->fdsp->scalarproduct_float(delay, tmp, s->kernel_size);
>  #else
> -    output = scalarproduct_double(delay, tmp, s->kernel_size);
> +    output = s->fdsp->scalarproduct_double(delay, tmp, s->kernel_size);
>  #endif
>  
>      if (--(*offset) < 0)

1. lavf is libavformat; libavfilter is lavfi.
2. Do you intend to use this outside of lavfi?

- Andreas

_______________________________________________
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] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product
  2024-05-29 15:44 ` [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product Andreas Rheinhardt
@ 2024-05-29 15:51   ` Rémi Denis-Courmont
  2024-05-29 16:04     ` James Almer
  2024-06-02 10:04     ` Alexander Strasser via ffmpeg-devel
  0 siblings, 2 replies; 14+ messages in thread
From: Rémi Denis-Courmont @ 2024-05-29 15:51 UTC (permalink / raw)
  To: ffmpeg-devel

Le keskiviikkona 29. toukokuuta 2024, 18.44.13 EEST Andreas Rheinhardt a écrit 
:
> > +static double ff_scalarproduct_double_c(const double *v1,

> Don't use an ff_ prefix for a static function.

I can see over 300 such identifiers in the code base (many but not all inline), 
and I don't see why that would be a problem.

> > +
> > +    /**
> > +     * Calculate the scalar product of two vectors of doubles.
> > +     *
> > +     * @param v1  first vector
> > +     * @param v2  second vector
> 
> Are these supposed to obey additional alignment beyond that imposed by
> double?

The C and RISC-V implementations require the natural alignment of double, 64-
bit. If somebody wants to increase the required alignment(s), they are free to 
audit the call sites and update the comments accordingly, since this won't be 
an ABI break.

> (Does your RISC-V implementation require it?)

-- 
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] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/4] lavf: get rid of bespoke double scalar products
  2024-05-29 15:46   ` Andreas Rheinhardt
@ 2024-05-29 15:52     ` Rémi Denis-Courmont
  0 siblings, 0 replies; 14+ messages in thread
From: Rémi Denis-Courmont @ 2024-05-29 15:52 UTC (permalink / raw)
  To: ffmpeg-devel

Le keskiviikkona 29. toukokuuta 2024, 18.46.05 EEST Andreas Rheinhardt a écrit 
:
> 2. Do you intend to use this outside of lavfi?

Yes.


-- 
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] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product
  2024-05-29 15:51   ` Rémi Denis-Courmont
@ 2024-05-29 16:04     ` James Almer
  2024-06-02 10:04     ` Alexander Strasser via ffmpeg-devel
  1 sibling, 0 replies; 14+ messages in thread
From: James Almer @ 2024-05-29 16:04 UTC (permalink / raw)
  To: ffmpeg-devel

On 5/29/2024 12:51 PM, Rémi Denis-Courmont wrote:
> Le keskiviikkona 29. toukokuuta 2024, 18.44.13 EEST Andreas Rheinhardt a écrit
> :
>>> +static double ff_scalarproduct_double_c(const double *v1,
> 
>> Don't use an ff_ prefix for a static function.
> 
> I can see over 300 such identifiers in the code base (many but not all inline),
> and I don't see why that would be a problem.
> 
>>> +
>>> +    /**
>>> +     * Calculate the scalar product of two vectors of doubles.
>>> +     *
>>> +     * @param v1  first vector
>>> +     * @param v2  second vector
>>
>> Are these supposed to obey additional alignment beyond that imposed by
>> double?
> 
> The C and RISC-V implementations require the natural alignment of double, 64-
> bit. If somebody wants to increase the required alignment(s), they are free to
> audit the call sites and update the comments accordingly, since this won't be
> an ABI break.

Current users seem to all pass AVFrame audio buffers, so 32 byte 
alignment should be fine. And length should be a multiple of 16. So 
basically, same as all other double dsp functions in floatdsp.
_______________________________________________
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] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product
  2024-05-29 15:51   ` Rémi Denis-Courmont
  2024-05-29 16:04     ` James Almer
@ 2024-06-02 10:04     ` Alexander Strasser via ffmpeg-devel
  2024-06-02 10:30       ` Rémi Denis-Courmont
  1 sibling, 1 reply; 14+ messages in thread
From: Alexander Strasser via ffmpeg-devel @ 2024-06-02 10:04 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Alexander Strasser

On 2024-05-29 18:51 +0300, Rémi Denis-Courmont wrote:
> Le keskiviikkona 29. toukokuuta 2024, 18.44.13 EEST Andreas Rheinhardt a écrit
> :
> > > +static double ff_scalarproduct_double_c(const double *v1,
>
> > Don't use an ff_ prefix for a static function.
>
> I can see over 300 such identifiers in the code base (many but not all inline),
> and I don't see why that would be a problem.

I agree that it's not a problem regarding on the functional side,
OTOH regarding coding conventions we try to consistently follow it's
misleading as the ff_ prefix indicates a bigger scope of sharing.

Maybe I'm missing something, but it looks to me that more than half of
those over 300 instances are correct (the inline ones in the headers).

I think Andreas remark is correct and it would be better to not use ff_
prefix wrongly when adding new code.


Best regards,
  Alexander

[...]
_______________________________________________
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] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product
  2024-06-02 10:04     ` Alexander Strasser via ffmpeg-devel
@ 2024-06-02 10:30       ` Rémi Denis-Courmont
  2024-06-02 10:34         ` Rémi Denis-Courmont
  2024-06-02 10:43         ` Alexander Strasser via ffmpeg-devel
  0 siblings, 2 replies; 14+ messages in thread
From: Rémi Denis-Courmont @ 2024-06-02 10:30 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Le sunnuntaina 2. kesäkuuta 2024, 13.04.05 EEST Alexander Strasser via ffmpeg-
devel a écrit :
> On 2024-05-29 18:51 +0300, Rémi Denis-Courmont wrote:
> > Le keskiviikkona 29. toukokuuta 2024, 18.44.13 EEST Andreas Rheinhardt a
> > écrit> 
> > > > +static double ff_scalarproduct_double_c(const double *v1,
> > > 
> > > Don't use an ff_ prefix for a static function.
> > 
> > I can see over 300 such identifiers in the code base (many but not all
> > inline), and I don't see why that would be a problem.
> 
> I agree that it's not a problem regarding on the functional side,
> OTOH regarding coding conventions we try to consistently follow it's
> misleading as the ff_ prefix indicates a bigger scope of sharing.

Anybody can see the 'static' qualifier literally in front to see the function 
is not in a bigger scope of sharing. And if you do somehow miss and try to use 
the function, you will get a linker error.

The only case where this *actually* matters is in debugging. And exactly then 
it is much better to use the ff_ prefix *because* all symbols, including local 
ones like this, end up sharing the namespace.

> I think Andreas remark is correct and it would be better to not use ff_
> prefix wrongly when adding new code.

IMO, it is worse.

-- 
雷米‧德尼-库尔蒙
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] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product
  2024-06-02 10:30       ` Rémi Denis-Courmont
@ 2024-06-02 10:34         ` Rémi Denis-Courmont
  2024-06-02 10:43         ` Alexander Strasser via ffmpeg-devel
  1 sibling, 0 replies; 14+ messages in thread
From: Rémi Denis-Courmont @ 2024-06-02 10:34 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Le sunnuntaina 2. kesäkuuta 2024, 13.30.50 EEST Rémi Denis-Courmont a écrit :
> > I think Andreas remark is correct and it would be better to not use ff_
> > prefix wrongly when adding new code.
> 
> IMO, it is worse.

P.S.: It is a moot point because a *different* version of the patch was merged.

-- 
レミ・デニ-クールモン
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] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product
  2024-06-02 10:30       ` Rémi Denis-Courmont
  2024-06-02 10:34         ` Rémi Denis-Courmont
@ 2024-06-02 10:43         ` Alexander Strasser via ffmpeg-devel
  1 sibling, 0 replies; 14+ messages in thread
From: Alexander Strasser via ffmpeg-devel @ 2024-06-02 10:43 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Alexander Strasser

On 2024-06-02 13:30 +0300, Rémi Denis-Courmont wrote:
> Le sunnuntaina 2. kesäkuuta 2024, 13.04.05 EEST Alexander Strasser via ffmpeg-
> devel a écrit :
> > On 2024-05-29 18:51 +0300, Rémi Denis-Courmont wrote:
> > > Le keskiviikkona 29. toukokuuta 2024, 18.44.13 EEST Andreas Rheinhardt a
> > > écrit>
> > > > > +static double ff_scalarproduct_double_c(const double *v1,
> > > >
> > > > Don't use an ff_ prefix for a static function.
> > >
> > > I can see over 300 such identifiers in the code base (many but not all
> > > inline), and I don't see why that would be a problem.
> >
> > I agree that it's not a problem regarding on the functional side,
> > OTOH regarding coding conventions we try to consistently follow it's
> > misleading as the ff_ prefix indicates a bigger scope of sharing.
>
> Anybody can see the 'static' qualifier literally in front to see the function
> is not in a bigger scope of sharing. And if you do somehow miss and try to use
> the function, you will get a linker error.
>
> The only case where this *actually* matters is in debugging. And exactly then
> it is much better to use the ff_ prefix *because* all symbols, including local
> ones like this, end up sharing the namespace.

But not at the call site?


> > I think Andreas remark is correct and it would be better to not use ff_
> > prefix wrongly when adding new code.
>
> IMO, it is worse.

I tend to disagree here as it makes the meaning of the ff_ prefix arbitrary.

Anyway if you want to challenge this convention we are using since many years
in this code base, I suggest to do it in a separate discussion thread.


  Alexander
_______________________________________________
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] 14+ messages in thread

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

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-29 14:59 [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product Rémi Denis-Courmont
2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 2/4] lavf: get rid of bespoke double scalar products Rémi Denis-Courmont
2024-05-29 15:46   ` Andreas Rheinhardt
2024-05-29 15:52     ` Rémi Denis-Courmont
2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 3/4] checkasm/float_dsp: add double-precision scalar product Rémi Denis-Courmont
2024-05-29 14:59 ` [FFmpeg-devel] [PATCH 4/4] lavc/float_dsp: R-V V scalarproduct_double Rémi Denis-Courmont
2024-05-29 15:42   ` Andreas Rheinhardt
2024-05-29 15:44 ` [FFmpeg-devel] [PATCH 1/4] lavu/float_dsp: add double-precision scalar product Andreas Rheinhardt
2024-05-29 15:51   ` Rémi Denis-Courmont
2024-05-29 16:04     ` James Almer
2024-06-02 10:04     ` Alexander Strasser via ffmpeg-devel
2024-06-02 10:30       ` Rémi Denis-Courmont
2024-06-02 10:34         ` Rémi Denis-Courmont
2024-06-02 10:43         ` Alexander Strasser via ffmpeg-devel

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