summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--contrib/ffmpeg/A09-avformat-matroskadec-Fix-seeking.patch39
1 files changed, 39 insertions, 0 deletions
diff --git a/contrib/ffmpeg/A09-avformat-matroskadec-Fix-seeking.patch b/contrib/ffmpeg/A09-avformat-matroskadec-Fix-seeking.patch
new file mode 100644
index 000000000..0fba7fbbd
--- /dev/null
+++ b/contrib/ffmpeg/A09-avformat-matroskadec-Fix-seeking.patch
@@ -0,0 +1,39 @@
+From c294f38c91f440880ffd28fda0eeb1154431ab7e Mon Sep 17 00:00:00 2001
+From: Andreas Rheinhardt <[email protected]>
+Date: Sat, 17 Aug 2019 02:27:51 +0200
+Subject: [PATCH] avformat/matroskadec: Fix seeking
+
+matroska_reset_status (a function that is used during seeking (among
+other things)) used an int for the return value of avio_seek which
+returns an int64_t. Checking the return value then indicated an error
+even though the seek was successfull for targets in the range of
+2GB-4GB, 6GB-8GB, ... This error implied that the status hasn't been
+reset and in particular, the old level was still considered to be in
+force, so that ebml_parse returned errors because the newly parsed
+elements were of course not contained in the previously active and still
+wrongly considered active master element any more.
+
+Addresses ticket #8084.
+
+Signed-off-by: Andreas Rheinhardt <[email protected]>
+Signed-off-by: James Almer <[email protected]>
+---
+ libavformat/matroskadec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
+index 4e20f15792..1ea9b807e6 100644
+--- a/libavformat/matroskadec.c
++++ b/libavformat/matroskadec.c
+@@ -757,7 +757,7 @@ static int matroska_reset_status(MatroskaDemuxContext *matroska,
+ uint32_t id, int64_t position)
+ {
+ if (position >= 0) {
+- int err = avio_seek(matroska->ctx->pb, position, SEEK_SET);
++ int64_t err = avio_seek(matroska->ctx->pb, position, SEEK_SET);
+ if (err < 0)
+ return err;
+ }
+--
+2.21.0
+