[FFmpeg-devel] [PATCH] avformat/movenc: use stream indexes when generating track ids
Marton Balint
cus at passwd.hu
Sun Aug 11 22:05:26 EEST 2024
On Sat, 3 Aug 2024, James Almer wrote:
> In some scenarios nb_tracks isn't the same as nb_streams, so a given id may end
> up being used for two separate streams.
>
> e.g. when muxing an IAMF track followed by a video track, if the IAMF track
> consists of several streams, the video track would end up having an id of 2,
> which may also be used by one of the IAMF streams.
>
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> libavformat/movenc.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index 8e4a037e46..8d91059081 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -4944,11 +4944,15 @@ static int mov_setup_track_ids(MOVMuxContext *mov, AVFormatContext *s)
> mov->tracks[i].track_id = i >= mov->nb_streams ? ++next_generated_track_id : mov->tracks[i].st->id;
> }
> } else {
> + int last_track_id = 0;
> for (i = 0; i < mov->nb_tracks; i++) {
> if (mov->tracks[i].entry <= 0 && !(mov->flags & FF_MOV_FLAG_FRAGMENT))
> continue;
>
> - mov->tracks[i].track_id = i + 1;
> + last_track_id =
> + mov->tracks[i].track_id = (mov->tracks[i].st
> + ? FFMAX(mov->tracks[i].st->index, last_track_id)
> + : FFMAX((i ? mov->tracks[i - 1].track_id : i), last_track_id)) + 1;
Are you sure mov->tracks[i-1].track_id is always initialized? Because
there is a condition above which can skip certain tracks. Maybe it would
be safer to use last_track_id instead of mov->tracks[i-1].track_id ?
Thanks,
Marton
More information about the ffmpeg-devel
mailing list