Skip to content

Commit c1385d8

Browse files
committed
avformat/movenc: Check for extradata before writing moov tag
1 parent 71498f9 commit c1385d8

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

libavformat/movenc.c

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3121,10 +3121,29 @@ static void build_chunks(MOVTrack *trk)
31213121
}
31223122
}
31233123

3124+
static int copy_late_extradata(MOVTrack *track)
3125+
{
3126+
if (track->vos_len || !track->enc->extradata_size)
3127+
return 0;
3128+
3129+
if (TAG_IS_AVCI(track->tag) || track->enc->codec_id == AV_CODEC_ID_DNXHD)
3130+
return 0;
3131+
3132+
track->vos_len = track->enc->extradata_size;
3133+
track->vos_data = av_malloc(track->vos_len);
3134+
3135+
if (!track->vos_data)
3136+
return AVERROR(ENOMEM);
3137+
3138+
memcpy(track->vos_data, track->enc->extradata, track->vos_len);
3139+
3140+
return 0;
3141+
}
3142+
31243143
static int mov_write_moov_tag(AVIOContext *pb, MOVMuxContext *mov,
31253144
AVFormatContext *s)
31263145
{
3127-
int i;
3146+
int i, ret;
31283147
int64_t pos = avio_tell(pb);
31293148
avio_wb32(pb, 0); /* size placeholder*/
31303149
ffio_wfourcc(pb, "moov");
@@ -3136,6 +3155,9 @@ static int mov_write_moov_tag(AVIOContext *pb, MOVMuxContext *mov,
31363155
mov->tracks[i].time = mov->time;
31373156
mov->tracks[i].track_id = i + 1;
31383157

3158+
if (ret = copy_late_extradata(&mov->tracks[i]))
3159+
return ret;
3160+
31393161
if (mov->tracks[i].entry)
31403162
build_chunks(&mov->tracks[i]);
31413163
}
@@ -3169,7 +3191,7 @@ static int mov_write_moov_tag(AVIOContext *pb, MOVMuxContext *mov,
31693191
mov_write_iods_tag(pb, mov);
31703192
for (i = 0; i < mov->nb_streams; i++) {
31713193
if (mov->tracks[i].entry > 0 || mov->flags & FF_MOV_FLAG_FRAGMENT) {
3172-
int ret = mov_write_trak_tag(pb, mov, &(mov->tracks[i]), i < s->nb_streams ? s->streams[i] : NULL);
3194+
ret = mov_write_trak_tag(pb, mov, &(mov->tracks[i]), i < s->nb_streams ? s->streams[i] : NULL);
31733195
if (ret < 0)
31743196
return ret;
31753197
}

0 commit comments

Comments
 (0)