ffmpeg: reduce allowed mp4/mov a/v skew to 4 seconds
authorJoakim Plate <elupus@ecce.se>
Thu, 25 Oct 2012 20:15:54 +0000 (22:15 +0200)
committerJoakim Plate <elupus@ecce.se>
Thu, 25 Oct 2012 20:21:16 +0000 (22:21 +0200)
Our video queue's are not guaranteed to handle exactly 8 seconds
it can be a small amount less. For files that are not interleaved
this meant we we unable to get proper playback

This closes ticket #13176

lib/ffmpeg/libavformat/mov.c
lib/ffmpeg/patches/0014-changed-allow-4-second-skew-between-streams-in-mov-b.patch [new file with mode: 0644]
lib/ffmpeg/patches/0014-changed-allow-8-second-skew-between-streams-in-mov-b.patch [deleted file]

index 0f9836c..f5173e1 100644 (file)
@@ -2763,8 +2763,8 @@ static AVIndexEntry *mov_find_next_sample(AVFormatContext *s, AVStream **st)
             if (!sample || (!s->pb->seekable && current_sample->pos < sample->pos) ||
                 (s->pb->seekable &&
                  ((msc->pb != s->pb && dts < best_dts) || (msc->pb == s->pb &&
-                 ((FFABS(best_dts - dts) <= 8*AV_TIME_BASE && current_sample->pos < sample->pos) ||
-                  (FFABS(best_dts - dts) > 8*AV_TIME_BASE && dts < best_dts)))))) {
+                 ((FFABS(best_dts - dts) <= 4*AV_TIME_BASE && current_sample->pos < sample->pos) ||
+                  (FFABS(best_dts - dts) > 4*AV_TIME_BASE && dts < best_dts)))))) {
                 sample = current_sample;
                 best_dts = dts;
                 *st = avst;
diff --git a/lib/ffmpeg/patches/0014-changed-allow-4-second-skew-between-streams-in-mov-b.patch b/lib/ffmpeg/patches/0014-changed-allow-4-second-skew-between-streams-in-mov-b.patch
new file mode 100644 (file)
index 0000000..be05ec0
--- /dev/null
@@ -0,0 +1,28 @@
+From 5cc735503bfe1242606f19638bffeb686dd4d1b5 Mon Sep 17 00:00:00 2001
+From: Joakim Plate <elupus@ecce.se>
+Date: Wed, 8 Dec 2010 14:03:43 +0000
+Subject: [PATCH 14/24] changed: allow 4 second skew between streams in mov
+ before attempting to seek
+
+---
+ libavformat/mov.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libavformat/mov.c b/libavformat/mov.c
+index 9da8eab..0f9836c 100644
+--- a/libavformat/mov.c
++++ b/libavformat/mov.c
+@@ -2763,8 +2763,8 @@ static AVIndexEntry *mov_find_next_sample(AVFormatContext *s, AVStream **st)
+             if (!sample || (!s->pb->seekable && current_sample->pos < sample->pos) ||
+                 (s->pb->seekable &&
+                  ((msc->pb != s->pb && dts < best_dts) || (msc->pb == s->pb &&
+-                 ((FFABS(best_dts - dts) <= AV_TIME_BASE && current_sample->pos < sample->pos) ||
+-                  (FFABS(best_dts - dts) > AV_TIME_BASE && dts < best_dts)))))) {
++                 ((FFABS(best_dts - dts) <= 4*AV_TIME_BASE && current_sample->pos < sample->pos) ||
++                  (FFABS(best_dts - dts) > 4*AV_TIME_BASE && dts < best_dts)))))) {
+                 sample = current_sample;
+                 best_dts = dts;
+                 *st = avst;
+-- 
+1.7.9.4
+
diff --git a/lib/ffmpeg/patches/0014-changed-allow-8-second-skew-between-streams-in-mov-b.patch b/lib/ffmpeg/patches/0014-changed-allow-8-second-skew-between-streams-in-mov-b.patch
deleted file mode 100644 (file)
index 80813c9..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-From 5cc735503bfe1242606f19638bffeb686dd4d1b5 Mon Sep 17 00:00:00 2001
-From: Joakim Plate <elupus@ecce.se>
-Date: Wed, 8 Dec 2010 14:03:43 +0000
-Subject: [PATCH 14/24] changed: allow 8 second skew between streams in mov
- before attempting to seek
-
----
- libavformat/mov.c |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/libavformat/mov.c b/libavformat/mov.c
-index 9da8eab..0f9836c 100644
---- a/libavformat/mov.c
-+++ b/libavformat/mov.c
-@@ -2763,8 +2763,8 @@ static AVIndexEntry *mov_find_next_sample(AVFormatContext *s, AVStream **st)
-             if (!sample || (!s->pb->seekable && current_sample->pos < sample->pos) ||
-                 (s->pb->seekable &&
-                  ((msc->pb != s->pb && dts < best_dts) || (msc->pb == s->pb &&
--                 ((FFABS(best_dts - dts) <= AV_TIME_BASE && current_sample->pos < sample->pos) ||
--                  (FFABS(best_dts - dts) > AV_TIME_BASE && dts < best_dts)))))) {
-+                 ((FFABS(best_dts - dts) <= 8*AV_TIME_BASE && current_sample->pos < sample->pos) ||
-+                  (FFABS(best_dts - dts) > 8*AV_TIME_BASE && dts < best_dts)))))) {
-                 sample = current_sample;
-                 best_dts = dts;
-                 *st = avst;
--- 
-1.7.9.4
-