[PR] fftools/textformat/avtextformat: increase supported max section level amount (PR #23912)

James Almer via ffmpeg-devel <[email protected]> Sat, 25 Jul 2026 15:11:07 -0000
Newsgroups gmane.comp.video.ffmpeg.devel
Message-ID <178499226840.59.844735278278764549@29965ddac10e>
PR #23912 opened by James Almer (jamrial)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23912
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23912.patch

pieces/subpieces are not the smallest element, blocks/subblocks are.


>From 35388254e26e6f4d1dfc4a9907df68f112413468 Mon Sep 17 00:00:00 2001
From: James Almer <[email protected]>
Date: Sat, 25 Jul 2026 11:31:43 -0300
Subject: [PATCH 1/2] fftools/textformat/avtextformat: increase supported max
 section level amount

pieces/subpieces are not the smallest element, blocks/subblocks are.

Signed-off-by: James Almer <[email protected]>
---
 fftools/textformat/avtextformat.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fftools/textformat/avtextformat.h b/fftools/textformat/avtextformat.h
index 401544b146..875af6acdd 100644
--- a/fftools/textformat/avtextformat.h
+++ b/fftools/textformat/avtextformat.h
@@ -109,7 +109,7 @@ typedef struct AVTextFormatter {
     int flags;                  ///< a combination or AV_TEXTFORMAT__FLAG_*
 } AVTextFormatter;
 
-#define SECTION_MAX_NB_LEVELS    12
+#define SECTION_MAX_NB_LEVELS    14
 #define SECTION_MAX_NB_SECTIONS 100
 
 typedef struct AVTextFormatOptions {
-- 
2.52.0


>From d9c0462c5ec569f36f9293f80227581a508774de Mon Sep 17 00:00:00 2001
From: James Almer <[email protected]>
Date: Sat, 25 Jul 2026 11:32:31 -0300
Subject: [PATCH 2/2] fftools/ffprobe: don't print IAMF param definitions meant
 for blocks when parsing descriptors

Signed-off-by: James Almer <[email protected]>
---
 fftools/ffprobe.c | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index 31f74106f9..6fe34f48da 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -1429,7 +1429,7 @@ static void show_subtitle(AVTextFormatContext *tfc, AVSubtitle *sub, AVStream *s
 }
 
 static void print_iamf_param_definition(AVTextFormatContext *tfc, const char *name,
-                                        const AVIAMFParamDefinition *param, SectionID section_id);
+                                        const AVIAMFParamDefinition *param, int descriptor, SectionID section_id);
 
 static void print_frame_side_data(AVTextFormatContext *tfc,
                                   const AVFrame *frame,
@@ -1499,7 +1499,7 @@ static void print_frame_side_data(AVTextFormatContext *tfc,
             sd->type == AV_FRAME_DATA_IAMF_DEMIXING_INFO_PARAM ||
             sd->type == AV_FRAME_DATA_IAMF_RECON_GAIN_INFO_PARAM) {
             const AVIAMFParamDefinition *param = (AVIAMFParamDefinition *)sd->data;
-            print_iamf_param_definition(tfc, NULL, param, SECTION_ID_FRAME_SIDE_DATA);
+            print_iamf_param_definition(tfc, NULL, param, 0, SECTION_ID_FRAME_SIDE_DATA);
         }
         avtext_print_section_footer(tfc);
     }
@@ -2188,7 +2188,8 @@ static void print_tile_grid_params(AVTextFormatContext *tfc, const AVStreamGroup
 }
 
 static void print_iamf_param_definition(AVTextFormatContext *tfc, const char *name,
-                                        const AVIAMFParamDefinition *param, SectionID section_id)
+                                        const AVIAMFParamDefinition *param, int descriptor,
+                                        SectionID section_id)
 {
     SectionID subsection_id, parameter_section_id;
     if (section_id == SECTION_ID_FRAME_SIDE_DATA)
@@ -2221,11 +2222,13 @@ static void print_iamf_param_definition(AVTextFormatContext *tfc, const char *na
             const AVIAMFMixGain *mix = subblock;
             avtext_print_section_header(tfc, "IAMF Mix Gain Parameters", parameter_section_id);
             print_int("subblock_duration",         mix->subblock_duration);
-            print_int("animation_type",            mix->animation_type);
-            print_q("start_point_value",           mix->start_point_value, '/');
-            print_q("end_point_value",             mix->end_point_value, '/');
-            print_q("control_point_value",         mix->control_point_value, '/');
-            print_q("control_point_relative_time", mix->control_point_relative_time, '/');
+            if (!descriptor) {
+                print_int("animation_type",            mix->animation_type);
+                print_q("start_point_value",           mix->start_point_value, '/');
+                print_q("end_point_value",             mix->end_point_value, '/');
+                print_q("control_point_value",         mix->control_point_value, '/');
+                print_q("control_point_relative_time", mix->control_point_relative_time, '/');
+            }
             avtext_print_section_footer(tfc); // parameter_section_id
             break;
         }
@@ -2283,10 +2286,10 @@ static void print_iamf_audio_element_params(AVTextFormatContext *tfc, const AVSt
         avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBCOMPONENT
     }
     if (audio_element->demixing_info)
-        print_iamf_param_definition(tfc, "demixing_info", audio_element->demixing_info,
+        print_iamf_param_definition(tfc, "demixing_info", audio_element->demixing_info, 1,
                                     SECTION_ID_STREAM_GROUP_SUBCOMPONENT);
     if (audio_element->recon_gain_info)
-        print_iamf_param_definition(tfc, "recon_gain_info", audio_element->recon_gain_info,
+        print_iamf_param_definition(tfc, "recon_gain_info", audio_element->recon_gain_info, 1,
                                     SECTION_ID_STREAM_GROUP_SUBCOMPONENT);
     avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBCOMPONENTS
     avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_COMPONENT
@@ -2316,13 +2319,13 @@ static void print_iamf_submix_params(AVTextFormatContext *tfc, const AVIAMFSubmi
             avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBPIECE
         }
         if (element->element_mix_config)
-            print_iamf_param_definition(tfc, "element_mix_config", element->element_mix_config,
+            print_iamf_param_definition(tfc, "element_mix_config", element->element_mix_config, 1,
                                         SECTION_ID_STREAM_GROUP_SUBPIECE);
         avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBPIECES
         avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_PIECE
     }
     if (submix->output_mix_config)
-        print_iamf_param_definition(tfc, "output_mix_config", submix->output_mix_config,
+        print_iamf_param_definition(tfc, "output_mix_config", submix->output_mix_config, 1,
                                     SECTION_ID_STREAM_GROUP_PIECE);
     for (unsigned i = 0; i < submix->nb_layouts; i++) {
         const AVIAMFSubmixLayout *layout = submix->layouts[i];
-- 
2.52.0

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