|
|
|
@@ -2863,20 +2863,22 @@ static int mov_write_trailer(AVFormatContext *s) |
|
|
|
int64_t moov_pos = avio_tell(pb); |
|
|
|
|
|
|
|
if (!(mov->flags & FF_MOV_FLAG_FRAGMENT)) { |
|
|
|
/* Write size of mdat tag */ |
|
|
|
if (mov->mdat_size+8 <= UINT32_MAX) { |
|
|
|
avio_seek(pb, mov->mdat_pos, SEEK_SET); |
|
|
|
avio_wb32(pb, mov->mdat_size+8); |
|
|
|
} else { |
|
|
|
/* overwrite 'wide' placeholder atom */ |
|
|
|
avio_seek(pb, mov->mdat_pos - 8, SEEK_SET); |
|
|
|
avio_wb32(pb, 1); /* special value: real atom size will be 64 bit value after tag field */ |
|
|
|
ffio_wfourcc(pb, "mdat"); |
|
|
|
avio_wb64(pb, mov->mdat_size+16); |
|
|
|
} |
|
|
|
avio_seek(pb, moov_pos, SEEK_SET); |
|
|
|
/* Write size of mdat tag */ |
|
|
|
if (mov->mdat_size + 8 <= UINT32_MAX) { |
|
|
|
avio_seek(pb, mov->mdat_pos, SEEK_SET); |
|
|
|
avio_wb32(pb, mov->mdat_size + 8); |
|
|
|
} else { |
|
|
|
/* overwrite 'wide' placeholder atom */ |
|
|
|
avio_seek(pb, mov->mdat_pos - 8, SEEK_SET); |
|
|
|
/* special value: real atom size will be 64 bit value after |
|
|
|
* tag field */ |
|
|
|
avio_wb32(pb, 1); |
|
|
|
ffio_wfourcc(pb, "mdat"); |
|
|
|
avio_wb64(pb, mov->mdat_size + 16); |
|
|
|
} |
|
|
|
avio_seek(pb, moov_pos, SEEK_SET); |
|
|
|
|
|
|
|
mov_write_moov_tag(pb, mov, s); |
|
|
|
mov_write_moov_tag(pb, mov, s); |
|
|
|
} else { |
|
|
|
mov_flush_fragment(s); |
|
|
|
mov_write_mfra_tag(pb, mov); |
|
|
|
|