summaryrefslogtreecommitdiffstats
path: root/contrib/ffmpeg/A09-mp4-64bit.patch
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ffmpeg/A09-mp4-64bit.patch')
-rw-r--r--contrib/ffmpeg/A09-mp4-64bit.patch46
1 files changed, 46 insertions, 0 deletions
diff --git a/contrib/ffmpeg/A09-mp4-64bit.patch b/contrib/ffmpeg/A09-mp4-64bit.patch
index e69de29bb..04fec6032 100644
--- a/contrib/ffmpeg/A09-mp4-64bit.patch
+++ 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
+