vlc_object_detach( s );
if( p_sys->method == Block ) block_ChainRelease( p_sys->block.p_first );
+ else if ( p_sys->method == Immediate ) free( p_sys->immediate.p_buffer );
else free( p_sys->stream.p_buffer );
free( p_sys->p_peek );
}
else
{
- /* Read enough data */
- while( p_sys->block.i_start + p_sys->block.i_size < i_pos )
+ do
{
+ /* Read and skip enough data */
if( AStreamRefillBlock( s ) )
return VLC_EGENERIC;
while( p_sys->block.p_current &&
- p_sys->i_pos + p_sys->block.p_current->i_buffer < i_pos )
+ p_sys->i_pos + p_sys->block.p_current->i_buffer - p_sys->block.i_offset < i_pos )
{
- p_sys->i_pos += p_sys->block.p_current->i_buffer;
+ p_sys->i_pos += p_sys->block.p_current->i_buffer - p_sys->block.i_offset;
p_sys->block.p_current = p_sys->block.p_current->p_next;
+ p_sys->block.i_offset = 0;
}
}
+ while( p_sys->block.i_start + p_sys->block.i_size < i_pos );
p_sys->block.i_offset = i_pos - p_sys->i_pos;
p_sys->i_pos = i_pos;