diff options
Diffstat (limited to 'contrib/ffmpeg/A09-mp4-64bit.patch')
-rw-r--r-- | contrib/ffmpeg/A09-mp4-64bit.patch | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/contrib/ffmpeg/A09-mp4-64bit.patch b/contrib/ffmpeg/A09-mp4-64bit.patch new file mode 100644 index 000000000..04fec6032 --- /dev/null +++ b/contrib/ffmpeg/A09-mp4-64bit.patch @@ -0,0 +1,46 @@ +From 68f89a1ec9ccef22268158640c1f62f0370f48ba Mon Sep 17 00:00:00 2001 +From: John Stebbins <[email protected]> +Date: Fri, 10 May 2013 09:12:54 -0700 +Subject: [PATCH 7/9] movenc: fix detection of 64bit offset requirement + +The old method doesn't work when moov is relocated to beginning of file +--- + libavformat/movenc.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/libavformat/movenc.c b/libavformat/movenc.c +index 7348cf8..2f6c003 100644 +--- a/libavformat/movenc.c ++++ b/libavformat/movenc.c +@@ -83,15 +83,25 @@ static int64_t update_size(AVIOContext *pb, int64_t pos) + return curpos - pos; + } + ++static int is_co64_required(const MOVTrack *track) ++{ ++ int i; ++ ++ for (i = 0; i < track->entry; i++) { ++ if (track->cluster[i].pos + track->data_offset > UINT32_MAX) ++ return 1; ++ } ++ return 0; ++} ++ + /* Chunk offset atom */ + static int mov_write_stco_tag(AVIOContext *pb, MOVTrack *track) + { + int i; +- int mode64 = 0; // use 32 bit size variant if possible ++ int mode64 = is_co64_required(track); // use 32 bit size variant if possible + int64_t pos = avio_tell(pb); + avio_wb32(pb, 0); /* size */ +- if (pos > UINT32_MAX) { +- mode64 = 1; ++ if (mode64) { + ffio_wfourcc(pb, "co64"); + } else + ffio_wfourcc(pb, "stco"); +-- +1.8.1.4 + |