aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/movenc.c
diff options
context:
space:
mode:
authorFelicia Lim <flim@google.com>2024-07-09 15:23:43 -0700
committerJames Almer <jamrial@gmail.com>2024-07-18 23:27:20 -0300
commit180c869faf96dbf1396fa3aba43b7488f9a7090b (patch)
treeba310d9bd6cfbc21252b8d97392733937aa525a2 /libavformat/movenc.c
parent3de65f47e0cd4c971cc78901c213210e6ba26abd (diff)
downloadffmpeg-180c869faf96dbf1396fa3aba43b7488f9a7090b.tar.gz
avformat/movenc: fix channel count and samplerate fields for IAMF tracks
Clause 6.2.3 of IAMF[1] states both of these shall be set to 0. [1]https://aomediacodec.github.io/iamf/v1.0.0-errata.html#iasampleentry-section Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavformat/movenc.c')
-rw-r--r--libavformat/movenc.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 2bea55e33d..ae49582a1a 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -1399,7 +1399,8 @@ static int mov_write_audio_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex
avio_wb16(pb, 16);
avio_wb16(pb, track->audio_vbr ? -2 : 0); /* compression ID */
} else { /* reserved for mp4/3gp */
- avio_wb16(pb, track->par->ch_layout.nb_channels);
+ avio_wb16(pb, track->tag == MKTAG('i', 'a', 'm', 'f') ?
+ 0 : track->par->ch_layout.nb_channels);
if (track->par->codec_id == AV_CODEC_ID_FLAC ||
track->par->codec_id == AV_CODEC_ID_ALAC) {
avio_wb16(pb, track->par->bits_per_raw_sample);
@@ -1410,7 +1411,9 @@ static int mov_write_audio_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex
}
avio_wb16(pb, 0); /* packet size (= 0) */
- if (track->par->codec_id == AV_CODEC_ID_OPUS)
+ if (track->tag == MKTAG('i','a','m','f'))
+ avio_wb16(pb, 0); /* samplerate must be 0 for IAMF */
+ else if (track->par->codec_id == AV_CODEC_ID_OPUS)
avio_wb16(pb, 48000);
else if (track->par->codec_id == AV_CODEC_ID_TRUEHD)
avio_wb32(pb, track->par->sample_rate);
@@ -5158,7 +5161,8 @@ static int mov_write_isml_manifest(AVIOContext *pb, MOVMuxContext *mov, AVFormat
param_write_int(pb, "AudioTag", ff_codec_get_tag(ff_codec_wav_tags,
track->par->codec_id));
param_write_int(pb, "Channels", track->par->ch_layout.nb_channels);
- param_write_int(pb, "SamplingRate", track->par->sample_rate);
+ param_write_int(pb, "SamplingRate", track->tag == MKTAG('i','a','m','f') ?
+ 0 : track->par->sample_rate);
param_write_int(pb, "BitsPerSample", 16);
param_write_int(pb, "PacketSize", track->par->block_align ?
track->par->block_align : 4);