@ -559,10 +559,9 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
*
* @ return < 0 in case of an error
*/
static int asf_get_packet ( AVFormatContext * s )
static int asf_get_packet ( AVFormatContext * s , ByteIOContext * pb )
{
ASFContext * asf = s - > priv_data ;
ByteIOContext * pb = s - > pb ;
uint32_t packet_length , padsize ;
int rsize = 8 ;
int c , d , e , off ;
@ -634,9 +633,8 @@ static int asf_get_packet(AVFormatContext *s)
*
* @ return < 0 if error
*/
static int asf_read_frame_header ( AVFormatContext * s ) {
static int asf_read_frame_header ( AVFormatContext * s , ByteIOContext * pb ) {
ASFContext * asf = s - > priv_data ;
ByteIOContext * pb = s - > pb ;
int rsize = 1 ;
int num = get_byte ( pb ) ;
int64_t ts0 , ts1 ;
@ -711,11 +709,10 @@ static int asf_read_frame_header(AVFormatContext *s){
* @ returns 0 if data was stored in pkt , < 0 on error or 1 if more ASF
* packets need to be loaded ( through asf_get_packet ( ) )
*/
static int asf_parse_packet ( AVFormatContext * s , AVPacket * pkt )
static int asf_parse_packet ( AVFormatContext * s , ByteIOContext * pb , AVPacket * pkt )
{
ASFContext * asf = s - > priv_data ;
ASFStream * asf_st = 0 ;
ByteIOContext * pb = s - > pb ;
for ( ; ; ) {
if ( url_feof ( pb ) )
return AVERROR ( EIO ) ;
@ -735,7 +732,7 @@ static int asf_parse_packet(AVFormatContext *s, AVPacket *pkt)
return 1 ;
}
if ( asf - > packet_time_start = = 0 ) {
if ( asf_read_frame_header ( s ) < 0 ) {
if ( asf_read_frame_header ( s , s - > pb ) < 0 ) {
asf - > packet_segments = 0 ;
continue ;
}
@ -887,9 +884,9 @@ static int asf_read_packet(AVFormatContext *s, AVPacket *pkt)
int ret ;
/* parse cached packets, if any */
if ( ( ret = asf_parse_packet ( s , pkt ) ) < = 0 )
if ( ( ret = asf_parse_packet ( s , s - > pb , pkt ) ) < = 0 )
return ret ;
if ( ( ret = asf_get_packet ( s ) ) < 0 )
if ( ( ret = asf_get_packet ( s , s - > pb ) ) < 0 )
assert ( asf - > packet_size_left < FRAME_HEADER_SIZE | | asf - > packet_segments < 1 ) ;
asf - > packet_time_start = 0 ;
}