[vlc-commits] [Git][videolan/vlc][master] contrib: soxr: fix usage of libavutil tx

Steve Lhomme (@robUx4) gitlab at videolan.org
Tue Nov 18 12:03:58 UTC 2025



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
188aa5dc by Steve Lhomme at 2025-11-18T11:33:42+00:00
contrib: soxr: fix usage of libavutil tx

It requires aligned buffers, so we use the libavutil allocators as the original code.

And the stride is always sizeof(float).

- - - - -


1 changed file:

- contrib/src/soxr/0001-use-libavutil-tx-code-instead-of-avfft-in-newer-FFmp.patch


Changes:

=====================================
contrib/src/soxr/0001-use-libavutil-tx-code-instead-of-avfft-in-newer-FFmp.patch
=====================================
@@ -1,19 +1,19 @@
-From d950ec16ad02c11b1fe41d9e873311a2b2b35d2f Mon Sep 17 00:00:00 2001
+From 2c850fdfdd5568ba6ed2e5a0578b6fa244b3c31e Mon Sep 17 00:00:00 2001
 From: Steve Lhomme <robux4 at ycbcr.xyz>
 Date: Fri, 7 Nov 2025 14:38:39 +0100
 Subject: [PATCH] use libavutil tx code instead of avfft in newer FFmpeg
 
 The code is using the replacement code from libavcodec 7.1 using the tx API.
 ---
- src/avfft32.c  | 112 +++++++++++++++++++++++++++++++++++++++++++++++++
- src/avfft32s.c | 112 +++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 224 insertions(+)
+ src/avfft32.c  | 109 +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/avfft32s.c | 109 +++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 218 insertions(+)
 
 diff --git a/src/avfft32.c b/src/avfft32.c
-index fe651f5..409b478 100644
+index fe651f5..04ab065 100644
 --- a/src/avfft32.c
 +++ b/src/avfft32.c
-@@ -3,13 +3,121 @@
+@@ -3,13 +3,118 @@
  
  #include <stdlib.h>
  #include <math.h>
@@ -21,14 +21,13 @@ index fe651f5..409b478 100644
 +#define USE_LAVUTIL_TX  (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57,19,100))
 +#if USE_LAVUTIL_TX
 +# include <libavutil/tx.h>
++# include <libavutil/mem.h>
 +# include <string.h>
-+# include <stdlib.h>
 +
 +typedef struct AVTXWrapper {
 +    AVTXContext *ctx;
 +    av_tx_fn fn;
 +
-+    ptrdiff_t stride;
 +    int len;
 +    int inv;
 +
@@ -43,28 +42,27 @@ index fe651f5..409b478 100644
 +#if USE_LAVUTIL_TX
 +static void * forward_setup(int len) {
 +    int ret;
-+    float scale = (0) ? 0.5f : 1.0f;
++    float scale = 0 ? 0.5f : 1.0f;
 +    AVTXWrapper *s;
 +
-+    s = malloc(sizeof(*s));
++    s = av_mallocz(sizeof(*s));
 +    if (!s)
 +        return NULL;
 +
-+    s->stride = (0) ? sizeof(AVComplexFloat) : sizeof(float);
 +    s->len = 1 << (int)(log(len)/log(2)+.5);
-+    s->inv = (0);
++    s->inv = 0;
 +
-+    ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_RDFT, (0),
++    ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_RDFT, 0,
 +                     s->len, &scale, 0x0);
 +    if (ret < 0) {
-+        free(s);
++        av_free(s);
 +        return NULL;
 +    }
 +
-+    s->tmp = malloc((s->len + 2)*sizeof(float));
++    s->tmp = av_malloc((s->len + 2)*sizeof(float));
 +    if (!s->tmp) {
 +        av_tx_uninit(&s->ctx);
-+        free(s);
++        av_free(s);
 +        return NULL;
 +    }
 +
@@ -72,28 +70,27 @@ index fe651f5..409b478 100644
 +}
 +static void * backward_setup(int len) {
 +    int ret;
-+    float scale = (1) ? 0.5f : 1.0f;
++    float scale = 1 ? 0.5f : 1.0f;
 +    AVTXWrapper *s;
 +
-+    s = malloc(sizeof(*s));
++    s = av_mallocz(sizeof(*s));
 +    if (!s)
 +        return NULL;
 +
-+    s->stride = (1) ? sizeof(AVComplexFloat) : sizeof(float);
 +    s->len = 1 << (int)(log(len)/log(2)+.5);
-+    s->inv = (1);
++    s->inv = 1;
 +
-+    ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_RDFT, (1),
++    ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_RDFT, 1,
 +                     s->len, &scale, 0x0);
 +    if (ret < 0) {
-+        free(s);
++        av_free(s);
 +        return NULL;
 +    }
 +
-+    s->tmp = malloc((s->len + 2)*sizeof(float));
++    s->tmp = av_malloc((s->len + 2)*sizeof(float));
 +    if (!s->tmp) {
 +        av_tx_uninit(&s->ctx);
-+        free(s);
++        av_free(s);
 +        return NULL;
 +    }
 +
@@ -111,7 +108,7 @@ index fe651f5..409b478 100644
 +        src[1] = 0.0f;
 +    }
 +
-+    w->fn(w->ctx, dst, (void *)src, w->stride);
++    w->fn(w->ctx, dst, (void *)src, sizeof(float));
 +
 +    if (!w->inv) {
 +        dst[1] = dst[w->len];
@@ -123,8 +120,8 @@ index fe651f5..409b478 100644
 +{
 +    if (s) {
 +        av_tx_uninit(&s->ctx);
-+        free(s->tmp);
-+        free(s);
++        av_free(s->tmp);
++        av_free(s);
 +    }
 +}
 +#else
@@ -135,7 +132,7 @@ index fe651f5..409b478 100644
  static int multiplier(void) {return 2;}
  static void nothing(void) {}
  static int flags(void) {return 0;}
-@@ -17,7 +125,11 @@ static int flags(void) {return 0;}
+@@ -17,7 +122,11 @@ static int flags(void) {return 0;}
  fn_t _soxr_rdft32_cb[] = {
    (fn_t)forward_setup,
    (fn_t)backward_setup,
@@ -148,10 +145,10 @@ index fe651f5..409b478 100644
    (fn_t)rdft,
    (fn_t)rdft,
 diff --git a/src/avfft32s.c b/src/avfft32s.c
-index 5a7e62d..9ffbe47 100644
+index 5a7e62d..b03f154 100644
 --- a/src/avfft32s.c
 +++ b/src/avfft32s.c
-@@ -2,13 +2,121 @@
+@@ -2,13 +2,118 @@
   * Licence for this file: LGPL v2.1                  See LICENCE for details. */
  
  #include <math.h>
@@ -159,14 +156,13 @@ index 5a7e62d..9ffbe47 100644
 +#define USE_LAVUTIL_TX  (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57,19,100))
 +#if USE_LAVUTIL_TX
 +# include <libavutil/tx.h>
++# include <libavutil/mem.h>
 +# include <string.h>
-+# include <stdlib.h>
 +
 +typedef struct AVTXWrapper {
 +    AVTXContext *ctx;
 +    av_tx_fn fn;
 +
-+    ptrdiff_t stride;
 +    int len;
 +    int inv;
 +
@@ -181,28 +177,27 @@ index 5a7e62d..9ffbe47 100644
 +#if USE_LAVUTIL_TX
 +static void * forward_setup(int len) {
 +    int ret;
-+    float scale = (0) ? 0.5f : 1.0f;
++    float scale = 0 ? 0.5f : 1.0f;
 +    AVTXWrapper *s;
 +
-+    s = malloc(sizeof(*s));
++    s = av_mallocz(sizeof(*s));
 +    if (!s)
 +        return NULL;
 +
-+    s->stride = (0) ? sizeof(AVComplexFloat) : sizeof(float);
 +    s->len = 1 << (int)(log(len)/log(2)+.5);
-+    s->inv = (0);
++    s->inv = 0;
 +
-+    ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_RDFT, (0),
++    ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_RDFT, 0,
 +                     s->len, &scale, 0x0);
 +    if (ret < 0) {
-+        free(s);
++        av_free(s);
 +        return NULL;
 +    }
 +
-+    s->tmp = malloc((s->len + 2)*sizeof(float));
++    s->tmp = av_malloc((s->len + 2)*sizeof(float));
 +    if (!s->tmp) {
 +        av_tx_uninit(&s->ctx);
-+        free(s);
++        av_free(s);
 +        return NULL;
 +    }
 +
@@ -210,28 +205,27 @@ index 5a7e62d..9ffbe47 100644
 +}
 +static void * backward_setup(int len) {
 +    int ret;
-+    float scale = (1) ? 0.5f : 1.0f;
++    float scale = 1 ? 0.5f : 1.0f;
 +    AVTXWrapper *s;
 +
-+    s = malloc(sizeof(*s));
++    s = av_mallocz(sizeof(*s));
 +    if (!s)
 +        return NULL;
 +
-+    s->stride = (1) ? sizeof(AVComplexFloat) : sizeof(float);
 +    s->len = 1 << (int)(log(len)/log(2)+.5);
-+    s->inv = (1);
++    s->inv = 1;
 +
-+    ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_RDFT, (1),
++    ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_RDFT, 1,
 +                     s->len, &scale, 0x0);
 +    if (ret < 0) {
-+        free(s);
++        av_free(s);
 +        return NULL;
 +    }
 +
-+    s->tmp = malloc((s->len + 2)*sizeof(float));
++    s->tmp = av_malloc((s->len + 2)*sizeof(float));
 +    if (!s->tmp) {
 +        av_tx_uninit(&s->ctx);
-+        free(s);
++        av_free(s);
 +        return NULL;
 +    }
 +
@@ -249,7 +243,7 @@ index 5a7e62d..9ffbe47 100644
 +        src[1] = 0.0f;
 +    }
 +
-+    w->fn(w->ctx, dst, (void *)src, w->stride);
++    w->fn(w->ctx, dst, (void *)src, sizeof(float));
 +
 +    if (!w->inv) {
 +        dst[1] = dst[w->len];
@@ -261,8 +255,8 @@ index 5a7e62d..9ffbe47 100644
 +{
 +    if (s) {
 +        av_tx_uninit(&s->ctx);
-+        free(s->tmp);
-+        free(s);
++        av_free(s->tmp);
++        av_free(s);
 +    }
 +}
 +#else
@@ -273,7 +267,7 @@ index 5a7e62d..9ffbe47 100644
  static int multiplier(void) {return 2;}
  static void nothing(void) {}
  static int flags(void) {return RDFT_IS_SIMD;}
-@@ -16,7 +124,11 @@ static int flags(void) {return RDFT_IS_SIMD;}
+@@ -16,7 +121,11 @@ static int flags(void) {return RDFT_IS_SIMD;}
  fn_t _soxr_rdft32s_cb[] = {
    (fn_t)forward_setup,
    (fn_t)backward_setup,



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/188aa5dc7d435fbbf5cdb6addae86afd99cc17d7

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/188aa5dc7d435fbbf5cdb6addae86afd99cc17d7
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list