diff options
author | Felicia Lim <flim@google.com> | 2024-07-09 15:23:43 -0700 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2024-07-18 23:27:20 -0300 |
commit | 180c869faf96dbf1396fa3aba43b7488f9a7090b (patch) | |
tree | ba310d9bd6cfbc21252b8d97392733937aa525a2 /libavformat/movenc.c | |
parent | 3de65f47e0cd4c971cc78901c213210e6ba26abd (diff) | |
download | ffmpeg-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.c | 10 |
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); |