PR #21068 opened by Marton Balint (cus)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21068
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21068.patch

Fix a crash with custom layouts, add a new layout_mode option to add more 
control for output layout handling and channel reorder.


>From 85dbeaa31572c9be5e9b89457b05bfedd0a73e07 Mon Sep 17 00:00:00 2001
From: Marton Balint <[email protected]>
Date: Thu, 27 Nov 2025 23:57:20 +0100
Subject: [PATCH 1/5] avfilter/af_amerge: fix possible crash with custom
 layouts

The check if a native layout can be created from the sources was incomplete and
casued a crash with custom layouts if the layout contained a native channel
multiple times, as in this example command line:

ffmpeg -lavfi "sine[a0];sine,pan=FL+FL[a1];[a0][a1]amerge[aout]" -map "[aout]" 
-t 1 -f framecrc -

Signed-off-by: Marton Balint <[email protected]>
---
 libavfilter/af_amerge.c | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/libavfilter/af_amerge.c b/libavfilter/af_amerge.c
index bb82128a84..41137d4b8b 100644
--- a/libavfilter/af_amerge.c
+++ b/libavfilter/af_amerge.c
@@ -77,7 +77,7 @@ static int query_formats(AVFilterContext *ctx)
     AVChannelLayout *inlayout[SWR_CH_MAX] = { NULL }, outlayout = { 0 };
     uint64_t outmask = 0;
     AVFilterChannelLayouts *layouts;
-    int i, ret, overlap = 0, nb_ch = 0;
+    int i, ret, nb_ch = 0;
 
     for (i = 0; i < s->nb_inputs; i++) {
         if (!ctx->inputs[i]->incfg.channel_layouts ||
@@ -92,15 +92,11 @@ static int query_formats(AVFilterContext *ctx)
             av_channel_layout_describe(inlayout[i], buf, sizeof(buf));
             av_log(ctx, AV_LOG_INFO, "Using \"%s\" for input %d\n", buf, i + 
1);
         }
-        s->in[i].nb_ch = FF_LAYOUT2COUNT(inlayout[i]);
-        if (s->in[i].nb_ch) {
-            overlap++;
-        } else {
-            s->in[i].nb_ch = inlayout[i]->nb_channels;
-            if (av_channel_layout_subset(inlayout[i], outmask))
-                overlap++;
-            outmask |= inlayout[i]->order == AV_CHANNEL_ORDER_NATIVE ?
-                       inlayout[i]->u.mask : 0;
+        s->in[i].nb_ch = inlayout[i]->nb_channels;
+        for (int j = 0; j < s->in[i].nb_ch; j++) {
+            enum AVChannel id = 
av_channel_layout_channel_from_index(inlayout[i], j);
+            if (id >= 0 && id < 64)
+                outmask |= (1ULL << id);
         }
         nb_ch += s->in[i].nb_ch;
     }
@@ -108,7 +104,7 @@ static int query_formats(AVFilterContext *ctx)
         av_log(ctx, AV_LOG_ERROR, "Too many channels (max %d)\n", SWR_CH_MAX);
         return AVERROR(EINVAL);
     }
-    if (overlap) {
+    if (av_popcount64(outmask) != nb_ch) {
         av_log(ctx, AV_LOG_WARNING,
                "Input channel layouts overlap: "
                "output layout will be determined by the number of distinct 
input channels\n");
-- 
2.49.1


>From a4ade2d9ddd16187b4a62f40fe8ce30fe8392dcf Mon Sep 17 00:00:00 2001
From: Marton Balint <[email protected]>
Date: Fri, 28 Nov 2025 21:01:28 +0100
Subject: [PATCH 2/5] avfilter/af_amerge: rework routing calculation

No change in functionality.

Signed-off-by: Marton Balint <[email protected]>
---
 libavfilter/af_amerge.c | 43 ++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 22 deletions(-)

diff --git a/libavfilter/af_amerge.c b/libavfilter/af_amerge.c
index 41137d4b8b..92afb4691f 100644
--- a/libavfilter/af_amerge.c
+++ b/libavfilter/af_amerge.c
@@ -63,6 +63,8 @@ static av_cold void uninit(AVFilterContext *ctx)
     av_freep(&s->in);
 }
 
+#define INLAYOUT(ctx, i) 
(&(ctx)->inputs[i]->incfg.channel_layouts->channel_layouts[0])
+
 static int query_formats(AVFilterContext *ctx)
 {
     static const enum AVSampleFormat packed_sample_fmts[] = {
@@ -74,10 +76,11 @@ static int query_formats(AVFilterContext *ctx)
         AV_SAMPLE_FMT_NONE
     };
     AMergeContext *s = ctx->priv;
-    AVChannelLayout *inlayout[SWR_CH_MAX] = { NULL }, outlayout = { 0 };
+    AVChannelLayout outlayout = { 0 };
     uint64_t outmask = 0;
     AVFilterChannelLayouts *layouts;
     int i, ret, nb_ch = 0;
+    int native_layout_routes[SWR_CH_MAX] = { 0 };
 
     for (i = 0; i < s->nb_inputs; i++) {
         if (!ctx->inputs[i]->incfg.channel_layouts ||
@@ -86,51 +89,47 @@ static int query_formats(AVFilterContext *ctx)
                    "No channel layout for input %d\n", i + 1);
             return AVERROR(EAGAIN);
         }
-        inlayout[i] = 
&ctx->inputs[i]->incfg.channel_layouts->channel_layouts[0];
         if (ctx->inputs[i]->incfg.channel_layouts->nb_channel_layouts > 1) {
             char buf[256];
-            av_channel_layout_describe(inlayout[i], buf, sizeof(buf));
+            av_channel_layout_describe(INLAYOUT(ctx, i), buf, sizeof(buf));
             av_log(ctx, AV_LOG_INFO, "Using \"%s\" for input %d\n", buf, i + 
1);
         }
-        s->in[i].nb_ch = inlayout[i]->nb_channels;
-        for (int j = 0; j < s->in[i].nb_ch; j++) {
-            enum AVChannel id = 
av_channel_layout_channel_from_index(inlayout[i], j);
-            if (id >= 0 && id < 64)
-                outmask |= (1ULL << id);
-        }
+        s->in[i].nb_ch = INLAYOUT(ctx, i)->nb_channels;
         nb_ch += s->in[i].nb_ch;
     }
     if (nb_ch > SWR_CH_MAX) {
         av_log(ctx, AV_LOG_ERROR, "Too many channels (max %d)\n", SWR_CH_MAX);
         return AVERROR(EINVAL);
     }
+    for (int i = 0, ch_idx = 0; i < s->nb_inputs; i++) {
+        for (int j = 0; j < s->in[i].nb_ch; j++) {
+            enum AVChannel id = 
av_channel_layout_channel_from_index(INLAYOUT(ctx, i), j);
+            if (id >= 0 && id < 64) {
+                outmask |= (1ULL << id);
+                native_layout_routes[id] = ch_idx;
+            }
+            s->route[ch_idx] = ch_idx;
+            ch_idx++;
+        }
+    }
     if (av_popcount64(outmask) != nb_ch) {
         av_log(ctx, AV_LOG_WARNING,
                "Input channel layouts overlap: "
                "output layout will be determined by the number of distinct 
input channels\n");
-        for (i = 0; i < nb_ch; i++)
-            s->route[i] = i;
         av_channel_layout_default(&outlayout, nb_ch);
         if (!KNOWN(&outlayout) && nb_ch)
             av_channel_layout_from_mask(&outlayout, 0xFFFFFFFFFFFFFFFFULL >> 
(64 - nb_ch));
     } else {
-        int *route[SWR_CH_MAX];
-        int c, out_ch_number = 0;
-
+        for (int c = 0, ch_idx = 0; c < 64; c++)
+            if ((1ULL << c) & outmask)
+                s->route[native_layout_routes[c]] = ch_idx++;
         av_channel_layout_from_mask(&outlayout, outmask);
-        route[0] = s->route;
-        for (i = 1; i < s->nb_inputs; i++)
-            route[i] = route[i - 1] + s->in[i - 1].nb_ch;
-        for (c = 0; c < 64; c++)
-            for (i = 0; i < s->nb_inputs; i++)
-                if (av_channel_layout_index_from_channel(inlayout[i], c) >= 0)
-                    *(route[i]++) = out_ch_number++;
     }
     if ((ret = ff_set_common_formats_from_list(ctx, packed_sample_fmts)) < 0)
         return ret;
     for (i = 0; i < s->nb_inputs; i++) {
         layouts = NULL;
-        if ((ret = ff_add_channel_layout(&layouts, inlayout[i])) < 0)
+        if ((ret = ff_add_channel_layout(&layouts, INLAYOUT(ctx, i))) < 0)
             return ret;
         if ((ret = ff_channel_layouts_ref(layouts, 
&ctx->inputs[i]->outcfg.channel_layouts)) < 0)
             return ret;
-- 
2.49.1


>From f6f5455e9d3a49cd4e34c1e1f9560607f05d23e6 Mon Sep 17 00:00:00 2001
From: Marton Balint <[email protected]>
Date: Fri, 28 Nov 2025 23:59:18 +0100
Subject: [PATCH 3/5] avfilter/af_amerge: add layout_mode option to control
 output channel layout

Signed-off-by: Marton Balint <[email protected]>
---
 doc/filters.texi        | 49 ++++++++++++++++++++++++++++---------
 libavfilter/af_amerge.c | 53 ++++++++++++++++++++++++++++++++++++-----
 2 files changed, 85 insertions(+), 17 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index 168ea0d2da..464a602f8d 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -2436,6 +2436,11 @@ Only used if option named @var{start} is set to 
@code{-1}.
 
 Merge two or more audio streams into a single multi-channel stream.
 
+All inputs must have the same sample rate, and format.
+
+If inputs do not have the same duration, the output will stop with the
+shortest.
+
 The filter accepts the following options:
 
 @table @option
@@ -2443,15 +2448,25 @@ The filter accepts the following options:
 @item inputs
 Set the number of inputs. Default is 2.
 
-@end table
+@item layout_mode
 
-If the channel layouts of the inputs are disjoint, and therefore compatible,
-the channel layout of the output will be set accordingly and the channels
-will be reordered as necessary. If the channel layouts of the inputs are not
-disjoint, the output will have all the channels of the first input then all
-the channels of the second input, in that order, and the channel layout of
-the output will be the default value corresponding to the total number of
-channels.
+This option controls how the output channel layout is determined and if the
+audio channels are reordered during merge.
+
+@table @option
+
+@item legacy
+
+This is the mode how the filter behaved historically so it is the default.
+
+If the channel layouts of the inputs are known and disjoint, and therefore
+compatible, the channel layout of the output will be set accordingly and the
+channels will be reordered as necessary. If the channel layouts of the inputs
+are not disjoint, some of them are unknown, or they are using special channel
+layouts, such as ambisonics, the output will have all the channels of the first
+input then all the channels of the second input, in that order, and the channel
+layout of the output will be the default value corresponding to the total
+number of channels.
 
 For example, if the first input is in 2.1 (FL+FR+LF) and the second input
 is FC+BL+BR, then the output will be in 5.1, with the channels in the
@@ -2462,10 +2477,22 @@ On the other hand, if both input are in stereo, the 
output channels will be
 in the default order: a1, a2, b1, b2, and the channel layout will be
 arbitrarily set to 4.0, which may or may not be the expected value.
 
-All inputs must have the same sample rate, and format.
+@item reset
+This mode ignores the input channel layouts and does no channel reordering.
+The output will have all the channels of the first input, then all the channels
+of the second input, in that order, and so on.
 
-If inputs do not have the same duration, the output will stop with the
-shortest.
+The output channel layout will only specify the total channel count.
+
+@item normal
+This mode keeps channel name and designation information from the input
+channels and does no channel reordering. The output will have all the channels
+of the first input, then all the channels of the second input, in that order,
+and so on.
+
+@end table
+
+@end table
 
 @subsection Examples
 
diff --git a/libavfilter/af_amerge.c b/libavfilter/af_amerge.c
index 92afb4691f..e300cf9c7b 100644
--- a/libavfilter/af_amerge.c
+++ b/libavfilter/af_amerge.c
@@ -23,6 +23,7 @@
  * Audio merging filter
  */
 
+#include "libavutil/avassert.h"
 #include "libavutil/avstring.h"
 #include "libavutil/bprint.h"
 #include "libavutil/channel_layout.h"
@@ -43,14 +44,27 @@ typedef struct AMergeContext {
     struct amerge_input {
         int nb_ch;         /**< number of channels for the input */
     } *in;
+    int layout_mode;       /**< the method for determining the output channel 
layout */
 } AMergeContext;
 
 #define OFFSET(x) offsetof(AMergeContext, x)
 #define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
 
+enum LayoutModes {
+    LM_LEGACY,
+    LM_RESET,
+    LM_NORMAL,
+    NB_LAYOUTMODES
+};
+
 static const AVOption amerge_options[] = {
     { "inputs", "specify the number of inputs", OFFSET(nb_inputs),
       AV_OPT_TYPE_INT, { .i64 = 2 }, 1, SWR_CH_MAX, FLAGS },
+    { "layout_mode",   "method used to determine the output channel layout", 
OFFSET(layout_mode),
+      AV_OPT_TYPE_INT, { .i64 = LM_LEGACY }, 0, NB_LAYOUTMODES - 1, FLAGS, 
.unit = "layout_mode"},
+        { "legacy",   NULL, 0, AV_OPT_TYPE_CONST, {.i64 = LM_LEGACY   }, 0, 0, 
FLAGS, .unit = "layout_mode" },
+        { "reset",    NULL, 0, AV_OPT_TYPE_CONST, {.i64 = LM_RESET    }, 0, 0, 
FLAGS, .unit = "layout_mode" },
+        { "normal",   NULL, 0, AV_OPT_TYPE_CONST, {.i64 = LM_NORMAL   }, 0, 0, 
FLAGS, .unit = "layout_mode" },
     { NULL }
 };
 
@@ -101,9 +115,16 @@ static int query_formats(AVFilterContext *ctx)
         av_log(ctx, AV_LOG_ERROR, "Too many channels (max %d)\n", SWR_CH_MAX);
         return AVERROR(EINVAL);
     }
+    ret = av_channel_layout_custom_init(&outlayout, nb_ch);
+    if (ret < 0)
+        return ret;
     for (int i = 0, ch_idx = 0; i < s->nb_inputs; i++) {
         for (int j = 0; j < s->in[i].nb_ch; j++) {
             enum AVChannel id = 
av_channel_layout_channel_from_index(INLAYOUT(ctx, i), j);
+            if (INLAYOUT(ctx, i)->order == AV_CHANNEL_ORDER_CUSTOM)
+                outlayout.u.map[ch_idx] = INLAYOUT(ctx, i)->u.map[j];
+            else
+                outlayout.u.map[ch_idx].id = (id == AV_CHAN_NONE ? 
AV_CHAN_UNKNOWN : id);
             if (id >= 0 && id < 64) {
                 outmask |= (1ULL << id);
                 native_layout_routes[id] = ch_idx;
@@ -112,6 +133,9 @@ static int query_formats(AVFilterContext *ctx)
             ch_idx++;
         }
     }
+    switch (s->layout_mode) {
+    case LM_LEGACY:
+    av_channel_layout_uninit(&outlayout);
     if (av_popcount64(outmask) != nb_ch) {
         av_log(ctx, AV_LOG_WARNING,
                "Input channel layouts overlap: "
@@ -125,22 +149,39 @@ static int query_formats(AVFilterContext *ctx)
                 s->route[native_layout_routes[c]] = ch_idx++;
         av_channel_layout_from_mask(&outlayout, outmask);
     }
+    break;
+    case LM_RESET:
+        av_channel_layout_uninit(&outlayout);
+        outlayout.order = AV_CHANNEL_ORDER_UNSPEC;
+        outlayout.nb_channels = nb_ch;
+        break;
+    case LM_NORMAL:
+        ret = av_channel_layout_retype(&outlayout, 0, 
AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL);
+        if (ret < 0)
+            goto out;
+        break;
+    default:
+        av_unreachable("Invalid layout_mode");
+    }
     if ((ret = ff_set_common_formats_from_list(ctx, packed_sample_fmts)) < 0)
-        return ret;
+        goto out;
     for (i = 0; i < s->nb_inputs; i++) {
         layouts = NULL;
         if ((ret = ff_add_channel_layout(&layouts, INLAYOUT(ctx, i))) < 0)
-            return ret;
+            goto out;
         if ((ret = ff_channel_layouts_ref(layouts, 
&ctx->inputs[i]->outcfg.channel_layouts)) < 0)
-            return ret;
+            goto out;
     }
     layouts = NULL;
     if ((ret = ff_add_channel_layout(&layouts, &outlayout)) < 0)
-        return ret;
+        goto out;
     if ((ret = ff_channel_layouts_ref(layouts, 
&ctx->outputs[0]->incfg.channel_layouts)) < 0)
-        return ret;
+        goto out;
 
-    return ff_set_common_all_samplerates(ctx);
+    ret = ff_set_common_all_samplerates(ctx);
+out:
+    av_channel_layout_uninit(&outlayout);
+    return ret;
 }
 
 static int config_output(AVFilterLink *outlink)
-- 
2.49.1


>From 5f8bdf2f363a0cb3e0f03bfebf45412b3b7eea73 Mon Sep 17 00:00:00 2001
From: Marton Balint <[email protected]>
Date: Sat, 29 Nov 2025 00:10:50 +0100
Subject: [PATCH 4/5] avfilter/af_amerge: fix indentation

Signed-off-by: Marton Balint <[email protected]>
---
 libavfilter/af_amerge.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/libavfilter/af_amerge.c b/libavfilter/af_amerge.c
index e300cf9c7b..13decdadc5 100644
--- a/libavfilter/af_amerge.c
+++ b/libavfilter/af_amerge.c
@@ -135,21 +135,21 @@ static int query_formats(AVFilterContext *ctx)
     }
     switch (s->layout_mode) {
     case LM_LEGACY:
-    av_channel_layout_uninit(&outlayout);
-    if (av_popcount64(outmask) != nb_ch) {
-        av_log(ctx, AV_LOG_WARNING,
-               "Input channel layouts overlap: "
-               "output layout will be determined by the number of distinct 
input channels\n");
-        av_channel_layout_default(&outlayout, nb_ch);
-        if (!KNOWN(&outlayout) && nb_ch)
-            av_channel_layout_from_mask(&outlayout, 0xFFFFFFFFFFFFFFFFULL >> 
(64 - nb_ch));
-    } else {
-        for (int c = 0, ch_idx = 0; c < 64; c++)
-            if ((1ULL << c) & outmask)
-                s->route[native_layout_routes[c]] = ch_idx++;
-        av_channel_layout_from_mask(&outlayout, outmask);
-    }
-    break;
+        av_channel_layout_uninit(&outlayout);
+        if (av_popcount64(outmask) != nb_ch) {
+            av_log(ctx, AV_LOG_WARNING,
+                   "Input channel layouts overlap: "
+                   "output layout will be determined by the number of distinct 
input channels\n");
+            av_channel_layout_default(&outlayout, nb_ch);
+            if (!KNOWN(&outlayout) && nb_ch)
+                av_channel_layout_from_mask(&outlayout, 0xFFFFFFFFFFFFFFFFULL 
>> (64 - nb_ch));
+        } else {
+            for (int c = 0, ch_idx = 0; c < 64; c++)
+                if ((1ULL << c) & outmask)
+                    s->route[native_layout_routes[c]] = ch_idx++;
+            av_channel_layout_from_mask(&outlayout, outmask);
+        }
+        break;
     case LM_RESET:
         av_channel_layout_uninit(&outlayout);
         outlayout.order = AV_CHANNEL_ORDER_UNSPEC;
-- 
2.49.1


>From 488736847134abc0b9c3eec93763bcebf51a78fc Mon Sep 17 00:00:00 2001
From: Marton Balint <[email protected]>
Date: Sun, 30 Nov 2025 23:00:15 +0100
Subject: [PATCH 5/5] fate/filter-audio: add amerge layout_mode test

Signed-off-by: Marton Balint <[email protected]>
---
 tests/fate/filter-audio.mak       |  6 +++
 tests/ref/fate/filter-amerge-mode | 65 +++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+)
 create mode 100644 tests/ref/fate/filter-amerge-mode

diff --git a/tests/fate/filter-audio.mak b/tests/fate/filter-audio.mak
index b244f82bb7..526645a634 100644
--- a/tests/fate/filter-audio.mak
+++ b/tests/fate/filter-audio.mak
@@ -75,6 +75,12 @@ fate-filter-amerge: tests/data/asynth-44100-1.wav
 fate-filter-amerge: SRC = $(TARGET_PATH)/tests/data/asynth-44100-1.wav
 fate-filter-amerge: CMD = framecrc -i $(SRC) -i $(SRC) -filter_complex 
"[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]"
 
+FATE_AFILTER-$(call FILTERDEMDECENCMUX, AMERGE, WAV, PCM_S16LE, PCM_S16LE, 
WAV) += fate-filter-amerge-mode
+fate-filter-amerge-mode: tests/data/asynth-44100-1.wav
+fate-filter-amerge-mode: SRC = $(TARGET_PATH)/tests/data/asynth-44100-1.wav
+fate-filter-amerge-mode: CMD = framecrc -channel_layout FL -i $(SRC) -ss 0.1 
-channel_layout FR -i $(SRC) -ss 0.2 -i $(SRC) -ss 0.3 -i $(SRC) -ss 0.4 -i 
$(SRC) -ss 0.5 -i $(SRC) \
+                               -filter_complex 
"[1:a][0:a]amerge[tmp1];[2:a][3:a]amerge=layout_mode=reset[tmp2];[tmp1][tmp2][4:a][5:a]amerge=inputs=4:layout_mode=normal[aout]"
 -map "[aout]"
+
 FATE_AFILTER-$(call FILTERDEMDECENCMUX, APAD, WAV, PCM_S16LE, PCM_S16LE, WAV) 
+= fate-filter-apad
 fate-filter-apad: tests/data/asynth-44100-2.wav
 fate-filter-apad: SRC = $(TARGET_PATH)/tests/data/asynth-44100-2.wav
diff --git a/tests/ref/fate/filter-amerge-mode 
b/tests/ref/fate/filter-amerge-mode
new file mode 100644
index 0000000000..b066323f13
--- /dev/null
+++ b/tests/ref/fate/filter-amerge-mode
@@ -0,0 +1,65 @@
+#tb 0: 1/44100
+#media_type 0: audio
+#codec_id 0: pcm_s16le
+#sample_rate 0: 44100
+#channel_layout_name 0: 6 channels (FL+FR+UNK+UNK+FC+FC)
+0,          0,          0,     4096,    49152, 0xd5b59e0b
+0,       4096,       4096,     4096,    49152, 0x5d99b2bc
+0,       8192,       8192,     4096,    49152, 0xafa8901f
+0,      12288,      12288,     4096,    49152, 0x97cd98b3
+0,      16384,      16384,     4096,    49152, 0x767fa951
+0,      20480,      20480,     4096,    49152, 0x09bc8763
+0,      24576,      24576,     4096,    49152, 0xd50e90ae
+0,      28672,      28672,     4096,    49152, 0xc7ce978d
+0,      32768,      32768,     4096,    49152, 0xb90ac520
+0,      36864,      36864,     4096,    49152, 0x32a2ac52
+0,      40960,      40960,     4096,    49152, 0x71ec85c8
+0,      45056,      45056,     4096,    49152, 0x4401b98a
+0,      49152,      49152,     4096,    49152, 0x972cb3b7
+0,      53248,      53248,     4096,    49152, 0x2c37f62d
+0,      57344,      57344,     4096,    49152, 0xee612003
+0,      61440,      61440,     4096,    49152, 0x4f46e987
+0,      65536,      65536,     4096,    49152, 0xb39484ca
+0,      69632,      69632,     4096,    49152, 0xc9042028
+0,      73728,      73728,     4096,    49152, 0xb196a39a
+0,      77824,      77824,     4096,    49152, 0xe4627739
+0,      81920,      81920,     4096,    49152, 0x3107d993
+0,      86016,      86016,     4096,    49152, 0x88606597
+0,      90112,      90112,     4096,    49152, 0xa3df9656
+0,      94208,      94208,     4096,    49152, 0x49442705
+0,      98304,      98304,     4096,    49152, 0x800256b2
+0,     102400,     102400,     4096,    49152, 0x1cb9af12
+0,     106496,     106496,     4096,    49152, 0xbe2d3e59
+0,     110592,     110592,     4096,    49152, 0x73e17139
+0,     114688,     114688,     4096,    49152, 0xc91a7787
+0,     118784,     118784,     4096,    49152, 0x4edf8c55
+0,     122880,     122880,     4096,    49152, 0x70057319
+0,     126976,     126976,     4096,    49152, 0x8a629a55
+0,     131072,     131072,     4096,    49152, 0xc9786b28
+0,     135168,     135168,     4096,    49152, 0x2efd7e7c
+0,     139264,     139264,     4096,    49152, 0x28877cd0
+0,     143360,     143360,     4096,    49152, 0xfd64967e
+0,     147456,     147456,     4096,    49152, 0x0caa8be5
+0,     151552,     151552,     4096,    49152, 0x097dc3c2
+0,     155648,     155648,     4096,    49152, 0xde78524d
+0,     159744,     159744,     4096,    49152, 0xbddb968b
+0,     163840,     163840,     4096,    49152, 0x146347cd
+0,     167936,     167936,     4096,    49152, 0x21ab8f0d
+0,     172032,     172032,     4096,    49152, 0xd2a0b60e
+0,     176128,     176128,     4096,    49152, 0xc7916e40
+0,     180224,     180224,     4096,    49152, 0xd42f5b66
+0,     184320,     184320,     4096,    49152, 0x2daeda35
+0,     188416,     188416,     4096,    49152, 0xd0220a25
+0,     192512,     192512,     4096,    49152, 0xfb962b0d
+0,     196608,     196608,     4096,    49152, 0xb1c6418c
+0,     200704,     200704,     4096,    49152, 0xc5e35827
+0,     204800,     204800,     4096,    49152, 0xf3cb0c12
+0,     208896,     208896,     4096,    49152, 0xfec64d90
+0,     212992,     212992,     4096,    49152, 0xb8685f78
+0,     217088,     217088,     4096,    49152, 0xe7d1562f
+0,     221184,     221184,     4096,    49152, 0xf453cba9
+0,     225280,     225280,     4096,    49152, 0x28928fce
+0,     229376,     229376,     4096,    49152, 0x64a909d9
+0,     233472,     233472,     4096,    49152, 0x2bf762b1
+0,     237568,     237568,     4096,    49152, 0x085daec8
+0,     241664,     241664,      886,    10632, 0x1522906c
-- 
2.49.1

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

Reply via email to