EbmlStream *m_es;
int mi_level;
EbmlElement *m_el[10];
- int64_t mi_remain_size[10];
+ int64_t mi_remain_size[10];
EbmlElement *m_got;
int mi_user_level;
vlc_bool_t mb_keep;
- vlc_bool_t mb_dummy;
+ vlc_bool_t mb_dummy;
};
matroska_segment_t *p_segment1 = new matroska_segment_t( *this, *p_estream );
b_keep_segment = false;
- ep = new EbmlParser(p_estream, p_l0, &demuxer );
+ ep = new EbmlParser(p_estream, p_l0, &demuxer );
p_segment1->ep = ep;
p_segment1->segment = (KaxSegment*)p_l0;
}
sys.i_start_pts = i_start_time;
- ep->Reset( &sys.demuxer );
-
// reset the stream reading to the first cluster of the segment used
es.I_O().setFilePointer( i_start_pos );
+ delete ep;
+ ep = new EbmlParser( &es, segment, &sys.demuxer );
+
return true;
}
}
#undef tk
}
+ delete ep;
+ ep = NULL;
}
bool virtual_segment_t::Select( input_title_t & title )
for( ;; )
{
- if ( p_sys->demuxer.b_die )
- return 0;
+ if ( p_sys->demuxer.b_die )
+ return 0;
if( p_sys->i_pts >= p_sys->i_start_pts )
p_vsegment->UpdateCurrentToChapter( *p_demux );
m_es = es;
m_got = NULL;
m_el[0] = el_start;
- mi_remain_size[0] = el_start->GetSize();
+ mi_remain_size[0] = el_start->GetSize();
for( i = 1; i < 6; i++ )
{
mi_level = 1;
mi_user_level = 1;
mb_keep = VLC_FALSE;
- mb_dummy = config_GetInt( p_demux, "mkv-use-dummy" );
+ mb_dummy = config_GetInt( p_demux, "mkv-use-dummy" );
}
EbmlParser::~EbmlParser( void )
#else
m_es->I_O().setFilePointer( m_el[0]->GetElementPosition() + m_el[0]->ElementSize(true) - m_el[0]->GetSize() );
#endif
- mb_dummy = config_GetInt( p_demux, "mkv-use-dummy" );
+ mb_dummy = config_GetInt( p_demux, "mkv-use-dummy" );
}
EbmlElement *EbmlParser::Get( void )
mb_keep = VLC_FALSE;
}
- m_el[mi_level] = m_es->FindNextElement( m_el[mi_level - 1]->Generic().Context, i_ulev, 0xFFFFFFFFL, mb_dummy, 1 );
-// mi_remain_size[mi_level] = m_el[mi_level]->GetSize();
+ m_el[mi_level] = m_es->FindNextElement( m_el[mi_level - 1]->Generic().Context, i_ulev, 0xFFFFFFFFL, mb_dummy, 1 );
+// mi_remain_size[mi_level] = m_el[mi_level]->GetSize();
if( i_ulev > 0 )
{
while( i_ulev > 0 )
return;
}
- ep = new EbmlParser( &es, cues, &sys.demuxer );
+ ep = new EbmlParser( &es, cues, &sys.demuxer );
while( ( el = ep->Get() ) != NULL )
{
if( MKV_IS_ID( el, KaxCuePoint ) )
}
msg_Dbg( &sys.demuxer, "Tags" );
- ep = new EbmlParser( &es, tags, &sys.demuxer );
+ ep = new EbmlParser( &es, tags, &sys.demuxer );
while( ( el = ep->Get() ) != NULL )
{
if( MKV_IS_ID( el, KaxTag ) )
msg_Dbg( &sys.demuxer, "seek got "I64Fd" (%d%%)",
i_seek_time, (int)( 100 * i_seek_position / stream_Size( sys.demuxer.s ) ) );
+ es.I_O().setFilePointer( i_seek_position, seek_beginning );
+
delete ep;
- ep = new EbmlParser( &es, segment, &sys.demuxer );
+ ep = new EbmlParser( &es, segment, &sys.demuxer );
cluster = NULL;
- es.I_O().setFilePointer( i_seek_position, seek_beginning );
-
sys.i_start_pts = i_date;
es_out_Control( sys.demuxer.out, ES_OUT_RESET_PCR );