* [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
* 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
* [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 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 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