Commit 3a0a0ec7 authored by Steve Lhomme's avatar Steve Lhomme
Browse files

* mkv.cpp: fix chapter sorting by timecode, apply the right PTS/DTS timecodes from the container

parent 24f97b46
...@@ -953,9 +953,9 @@ public: ...@@ -953,9 +953,9 @@ public:
std::vector<chapter_codec_cmds_c*> codecs; std::vector<chapter_codec_cmds_c*> codecs;
bool operator<( const chapter_item_c & item ) const static bool CompareTimecode( const chapter_item_c * & itemA, const chapter_item_c * & itemB )
{ {
return ( i_user_start_time < item.i_user_start_time || (i_user_start_time == item.i_user_start_time && i_user_end_time < item.i_user_end_time) ); return ( itemA->i_user_start_time < itemB->i_user_start_time || (itemA->i_user_start_time == itemB->i_user_start_time && itemA->i_user_end_time < itemB->i_user_end_time) );
} }
bool Enter( bool b_do_subchapters ); bool Enter( bool b_do_subchapters );
...@@ -1880,21 +1880,23 @@ static void BlockDecode( demux_t *p_demux, KaxBlock *block, mtime_t i_pts, ...@@ -1880,21 +1880,23 @@ static void BlockDecode( demux_t *p_demux, KaxBlock *block, mtime_t i_pts,
} }
return; return;
} }
// TODO implement correct timestamping when B frames are used // correct timestamping when B frames are used
#if 0
if( tk->fmt.i_cat != VIDEO_ES ) if( tk->fmt.i_cat != VIDEO_ES )
{ {
p_block->i_dts = p_block->i_pts = i_pts; p_block->i_dts = p_block->i_pts = i_pts;
} }
else else
{ {
p_block->i_pts = i_pts; if( !strcmp( tk->psz_codec, "V_MS/VFW/FOURCC" ) )
{
p_block->i_pts = 0;
}
else
{
p_block->i_pts = i_pts;
}
p_block->i_dts = p_sys->i_pts; p_block->i_dts = p_sys->i_pts;
} }
#else
p_block->i_pts = i_pts;
p_block->i_dts = p_sys->i_last_dts;
#endif
#if 0 #if 0
msg_Dbg( p_demux, "block i_dts: "I64Fd" / i_pts: "I64Fd, p_block->i_dts, p_block->i_pts); msg_Dbg( p_demux, "block i_dts: "I64Fd" / i_pts: "I64Fd, p_block->i_dts, p_block->i_pts);
...@@ -1903,10 +1905,6 @@ msg_Dbg( p_demux, "block i_dts: "I64Fd" / i_pts: "I64Fd, p_block->i_dts, p_block ...@@ -1903,10 +1905,6 @@ msg_Dbg( p_demux, "block i_dts: "I64Fd" / i_pts: "I64Fd, p_block->i_dts, p_block
{ {
p_block->i_length = i_duration * 1000; p_block->i_length = i_duration * 1000;
} }
if( !strcmp( tk->psz_codec, "V_MS/VFW/FOURCC" ) )
{
p_block->i_pts = 0;
}
es_out_Send( p_demux->out, tk->p_es, p_block ); es_out_Send( p_demux->out, tk->p_es, p_block );
...@@ -4801,7 +4799,8 @@ int64_t chapter_item_c::RefreshChapters( bool b_ordered, int64_t i_prev_user_tim ...@@ -4801,7 +4799,8 @@ int64_t chapter_item_c::RefreshChapters( bool b_ordered, int64_t i_prev_user_tim
} }
else else
{ {
std::sort( sub_chapters.begin(), sub_chapters.end() ); if ( sub_chapters.begin() != sub_chapters.end() )
std::sort( sub_chapters.begin(), sub_chapters.end(), chapter_item_c::CompareTimecode );
i_user_start_time = i_start_time; i_user_start_time = i_start_time;
if ( i_end_time != -1 ) if ( i_end_time != -1 )
i_user_end_time = i_end_time; i_user_end_time = i_end_time;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment