]> git.sesse.net Git - vlc/commitdiff
Fixed/improved support for video timestamp in mkv.
authorLaurent Aimar <fenrir@videolan.org>
Thu, 20 May 2010 20:52:46 +0000 (22:52 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Thu, 20 May 2010 21:51:26 +0000 (23:51 +0200)
modules/demux/mkv/matroska_segment.cpp
modules/demux/mkv/mkv.cpp
modules/demux/mkv/mkv.hpp

index 6153183cf68f133255161d41fb11df269c268b3a..208e798c20c11ed704352e44113c412629cf5e88 100644 (file)
@@ -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 ) )
         {
index 3378023df933fadacc861b70fdc4fa473d6827e4..c90e50f3800a771bd5e6d3ba4ba316d85d6f3ad8 100644 (file)
@@ -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;
index 76407db2c122b9f4707d34080355483136310afa..9928dc54cd06a9e5fa6de6bef9558a149e3e2d22 100644 (file)
@@ -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;