* asf.c : ASFv01 file input module for vlc
*****************************************************************************
* Copyright (C) 2001 VideoLAN
- * $Id: asf.c,v 1.3 2002/10/28 11:49:57 fenrir Exp $
+ * $Id: asf.c,v 1.4 2002/11/10 16:31:20 fenrir Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
i_packet_send_time = GetDWLE( p_peek + i_skip ); i_skip += 4;
i_packet_duration = GetWLE( p_peek + i_skip ); i_skip += 2;
- i_packet_size_left = i_packet_length; // XXX données reellement lu
-
+// i_packet_size_left = i_packet_length; // XXX données reellement lu
+ /* FIXME I have to do that for some file, I don't known why */
+ i_packet_size_left = i_data_packet_min;
+
if( b_packet_multiple_payload )
{
i_payload_count = p_peek[i_skip] & 0x3f;
i_media_object_offset = i_tmp;
}
+ i_pts = __MAX( i_pts - p_demux->p_fp->i_preroll * 1000, 0 );
if( b_packet_multiple_payload )
{
ASF_SkipBytes( p_input, i_data_packet_min );
} // loop over packet
-
p_demux->i_time = 0;
for( i = 0; i < 128 ; i++ )
{
}
#undef p_stream
}
-
+
return( 1 );
}
* libasf.c :
*****************************************************************************
* Copyright (C) 2001 VideoLAN
- * $Id: libasf.c,v 1.4 2002/11/08 10:26:53 gbazin Exp $
+ * $Id: libasf.c,v 1.5 2002/11/10 16:31:20 fenrir Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
{
off_t i_filepos;
- if( i_pos >= p_input->stream.p_selected_area->i_size )
+ i_filepos = ASF_TellAbsolute( p_input );
+ if( i_pos == i_filepos )
{
- return( 0 );
+ return( 1 );
}
-
- i_filepos = ASF_TellAbsolute( p_input );
- if( i_pos != i_filepos )
+
+ if( p_input->stream.b_seekable &&
+ p_input->stream.i_method != INPUT_METHOD_NETWORK )
{
p_input->pf_seek( p_input, i_pos );
input_AccessReinit( p_input );
+ return( 1 );
}
- return( 1 );
+ else if( i_pos > i_filepos )
+ {
+ u64 i_size = i_pos - i_filepos;
+ do
+ {
+ data_packet_t *p_data;
+ int i_read;
+
+ i_read =
+ input_SplitBuffer(p_input, &p_data, __MIN( i_size, 1024 ) );
+ if( i_read <= 0 )
+ {
+ return( 0 );
+ }
+ input_DeletePacket( p_input->p_method_data, p_data );
+ i_size -= i_read;
+
+ } while( i_size > 0 );
+
+ return( 1 );
+ }
+ else
+ {
+ msg_Err( p_input, "cannot seek" );
+ return( 0 );
+ }
}
/* return 1 if success, 0 if fail */
{
return( 0 ); /* failed */
}
- if( p_obj->common.p_father )
+ if( p_obj->common.p_father && p_obj->common.p_father->common.i_object_size != 0 )
{
if( p_obj->common.p_father->common.i_object_pos + p_obj->common.p_father->common.i_object_size <
p_obj->common.i_object_pos + p_obj->common.i_object_size + 24 )