@ -60,6 +60,7 @@ typedef struct FLVContext {
uint8_t resync_buffer [ 2 * RESYNC_BUFFER_SIZE ] ;
int broken_sizes ;
int sum_flv_tag_size ;
} FLVContext ;
static int probe ( AVProbeData * p , int live )
@ -629,6 +630,7 @@ static int flv_read_metabody(AVFormatContext *s, int64_t next_pos)
static int flv_read_header ( AVFormatContext * s )
{
int offset , flags ;
FLVContext * flv = s - > priv_data ;
avio_skip ( s - > pb , 4 ) ;
flags = avio_r8 ( s - > pb ) ;
@ -649,6 +651,7 @@ static int flv_read_header(AVFormatContext *s)
avio_skip ( s - > pb , 4 ) ;
s - > start_time = 0 ;
flv - > sum_flv_tag_size = 0 ;
return 0 ;
}
@ -857,6 +860,7 @@ retry:
type = ( avio_r8 ( s - > pb ) & 0x1F ) ;
orig_size =
size = avio_rb24 ( s - > pb ) ;
flv - > sum_flv_tag_size + = size + 11 ;
dts = avio_rb24 ( s - > pb ) ;
dts | = ( unsigned ) avio_r8 ( s - > pb ) < < 24 ;
av_log ( s , AV_LOG_TRACE , " type:%d, size:%d, last:%d, dts:% " PRId64 " pos:% " PRId64 " \n " , type , size , last , dts , avio_tell ( s - > pb ) ) ;
@ -1141,7 +1145,7 @@ retry_duration:
leave :
last = avio_rb32 ( s - > pb ) ;
if ( last ! = orig_size + 11 & &
( last ! = orig_size | | ! last ) & &
( last ! = orig_size | | ! last ) & & last ! = flv - > sum_flv_tag_size & &
! flv - > broken_sizes ) {
av_log ( s , AV_LOG_ERROR , " Packet mismatch %d %d \n " , last , orig_size + 11 ) ;
avio_seek ( s - > pb , pos + 1 , SEEK_SET ) ;