@ -47,6 +47,7 @@
# define CHUNK_SHUTDOWN 0x0004
# define CHUNK_END 0x0005
/* these last types are used internally */
# define CHUNK_HAVE_PACKET 0xFFFB
# define CHUNK_DONE 0xFFFC
# define CHUNK_NOMEM 0xFFFD
# define CHUNK_EOF 0xFFFE
@ -154,7 +155,7 @@ static int load_ipmovie_packet(IPMVEContext *s, AVIOContext *pb,
av_log ( s - > avf , AV_LOG_TRACE , " sending audio frame with pts % " PRId64 " (%d audio frames) \n " ,
pkt - > pts , s - > audio_frame_count ) ;
chunk_type = CHUNK_VIDEO ;
chunk_type = CHUNK_HAVE_PACKET ;
} else if ( s - > frame_format ) {
@ -230,7 +231,7 @@ static int load_ipmovie_packet(IPMVEContext *s, AVIOContext *pb,
s - > video_pts + = s - > frame_pts_inc ;
chunk_type = CHUNK_VIDEO ;
chunk_type = CHUNK_HAVE_PACKET ;
} else {
@ -602,10 +603,6 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb,
/* make a note of where the stream is sitting */
s - > next_chunk_offset = avio_tell ( pb ) ;
/* dispatch the first of any pending packets */
if ( ( chunk_type = = CHUNK_VIDEO ) | | ( chunk_type = = CHUNK_AUDIO_ONLY ) )
chunk_type = load_ipmovie_packet ( s , pb , pkt ) ;
return chunk_type ;
}
@ -658,8 +655,7 @@ static int ipmovie_read_header(AVFormatContext *s)
ipmovie - > palette [ i ] = 0xFFU < < 24 ;
/* process the first chunk which should be CHUNK_INIT_VIDEO */
if ( process_ipmovie_chunk ( ipmovie , pb , & pkt ) ! = CHUNK_INIT_VIDEO ) {
av_packet_unref ( & pkt ) ;
if ( process_ipmovie_chunk ( ipmovie , pb , NULL ) ! = CHUNK_INIT_VIDEO ) {
return AVERROR_INVALIDDATA ;
}
@ -708,6 +704,10 @@ static int ipmovie_read_packet(AVFormatContext *s,
for ( ; ; ) {
ret = process_ipmovie_chunk ( ipmovie , pb , pkt ) ;
/* dispatch the first of any pending packets */
if ( ( ret = = CHUNK_VIDEO ) | | ( ret = = CHUNK_AUDIO_ONLY ) )
ret = load_ipmovie_packet ( ipmovie , pb , pkt ) ;
if ( ret = = CHUNK_BAD )
ret = AVERROR_INVALIDDATA ;
else if ( ret = = CHUNK_EOF )
@ -716,7 +716,7 @@ static int ipmovie_read_packet(AVFormatContext *s,
ret = AVERROR ( ENOMEM ) ;
else if ( ret = = CHUNK_END | | ret = = CHUNK_SHUTDOWN )
ret = AVERROR_EOF ;
else if ( ret = = CHUNK_VIDEO )
else if ( ret = = CHUNK_HAVE_PACKET )
ret = 0 ;
else if ( ret = = CHUNK_INIT_VIDEO | | ret = = CHUNK_INIT_AUDIO )
continue ;