]> git.sesse.net Git - vlc/commitdiff
demux: mkv: handle 0 trailed DTS samples (fix #12725)
authorFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 9 Feb 2015 15:56:43 +0000 (16:56 +0100)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 9 Feb 2015 15:58:53 +0000 (16:58 +0100)
Sounds like a broken encoder (growing frame size from N-1 to N twice)

modules/demux/Makefile.am
modules/demux/mkv/mkv.cpp

index b9411595ec9b3f6bbc0aa66238d8401bd03fb8d2..77191a48cdcbd2d55e1a1c88d07ced50e4d69c85 100644 (file)
@@ -180,6 +180,7 @@ libmkv_plugin_la_SOURCES = \
        demux/mp4/libmp4.c demux/vobsub.h \
        demux/mkv/mkv.hpp demux/mkv/mkv.cpp \
        demux/windows_audio_commons.h
+libmkv_plugin_la_SOURCES += codec/dts_header.h codec/dts_header.c
 libmkv_plugin_la_CPPFLAGS = $(AM_CPPFLAGS)
 libmkv_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(demuxdir)'
 libmkv_plugin_la_LIBADD = $(LIBS_mkv)
index 5868ca19bba27f98955f8083faae9823e3e20a74..b99b898367833151b0699aa1fd3517fd828e9594 100644 (file)
 
 #include "stream_io_callback.hpp"
 
+extern "C" {
+#include "../../modules/codec/dts_header.h"
+}
+
 #include <vlc_fs.h>
 #include <vlc_url.h>
 
@@ -606,6 +610,20 @@ void BlockDecode( demux_t *p_demux, KaxBlock *block, KaxSimpleBlock *simpleblock
                 VLC_TS_INVALID;
             continue;
          }
+
+        case VLC_CODEC_DTS:
+            /* Check if packetization is correct and without padding.
+             * example: Test_mkv_div3_DTS_1920x1080_1785Kbps_23,97fps.mkv */
+            if( p_block->i_buffer > 6 )
+            {
+                unsigned int a, b, c, d;
+                bool e;
+                int i_frame_size = GetSyncInfo( p_block->p_buffer, &e, &a, &b, &c, &d );
+                if( i_frame_size > 0 )
+                    p_block->i_buffer = __MIN(p_block->i_buffer, (size_t)i_frame_size);
+            }
+            break;
+
          case VLC_CODEC_OPUS:
             mtime_t i_length = i_duration * tk-> f_timecodescale *
                     (double) p_segment->i_timescale / 1000.0;