[FFmpeg-devel] [PATCH 1/2] avformat/mov: ensure the IAMF track is the first

James Almer jamrial at gmail.com
Thu Aug 1 15:35:31 EEST 2024


On 8/1/2024 5:59 AM, Anton Khirnov wrote:
> Quoting James Almer (2024-08-01 04:14:09)
>> Fixes crashes when muxing video tracks alongside IAMF ones.
>>
>> Signed-off-by: James Almer <jamrial at gmail.com>
>> ---
>>   libavformat/movenc.c | 11 ++++++++++-
>>   1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
>> index ae49582a1a..87ec368d52 100644
>> --- a/libavformat/movenc.c
>> +++ b/libavformat/movenc.c
>> @@ -7536,6 +7536,7 @@ static int mov_init_iamf_track(AVFormatContext *s)
>>       if (!track->iamf)
>>           return AVERROR(ENOMEM);
>>   
>> +    track->first_iamf_idx = INT_MAX;
>>       for (int i = 0; i < s->nb_stream_groups; i++) {
>>           const AVStreamGroup *stg = s->stream_groups[i];
>>           switch(stg->type) {
>> @@ -7558,6 +7559,11 @@ static int mov_init_iamf_track(AVFormatContext *s)
>>               return ret;
>>       }
>>   
>> +    if (track->first_iamf_idx != 0) {
>> +        av_log(s, AV_LOG_ERROR, "The IMAF track must be the first track\n");
> 
> Why? And is this documented anywhere?

Just comments in the code. The reason i wrote it this way is because i 
parse the stream groups first, then the remaining streams, and generate 
the tracks in that order, as it was the simplest, least invasive way 
(The muxer handled streams and tracks as separate concepts with 
potentially different count for each of them even before iamf).

I could look into changing it, but it may require some restructuring. In 
the meantime the muxer should not crash when you mix video tracks with 
iamf tracks. More so considering we need something easy to backport to 7.0.


More information about the ffmpeg-devel mailing list