summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2023-04-15 20:37:44 +0200
committerMarton Balint <cus@passwd.hu>2023-04-24 23:00:50 +0200
commit8d8feea0a68e2a36b4a0556703774f5023c170ca (patch)
tree00d4d5cc6591bacf9272f31dcbb44539c7ab76f0 /libavformat
parent5cdbf817c978a75b1d840325727ed314b4f886a7 (diff)
downloadffmpeg-8d8feea0a68e2a36b4a0556703774f5023c170ca.tar.gz
avformat/movenc: factorize determining mdhd/mvhd/tkhd version
Also make duration check for mvhd more consistent with the others, write version 1 of mvhd if duration is at least INT32_MAX instead of UINT32_MAX. Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/movenc.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 946e79c5ac..a9c8e104f0 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -3269,14 +3269,20 @@ static int64_t calc_pts_duration(MOVMuxContext *mov, MOVTrack *track)
return end - start;
}
+static int mov_mdhd_mvhd_tkhd_version(MOVMuxContext *mov, MOVTrack *track, int64_t duration)
+{
+ if (track && track->mode == MODE_ISM)
+ return 1;
+ if (duration < INT32_MAX)
+ return 0;
+ return 1;
+}
+
static int mov_write_mdhd_tag(AVIOContext *pb, MOVMuxContext *mov,
MOVTrack *track)
{
int64_t duration = calc_samples_pts_duration(mov, track);
- int version = duration < INT32_MAX ? 0 : 1;
-
- if (track->mode == MODE_ISM)
- version = 1;
+ int version = mov_mdhd_mvhd_tkhd_version(mov, track, duration);
(version == 1) ? avio_wb32(pb, 44) : avio_wb32(pb, 32); /* size */
ffio_wfourcc(pb, "mdhd");
@@ -3362,8 +3368,6 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov,
else
duration *= mov->avif_loop_count;
- version = duration < INT32_MAX ? 0 : 1;
-
if (st) {
if (mov->per_stream_grouping)
group = st->index;
@@ -3379,8 +3383,7 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov,
if (track->flags & MOV_TRACK_ENABLED)
flags |= MOV_TKHD_FLAG_ENABLED;
- if (track->mode == MODE_ISM)
- version = 1;
+ version = mov_mdhd_mvhd_tkhd_version(mov, track, duration);
(version == 1) ? avio_wb32(pb, 104) : avio_wb32(pb, 92); /* size */
ffio_wfourcc(pb, "tkhd");
@@ -3863,7 +3866,7 @@ static int mov_write_mvhd_tag(AVIOContext *pb, MOVMuxContext *mov)
max_track_id = 1;
}
- version = max_track_len < UINT32_MAX ? 0 : 1;
+ version = mov_mdhd_mvhd_tkhd_version(mov, NULL, max_track_len);
avio_wb32(pb, version == 1 ? 120 : 108); /* size */
ffio_wfourcc(pb, "mvhd");