summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjstebbins <[email protected]>2011-03-11 15:26:31 +0000
committerjstebbins <[email protected]>2011-03-11 15:26:31 +0000
commit483648b11af3d0c9b3de4bfc6d7d4b6b0b125e1a (patch)
treea223dd2b6948173acb569974f581f2eebbdcb53a
parent94b58a7b733fac763a8b9c8d4a3f9348540d47aa (diff)
Fix mkv timestamps that derive from SimpleBlock and default track duration.
Since I've gotten no response to this patch yet on ffmpeg-devel, I'm committing it here till someone has the time to look at it. When a SimpleBlock has lacing (multiple frames in a block) the duration of each frame should come from the default track duration. An initialization error in ffmpeg causes them to set the duration to 0 which triggers code higher in the stack to estimate the duration based on bitrate and frame size. This is wildly inaccurate and leads to very bad timestamps. Fixes issues with MakeMKV audio timestamps. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3835 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r--contrib/ffmpeg/A00-mkv-simpleblock.patch13
1 files changed, 13 insertions, 0 deletions
diff --git a/contrib/ffmpeg/A00-mkv-simpleblock.patch b/contrib/ffmpeg/A00-mkv-simpleblock.patch
new file mode 100644
index 000000000..9d24799ef
--- /dev/null
+++ b/contrib/ffmpeg/A00-mkv-simpleblock.patch
@@ -0,0 +1,13 @@
+diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
+index a356611..0b35f15 100644
+--- a/libavformat/matroskadec.c
++++ b/libavformat/matroskadec.c
+@@ -1852,6 +1852,8 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
+ for (i=0; i<blocks_list->nb_elem; i++)
+ if (blocks[i].bin.size > 0 && blocks[i].bin.data) {
+ int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1;
++ if (!blocks[i].non_simple)
++ blocks[i].duration = AV_NOPTS_VALUE;
+ res=matroska_parse_block(matroska,
+ blocks[i].bin.data, blocks[i].bin.size,
+ blocks[i].bin.pos, cluster.timecode,