[vlc-commits] commit: Fixed/improved support for video timestamp in mkv. (Laurent Aimar )

git at videolan.org git at videolan.org
Thu May 20 23:53:21 CEST 2010


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Thu May 20 22:52:46 2010 +0200| [9adcbb2f05007beae7e8faf33b28ac921f5aa592] | committer: Laurent Aimar 

Fixed/improved support for video timestamp in mkv.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9adcbb2f05007beae7e8faf33b28ac921f5aa592
---

 modules/demux/mkv/matroska_segment.cpp |    2 ++
 modules/demux/mkv/mkv.cpp              |    6 +++++-
 modules/demux/mkv/mkv.hpp              |    1 +
 3 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/modules/demux/mkv/matroska_segment.cpp b/modules/demux/mkv/matroska_segment.cpp
index 6153183..208e798 100644
--- a/modules/demux/mkv/matroska_segment.cpp
+++ b/modules/demux/mkv/matroska_segment.cpp
@@ -831,6 +831,7 @@ bool matroska_segment_c::Select( mtime_t i_start_time )
             tracks[i_track]->fmt.i_extra = tracks[i_track]->i_extra_data;
             tracks[i_track]->fmt.p_extra = xmalloc( tracks[i_track]->i_extra_data );
             memcpy( tracks[i_track]->fmt.p_extra,tracks[i_track]->p_extra_data, tracks[i_track]->i_extra_data );
+            tracks[i_track]->b_pts_only = true;
         }
         else if( !strncmp( tracks[i_track]->psz_codec, "V_REAL/RV", 9 ) )
         {
@@ -861,6 +862,7 @@ bool matroska_segment_c::Select( mtime_t i_start_time )
         else if( !strncmp( tracks[i_track]->psz_codec, "V_VP8", 5 ) )
         {
             tracks[i_track]->fmt.i_codec = VLC_CODEC_VP8;
+            tracks[i_track]->b_pts_only = true;
         }
         else if( !strncmp( tracks[i_track]->psz_codec, "V_MPEG4", 7 ) )
         {
diff --git a/modules/demux/mkv/mkv.cpp b/modules/demux/mkv/mkv.cpp
index 3378023..c90e50f 100644
--- a/modules/demux/mkv/mkv.cpp
+++ b/modules/demux/mkv/mkv.cpp
@@ -589,6 +589,11 @@ void BlockDecode( demux_t *p_demux, KaxBlock *block, KaxSimpleBlock *simpleblock
                 p_block->i_pts = VLC_TS_INVALID;
                 p_block->i_dts = i_pts;
             }
+            else if( tk->b_pts_only )
+            {
+                p_block->i_pts = i_pts;
+                p_block->i_dts = i_pts;
+            }
             else
             {
                 p_block->i_pts = i_pts;
@@ -596,7 +601,6 @@ void BlockDecode( demux_t *p_demux, KaxBlock *block, KaxSimpleBlock *simpleblock
                     p_block->i_dts = p_block->i_pts;
                 else
                     p_block->i_dts = min( i_pts, tk->i_last_dts + (mtime_t)(tk->i_default_duration >> 10));
-                p_sys->i_pts = p_block->i_dts;
             }
         }
         tk->i_last_dts = p_block->i_dts;
diff --git a/modules/demux/mkv/mkv.hpp b/modules/demux/mkv/mkv.hpp
index 76407db..9928dc5 100644
--- a/modules/demux/mkv/mkv.hpp
+++ b/modules/demux/mkv/mkv.hpp
@@ -187,6 +187,7 @@ typedef struct
 
     char         *psz_codec;
     bool         b_dts_only;
+    bool         b_pts_only;
 
     uint64_t     i_default_duration;
     float        f_timecodescale;



More information about the vlc-commits mailing list