PR #25811 opened by luoye-cpu
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25811
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25811.patch

## Summary

`get_score()` returns 0 as soon as an IA Sequence Header OBU does not start
with the "iamf" magic. `iamf_probe()` stops its loop on any non-negative
return value, so the Audio Frame OBUs that follow can never raise the score
to `AVPROBE_SCORE_EXTENSION + 1`. A stream with an initial IA Sequence Header
carrying the "iamf" 4CC and a later unknown ia_code in the descriptor section
can be handled by the current demuxer, but is not detectable from its
content: the same bytes score 1 from the `.iamf` extension and are rejected
as "Invalid data found" when named `.bin`.

Once the probe has seen an IA Sequence Header carrying the "iamf" 4CC, a
later type-31 OBU with an unknown ia_code should not prematurely end content
probing before an Audio Frame OBU provides positive evidence for IAMF. This
change lets the probe continue past such an OBU (while still rejecting an
unknown *first* header and a truncated header), so the Audio Frame OBUs
below can be scored.

## Root cause

`read_descriptors()` in `iamf_parse.c` dispatches only Codec Config, Audio
Element and Mix Presentation OBUs and falls through to
`default: avio_skip(pb, obu_size)` for type 31, so the demuxer skips
otherwise unhandled type-31 OBUs during descriptor parsing without
validating ia_code. The probe, in contrast, returned 0 on the first unknown
ia_code after a valid first header. This change extends probe acceptance to
match the existing demuxer's treatment of otherwise unhandled type-31 OBUs
as skippable during descriptor parsing. It does not change descriptor
parsing or introduce a new parsing path; it only lets the following Audio
Frame OBU be scored. This is a probe policy choice, not a conformance
requirement or a logical consequence of the parser's behaviour: probing,
descriptor parsing and packet reading may legitimately differ in how
tolerant they are. It does not handle the start of a new IA Sequence. In
particular it does not claim that the test fixture is a conformant stream.

## Conformance

IAMF v2.0.0 permits IA Sequence Header OBUs to appear repeatedly within one
IA Sequence (section 3.4): when a stream does so, all occurrences after the
first SHALL be marked as redundant, and a later non-redundant IA Sequence
Header received after a previous one indicates the start of a new IA
Sequence. The spec defines ia_code as the 4CC "iamf" and gives no rule for
other values. Both positive fixtures below are deliberately non-conformant;
this change does not claim otherwise. Skipping such a header is this
demuxer's existing tolerance, not a conformance requirement.

## Testing

Three self-contained FATE cases are added. A short IAMF sequence is muxed
locally from the checked-in streamgroups and audiogen, then turned into a
.bin with a later unknown ia_code that must still be probed
(`probe_score=51`), or an unknown first ia_code that must still fail. No
fate-suite sample and no unmerged series is needed. The `.bin` extension
keeps the score purely content based. The positive cases exercise probe
control flow (reaching the Audio Frame OBU); they do not establish that an
unknown ia_code or a new IA Sequence is conformant. Truncated headers and
the `buf_size < 4` path are deliberately unchanged.

On the build host (`git-2026-11-06-5d85b7bfb2`, mingw64 gcc 16.2.0) all
three new cases pass, `fate-iamf-stereo` still passes, and restoring the old
`get_score()` makes both positive cases fail. The references were produced
by FATE GEN and normalised to LF. Sample-based IAMF cases and a full
`make fate` run were not run on the host because the fate-suite samples are
not available there.

## Relation to other work

This patch is independent of PR #25632 by the same author. That series
exports IAMF profile metadata; this one only fixes `get_score()` in the
`iamf_probe()` loop. No code, fixture or helper from that series is used,
and this patch applies to current master on its own.

## Known limitations

Pre-existing and unchanged by this patch: `get_score()` bounds the 4CC read
by the bytes left in the probe buffer, not by the current OBU's payload, so
`AV_RB32` can read into the next OBU and cause a false positive. A separate
fix needs to bound that check by the OBU's own payload size (`obu_size`)
while keeping the probe-buffer limit, and add a short-payload regression
test. This change does not touch that path and does not claim it is harmless.


>From ae373c4733b54edcb038b0dc75c3d850d30859b0 Mon Sep 17 00:00:00 2001
From: luoye-cpu <[email protected]>
Date: Fri, 6 Nov 2026 21:48:28 +0800
Subject: [PATCH] avformat/iamfdec: probe past unknown ia_code headers

get_score() returns 0 as soon as an IA Sequence Header OBU does not start
with the "iamf" magic. iamf_probe() stops its loop on any non-negative
return value, so the Audio Frame OBUs that follow can never raise the
score to AVPROBE_SCORE_EXTENSION + 1. A stream with an initial IA
Sequence Header carrying the "iamf" 4CC and a later unknown ia_code
in the descriptor section can be handled by the current demuxer,
but is not detectable from its content: the same bytes score 1 from
the .iamf extension and are rejected as "Invalid data found" when
named .bin.

Once the probe has seen an IA Sequence Header carrying the "iamf"
4CC, a later type-31 OBU with an unknown ia_code should not
prematurely end content probing before an Audio Frame OBU provides
positive evidence for IAMF. read_descriptors() in iamf_parse.c
dispatches only Codec Config, Audio Element and Mix Presentation
OBUs and falls through to "default: avio_skip(pb, obu_size)" for
type 31, so the demuxer skips every later Sequence Header without
validating ia_code. This change extends probe acceptance to match
the existing demuxer's treatment of otherwise unhandled type-31 OBUs
as skippable during descriptor parsing. It does not change descriptor
parsing or introduce a new parsing path; it only lets the following
Audio Frame OBU be scored. This is a probe policy choice, not a
conformance requirement or a logical consequence of the parser's
behaviour: probing, descriptor parsing and packet reading may
legitimately differ in how tolerant they are. It does not handle the
start of a new IA Sequence. In particular it does not claim that the
fixture is a conformant stream.

IAMF v2.0.0 permits IA Sequence Header OBUs to appear repeatedly
within one IA Sequence (section 3.4): when a stream does so, all
occurrences after the first SHALL be marked as redundant, and a later
non-redundant IA Sequence Header received after a previous one
indicates the start of a new IA Sequence. The spec defines ia_code
as the 4CC "iamf" and gives no rule for other values. Both positive
fixtures below are deliberately non-conformant; this change does not
claim otherwise. Skipping such a header is this demuxer's existing
tolerance, not a conformance requirement.

Keep rejecting a truncated header and an unknown first header, and skip
an unknown later type-31 header once a valid first header has been seen.
ff_iamf_parse_obu_header() consumes the obu_redundant_copy bit but does
not expose it to its caller, so the probe never branches on it. The
0xf8 (non-redundant) and 0xfc (redundant flag set) are both covered
as later type-31 headers with an unknown ia_code to make that
explicit. The 0xfc case is not a conformant
redundant copy: its payload differs from the previous Sequence Header,
so it only checks that setting the flag does not change probe control
flow. Unconditionally skipping every unknown ia_code was rejected: an
unknown first header does not start an IA Sequence and must still fail.
Changing the parser instead of get_score() would not help, as the parser
already skips these OBUs.

Add three self-contained FATE cases. A short IAMF sequence is muxed
locally from the checked-in streamgroups and audiogen, then turned into
a .bin with a later unknown ia_code that must still be probed
(probe_score=51), or an unknown first ia_code that must still fail.
No fate-suite sample and no unmerged series is needed. The .bin
extension keeps the score purely content based. The positive cases
exercise probe control flow (reaching the Audio Frame OBU); they do not
establish that an unknown ia_code or a new IA Sequence is conformant.
Truncated headers and the buf_size < 4 path are deliberately unchanged.

On this host all three new cases pass, fate-iamf-stereo still passes, and
restoring the old get_score makes both positive cases fail. The references
were produced by FATE GEN and normalised to LF. These results are from
the runs; the read_descriptors() and iamf_probe() control flow above is
from reading the code. Sample-based IAMF cases and a full make fate run
were not run because the fate-suite samples are not available here.

Known limitation, pre-existing and unchanged by this patch: get_score()
bounds the 4CC read by the bytes left in the probe buffer, not by the
current OBU's payload, so AV_RB32 can read into the next OBU and cause
a false positive. A separate fix needs to bound that check by the OBU's
own payload size (obu_size) while keeping the probe-buffer limit, and
add a short-payload regression test. This change does not touch that
path and does not claim it is harmless.

This patch is independent of PR #25632 by the same author. That
series exports IAMF profile metadata; this one only fixes get_score()
in the iamf_probe() loop. No code, fixture or helper from that series
is used, and this patch applies to current master on its own.

Refs: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25632

Signed-off-by: luoye-cpu <[email protected]>
---
 libavformat/iamfdec.c                         |  8 ++++-
 tests/Makefile                                | 36 +++++++++++++++++++
 tests/fate/iamf.mak                           | 26 ++++++++++++++
 tests/ref/fate/iamf-probe-unknown-later       | 13 +++++++
 .../fate/iamf-probe-unknown-later-redundant   | 13 +++++++
 5 files changed, 95 insertions(+), 1 deletion(-)
 create mode 100644 tests/ref/fate/iamf-probe-unknown-later
 create mode 100644 tests/ref/fate/iamf-probe-unknown-later-redundant

diff --git a/libavformat/iamfdec.c b/libavformat/iamfdec.c
index 66870094f6c..25b502a334e 100644
--- a/libavformat/iamfdec.c
+++ b/libavformat/iamfdec.c
@@ -32,8 +32,14 @@
 static int get_score(const uint8_t *buf, int buf_size, enum IAMF_OBU_Type 
type, int *seq)
 {
     if (type == IAMF_OBU_IA_SEQUENCE_HEADER) {
-        if (buf_size < 4 || AV_RB32(buf) != MKBETAG('i','a','m','f'))
+        if (buf_size < 4)
             return 0;
+        /* A later IA Sequence Header OBU with an unknown ia_code is skipped
+           by the parser (iamf_parse.c falls through to avio_skip), so keep
+           probing to still reach the Audio Frame OBUs below. An unknown first
+           header must still be rejected (*seq == 0). */
+        if (AV_RB32(buf) != MKBETAG('i','a','m','f'))
+            return *seq ? -1 : 0;
         *seq = 1;
         return -1;
     }
diff --git a/tests/Makefile b/tests/Makefile
index beb53a54ca1..2f48786812e 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -77,6 +77,42 @@ tests/data/fate/apng-small-bpp-%.png: TAG = GEN
 tests/data/fate/apng-small-bpp-%.png: tests/apnggen$(HOSTEXESUF) | 
tests/data/fate
        $(M)./$< $@
 
+# A short, self-contained IAMF sequence for probing regressions, muxed locally
+# so the tests below need no fate-suite sample. Its first eight bytes are the
+# (valid) first IA Sequence Header OBU (2 bytes of OBU header + 6 bytes of
+# payload: the ia_code 4CC and the primary and additional profile bytes).
+tests/data/iamf-probe-base.iamf: TAG = GEN
+tests/data/iamf-probe-base.iamf: tests/data/asynth-44100-2.wav 
tests/data/streamgroups/audio_element-stereo 
tests/data/streamgroups/mix_presentation-stereo $(FFMPEG) | tests/data
+       $(M)$(TARGET_EXEC) $(TARGET_PATH)/$(FFMPEG) -nostdin -bitexact -v error 
\
+       -auto_conversion_filters -i 
$(TARGET_PATH)/tests/data/asynth-44100-2.wav \
+       -/stream_group 
$(TARGET_PATH)/tests/data/streamgroups/audio_element-stereo \
+       -/stream_group 
$(TARGET_PATH)/tests/data/streamgroups/mix_presentation-stereo \
+       -streamid 0:0 -c:a flac -t 1 -f iamf -y $(TARGET_PATH)/$@
+
+# Keep the valid first header, insert a later Sequence Header with an unknown
+# ia_code, then append the rest of the sequence. 0xf8 is a non-redundant
+# header; section 3.4 of IAMF v2.0.0 would read such a later header as the
+# start of a new IA Sequence. This is a deliberately non-conformant input:
+# the parser skips the OBU, and probing must not stop here either.
+tests/data/iamf-probe-unknown-later.bin: TAG = GEN
+tests/data/iamf-probe-unknown-later.bin: tests/data/iamf-probe-base.iamf | 
tests/data
+       $(M)head -c 8 $< > $@ && printf '\370\006xxxx\000\000' >> $@ && tail -c 
+9 $< >> $@
+
+# Set obu_redundant_copy on a later Sequence Header with an unknown ia_code.
+# This is deliberately NOT a conformant redundant copy: section 3.2 of
+# IAMF v2.0.0 defines it as a copy of the previous OBU, while this payload
+# differs. ff_iamf_parse_obu_header() consumes the bit but does not expose
+# it, so this case only checks that the probe does not branch on that flag.
+tests/data/iamf-probe-unknown-later-redundant.bin: TAG = GEN
+tests/data/iamf-probe-unknown-later-redundant.bin: 
tests/data/iamf-probe-base.iamf | tests/data
+       $(M)head -c 8 $< > $@ && printf '\374\006xxxx\000\000' >> $@ && tail -c 
+9 $< >> $@
+
+# Start with an unknown ia_code instead: content probing must still refuse the
+# file, so the tolerance above cannot be widened to unknown first headers.
+tests/data/iamf-probe-unknown-first.bin: TAG = GEN
+tests/data/iamf-probe-unknown-first.bin: tests/data/iamf-probe-base.iamf | 
tests/data
+       $(M)printf '\370\006xxxx\000\000' > $@ && tail -c +9 $< >> $@
+
 RUNNING_FATE := $(filter check fate%,$(filter-out fate-rsync,$(MAKECMDGOALS)))
 
 # Check sanity of dependencies when running FATE tests.
diff --git a/tests/fate/iamf.mak b/tests/fate/iamf.mak
index fd51e09e5d5..dc86c95cdf6 100644
--- a/tests/fate/iamf.mak
+++ b/tests/fate/iamf.mak
@@ -95,6 +95,32 @@ fate-iamf-ambisonic_3-copy: CMD = stream_remux iamf 
$(TARGET_SAMPLES)/iamf/test_
   "" "-c:a copy -frames:a 0 -map 0:g:i:300" \
   "-show_entries 
stream_group=index,id,nb_streams,type:stream_group_components:stream_group_stream=index,id"
 
+FATE_IAMF_PROBE = IAMF_MUXER IAMF_DEMUXER FLAC_ENCODER FLAC_DECODER \
+                  WAV_DEMUXER PCM_S16LE_DECODER PCM_S16LE_ENCODER \
+                  ARESAMPLE_FILTER NULL_MUXER FILE_PROTOCOL PIPE_PROTOCOL
+
+# A later type-31 OBU with an unknown ia_code must not stop content
+# probing. Use a .bin extension so the score is content-only and the format
+# has to be recognized from the OBUs, not from the file name (probe_score=51).
+FATE_IAMF-$(call ALLYES, $(FATE_IAMF_PROBE)) += fate-iamf-probe-unknown-later
+fate-iamf-probe-unknown-later: tests/data/iamf-probe-unknown-later.bin
+fate-iamf-probe-unknown-later: CMD = ffprobe_demux 
$(TARGET_PATH)/tests/data/iamf-probe-unknown-later.bin
+
+# The redundant flag must not change probe control flow. This fixture is
+# deliberately non-conformant; see the 0xfc comment in tests/Makefile.
+FATE_IAMF-$(call ALLYES, $(FATE_IAMF_PROBE)) += 
fate-iamf-probe-unknown-later-redundant
+fate-iamf-probe-unknown-later-redundant: 
tests/data/iamf-probe-unknown-later-redundant.bin
+fate-iamf-probe-unknown-later-redundant: CMD = ffprobe_demux 
$(TARGET_PATH)/tests/data/iamf-probe-unknown-later-redundant.bin
+
+# An unknown first header is not an IA Sequence yet: probing must still
+# refuse the file, so the tolerance above cannot be widened to skip unknown
+# first headers. `!` turns the expected failure into a passing test.
+FATE_IAMF-$(call ALLYES, $(FATE_IAMF_PROBE)) += fate-iamf-probe-unknown-first
+fate-iamf-probe-unknown-first: tests/data/iamf-probe-unknown-first.bin
+fate-iamf-probe-unknown-first: CMD = ! run ffprobe$(PROGSSUF)$(EXESUF) -v 
error -show_entries format=format_name 
$(TARGET_PATH)/tests/data/iamf-probe-unknown-first.bin
+fate-iamf-probe-unknown-first: CMP = grep
+fate-iamf-probe-unknown-first: REF = Invalid data found when processing input
+
 FATE_IAMF += $(FATE_IAMF-yes)
 FATE_IAMF_SAMPLES += $(FATE_IAMF_SAMPLES-yes)
 
diff --git a/tests/ref/fate/iamf-probe-unknown-later 
b/tests/ref/fate/iamf-probe-unknown-later
new file mode 100644
index 00000000000..1a691c7aa18
--- /dev/null
+++ b/tests/ref/fate/iamf-probe-unknown-later
@@ -0,0 +1,13 @@
+packet|codec_type=audio|stream_index=0|pts=0|pts_time=0.000000|dts=0|dts_time=0.000000|duration=4096|duration_time=0.092880|size=1323|pos=190|flags=K__|data_hash=CRC32:9ad4a95c
+packet|codec_type=audio|stream_index=0|pts=4096|pts_time=0.092880|dts=4096|dts_time=0.092880|duration=4096|duration_time=0.092880|size=1254|pos=1516|flags=K__|data_hash=CRC32:1404da91
+packet|codec_type=audio|stream_index=0|pts=8192|pts_time=0.185760|dts=8192|dts_time=0.185760|duration=4096|duration_time=0.092880|size=1320|pos=2773|flags=K__|data_hash=CRC32:4c81c8e6
+packet|codec_type=audio|stream_index=0|pts=12288|pts_time=0.278639|dts=12288|dts_time=0.278639|duration=4096|duration_time=0.092880|size=1280|pos=4096|flags=K__|data_hash=CRC32:62cdf256
+packet|codec_type=audio|stream_index=0|pts=16384|pts_time=0.371519|dts=16384|dts_time=0.371519|duration=4096|duration_time=0.092880|size=1331|pos=5379|flags=K__|data_hash=CRC32:3ff01238
+packet|codec_type=audio|stream_index=0|pts=20480|pts_time=0.464399|dts=20480|dts_time=0.464399|duration=4096|duration_time=0.092880|size=1267|pos=6713|flags=K__|data_hash=CRC32:c70214f3
+packet|codec_type=audio|stream_index=0|pts=24576|pts_time=0.557279|dts=24576|dts_time=0.557279|duration=4096|duration_time=0.092880|size=1282|pos=7983|flags=K__|data_hash=CRC32:c47d0965
+packet|codec_type=audio|stream_index=0|pts=28672|pts_time=0.650159|dts=28672|dts_time=0.650159|duration=4096|duration_time=0.092880|size=1313|pos=9268|flags=K__|data_hash=CRC32:7293d23a
+packet|codec_type=audio|stream_index=0|pts=32768|pts_time=0.743039|dts=32768|dts_time=0.743039|duration=4096|duration_time=0.092880|size=1323|pos=10584|flags=K__|data_hash=CRC32:269b662f
+packet|codec_type=audio|stream_index=0|pts=36864|pts_time=0.835918|dts=36864|dts_time=0.835918|duration=4096|duration_time=0.092880|size=1254|pos=11910|flags=K__|data_hash=CRC32:216ad123
+packet|codec_type=audio|stream_index=0|pts=40960|pts_time=0.928798|dts=40960|dts_time=0.928798|duration=4096|duration_time=0.092880|size=1235|pos=13170|flags=K__|data_hash=CRC32:27ff80a2|side_datum/skip_samples:side_data_type=Skip
 
Samples|side_datum/skip_samples:skip_samples=0|side_datum/skip_samples:discard_padding=956|side_datum/skip_samples:skip_reason=0|side_datum/skip_samples:discard_reason=0
+stream|index=0|codec_name=flac|profile=unknown|level=-99|codec_type=audio|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|mime_codec_string=flac|sample_fmt=s16|sample_rate=44100|channels=2|channel_layout=stereo|bits_per_sample=0|initial_padding=0|seek_preroll=0|id=0x0|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/44100|start_pts=N/A|start_time=N/A|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=16|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=11|extradata_size=34|extradata_hash=CRC32:5932aa1a|disposition:default=1|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multil
 ayer=0
+format|filename=iamf-probe-unknown-later.bin|nb_streams=1|nb_programs=0|nb_stream_groups=2|format_name=iamf|start_time=N/A|duration=N/A|size=14405|bit_rate=N/A|probe_score=51
diff --git a/tests/ref/fate/iamf-probe-unknown-later-redundant 
b/tests/ref/fate/iamf-probe-unknown-later-redundant
new file mode 100644
index 00000000000..250e45031fa
--- /dev/null
+++ b/tests/ref/fate/iamf-probe-unknown-later-redundant
@@ -0,0 +1,13 @@
+packet|codec_type=audio|stream_index=0|pts=0|pts_time=0.000000|dts=0|dts_time=0.000000|duration=4096|duration_time=0.092880|size=1323|pos=190|flags=K__|data_hash=CRC32:9ad4a95c
+packet|codec_type=audio|stream_index=0|pts=4096|pts_time=0.092880|dts=4096|dts_time=0.092880|duration=4096|duration_time=0.092880|size=1254|pos=1516|flags=K__|data_hash=CRC32:1404da91
+packet|codec_type=audio|stream_index=0|pts=8192|pts_time=0.185760|dts=8192|dts_time=0.185760|duration=4096|duration_time=0.092880|size=1320|pos=2773|flags=K__|data_hash=CRC32:4c81c8e6
+packet|codec_type=audio|stream_index=0|pts=12288|pts_time=0.278639|dts=12288|dts_time=0.278639|duration=4096|duration_time=0.092880|size=1280|pos=4096|flags=K__|data_hash=CRC32:62cdf256
+packet|codec_type=audio|stream_index=0|pts=16384|pts_time=0.371519|dts=16384|dts_time=0.371519|duration=4096|duration_time=0.092880|size=1331|pos=5379|flags=K__|data_hash=CRC32:3ff01238
+packet|codec_type=audio|stream_index=0|pts=20480|pts_time=0.464399|dts=20480|dts_time=0.464399|duration=4096|duration_time=0.092880|size=1267|pos=6713|flags=K__|data_hash=CRC32:c70214f3
+packet|codec_type=audio|stream_index=0|pts=24576|pts_time=0.557279|dts=24576|dts_time=0.557279|duration=4096|duration_time=0.092880|size=1282|pos=7983|flags=K__|data_hash=CRC32:c47d0965
+packet|codec_type=audio|stream_index=0|pts=28672|pts_time=0.650159|dts=28672|dts_time=0.650159|duration=4096|duration_time=0.092880|size=1313|pos=9268|flags=K__|data_hash=CRC32:7293d23a
+packet|codec_type=audio|stream_index=0|pts=32768|pts_time=0.743039|dts=32768|dts_time=0.743039|duration=4096|duration_time=0.092880|size=1323|pos=10584|flags=K__|data_hash=CRC32:269b662f
+packet|codec_type=audio|stream_index=0|pts=36864|pts_time=0.835918|dts=36864|dts_time=0.835918|duration=4096|duration_time=0.092880|size=1254|pos=11910|flags=K__|data_hash=CRC32:216ad123
+packet|codec_type=audio|stream_index=0|pts=40960|pts_time=0.928798|dts=40960|dts_time=0.928798|duration=4096|duration_time=0.092880|size=1235|pos=13170|flags=K__|data_hash=CRC32:27ff80a2|side_datum/skip_samples:side_data_type=Skip
 
Samples|side_datum/skip_samples:skip_samples=0|side_datum/skip_samples:discard_padding=956|side_datum/skip_samples:skip_reason=0|side_datum/skip_samples:discard_reason=0
+stream|index=0|codec_name=flac|profile=unknown|level=-99|codec_type=audio|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|mime_codec_string=flac|sample_fmt=s16|sample_rate=44100|channels=2|channel_layout=stereo|bits_per_sample=0|initial_padding=0|seek_preroll=0|id=0x0|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/44100|start_pts=N/A|start_time=N/A|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=16|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=11|extradata_size=34|extradata_hash=CRC32:5932aa1a|disposition:default=1|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multil
 ayer=0
+format|filename=iamf-probe-unknown-later-redundant.bin|nb_streams=1|nb_programs=0|nb_stream_groups=2|format_name=iamf|start_time=N/A|duration=N/A|size=14405|bit_rate=N/A|probe_score=51
-- 
2.54.0

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

Reply via email to