*****************************************************************************/
#include "Ebml_parser.hpp"
+#include "stream_io_callback.hpp"
/*****************************************************************************
* Ebml Stream parser
}
m_got = NULL;
mb_keep = false;
- if ( m_el[1]->GetElementPosition() == i_cluster_pos )
+ if ( m_el[1] && m_el[1]->GetElementPosition() == i_cluster_pos )
{
m_es->I_O().setFilePointer( i_block_pos, seek_beginning );
return (EbmlMaster*) m_el[1];
}
mb_keep = false;
}
-
- m_el[mi_level] = m_es->FindNextElement( EBML_CONTEXT(m_el[mi_level - 1]), i_ulev, 0xFFFFFFFFL, mb_dummy != 0, 1 );
+ vlc_stream_io_callback & io_stream = (vlc_stream_io_callback &) m_es->I_O();
+ uint64 i_size = io_stream.toRead();
+ m_el[mi_level] = m_es->FindNextElement( EBML_CONTEXT(m_el[mi_level - 1]), i_ulev, i_size, mb_dummy != 0, 1 );
// mi_remain_size[mi_level] = m_el[mi_level]->GetSize();
if( i_ulev > 0 )
{
return 0;
}
+uint64 vlc_stream_io_callback::toRead( void )
+{
+ uint64_t i_size;
+
+ if( s == NULL)
+ return 0;
+
+ stream_Control( s, STREAM_GET_SIZE, &i_size );
+
+ if( i_size == 0 )
+ return 0xFFFFFFFFL;
+
+ return (uint64) i_size - stream_Tell( s );
+}
+
virtual size_t write ( const void *p_buffer, size_t i_size);
virtual uint64 getFilePointer ( void );
virtual void close ( void ) { return; }
+ uint64 toRead ( void );
};