This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

The following commit(s) were added to refs/heads/master by this push:
     new bfa67bafad lavfi: af_showinfo: add support for IAMF side-data
bfa67bafad is described below

commit bfa67bafadf42758a6e456ae2653b7f45783ab46
Author:     Marvin Scholz <[email protected]>
AuthorDate: Tue Jun 2 14:49:01 2026 +0200
Commit:     Marvin Scholz <[email protected]>
CommitDate: Wed Jun 17 00:03:14 2026 +0000

    lavfi: af_showinfo: add support for IAMF side-data
---
 libavfilter/af_ashowinfo.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)

diff --git a/libavfilter/af_ashowinfo.c b/libavfilter/af_ashowinfo.c
index ebcd5c996f..c0be37cd3d 100644
--- a/libavfilter/af_ashowinfo.c
+++ b/libavfilter/af_ashowinfo.c
@@ -29,6 +29,7 @@
 #include "libavutil/attributes.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/downmix_info.h"
+#include "libavutil/iamf.h"
 #include "libavutil/mem.h"
 #include "libavutil/replaygain.h"
 #include "libavutil/timestamp.h"
@@ -165,6 +166,85 @@ static void dump_audio_service_type(AVFilterContext *ctx, 
AVFrameSideData *sd)
     }
 }
 
+static void dump_iamf_parameter_definition(AVFilterContext *ctx, const 
AVFrameSideData *sd)
+{
+    const AVIAMFParamDefinition *param = (AVIAMFParamDefinition *)sd->data;
+
+    switch (param->type) {
+        case AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN:
+            av_log(ctx, AV_LOG_INFO, "iamf mix gain parameters: ");
+            break;
+        case AV_IAMF_PARAMETER_DEFINITION_DEMIXING:
+            av_log(ctx, AV_LOG_INFO, "iamf demixing parameters: ");
+            break;
+        case AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN:
+            av_log(ctx, AV_LOG_INFO, "iamf recon gain parameters: ");
+            break;
+        default:
+            av_log(ctx, AV_LOG_ERROR, "unknown iamf parameter definition type: 
%d",
+                param->type);
+            return;
+    }
+
+    av_log(ctx, AV_LOG_INFO,
+        "nb_subblocks=%d, "
+        "parameter_id=%d, "
+        "parameter_rate=%d, "
+        "duration=%d, "
+        "constant_subblock_duration=%d,",
+        param->nb_subblocks,
+        param->parameter_id,
+        param->parameter_rate,
+        param->duration,
+        param->constant_subblock_duration
+    );
+
+    for (unsigned i = 0; i < param->nb_subblocks; i++) {
+        const void *subblock = av_iamf_param_definition_get_subblock(param, i);
+
+        av_log(ctx, AV_LOG_INFO, " subblock[%d]={ ", i);
+        switch (param->type) {
+            case AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN: {
+                const AVIAMFMixGain *mix = subblock;
+                av_log(ctx, AV_LOG_INFO,
+                    "subblock_duration=%d, "
+                    "animation_type=%d, "
+                    "start_point_value=%d/%d, "
+                    "end_point_value=%d/%d, "
+                    "control_point_value=%d/%d, "
+                    "control_point_relative_time=%d/%d",
+                    mix->subblock_duration,
+                    mix->animation_type,
+                    mix->start_point_value.num, mix->start_point_value.den,
+                    mix->end_point_value.num, mix->end_point_value.den,
+                    mix->control_point_value.num, mix->control_point_value.den,
+                    mix->control_point_relative_time.num, 
mix->control_point_relative_time.den
+                );
+                break;
+            }
+            case AV_IAMF_PARAMETER_DEFINITION_DEMIXING: {
+                const AVIAMFDemixingInfo *demix = subblock;
+                av_log(ctx, AV_LOG_INFO,
+                    "subblock_duration=%d, "
+                    "dmixp_mode=%d",
+                    demix->subblock_duration,
+                    demix->dmixp_mode
+                );
+                break;
+            }
+            case AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN: {
+                const AVIAMFReconGain *recon = subblock;
+                av_log(ctx, AV_LOG_INFO,
+                    "subblock_duration=%d", recon->subblock_duration
+                );
+                break;
+            }
+        }
+        av_log(ctx, AV_LOG_INFO, (i == param->nb_subblocks - 1) ? " }" : " 
},");
+    }
+
+}
+
 static void dump_unknown(AVFilterContext *ctx, AVFrameSideData *sd)
 {
     av_log(ctx, AV_LOG_INFO, "unknown side data type: %d, size "
@@ -224,6 +304,11 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
         case AV_FRAME_DATA_DOWNMIX_INFO:   dump_downmix   (ctx, sd); break;
         case AV_FRAME_DATA_REPLAYGAIN:     dump_replaygain(ctx, sd); break;
         case AV_FRAME_DATA_AUDIO_SERVICE_TYPE: dump_audio_service_type(ctx, 
sd); break;
+        case AV_FRAME_DATA_IAMF_DEMIXING_INFO_PARAM:
+        case AV_FRAME_DATA_IAMF_MIX_GAIN_PARAM:
+        case AV_FRAME_DATA_IAMF_RECON_GAIN_INFO_PARAM:
+            dump_iamf_parameter_definition(ctx, sd);
+            break;
         default:                           dump_unknown   (ctx, sd); break;
         }
 

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

Reply via email to