@ -121,20 +121,23 @@ static int h264_find_frame_end(H264ParseContext *p, const uint8_t *buf,
}
}
state = 7 ;
state = 7 ;
} else {
} else {
p - > parse_history [ p - > parse_history_count + + ] = buf [ i ] ;
if ( p - > parse_history_count > 5 ) {
unsigned int mb , last_mb = p - > parse_last_mb ;
unsigned int mb , last_mb = p - > parse_last_mb ;
GetBitContext gb ;
GetBitContext gb ;
p - > parse_history [ p - > parse_history_count + + ] = buf [ i ] ;
init_get_bits ( & gb , p - > parse_history , 8 * p - > parse_history_count ) ;
init_get_bits ( & gb , p - > parse_history , 8 * p - > parse_history_count ) ;
p - > parse_history_count = 0 ;
mb = get_ue_golomb_long ( & gb ) ;
mb = get_ue_golomb_long ( & gb ) ;
if ( get_bits_left ( & gb ) > 0 | | p - > parse_history_count > 5 ) {
p - > parse_last_mb = mb ;
p - > parse_last_mb = mb ;
if ( pc - > frame_start_found ) {
if ( pc - > frame_start_found ) {
if ( mb < = last_mb )
if ( mb < = last_mb ) {
i - = p - > parse_history_count - 1 ;
p - > parse_history_count = 0 ;
goto found ;
goto found ;
}
} else
} else
pc - > frame_start_found = 1 ;
pc - > frame_start_found = 1 ;
p - > parse_history_count = 0 ;
state = 7 ;
state = 7 ;
}
}
}
}
@ -149,7 +152,7 @@ found:
pc - > frame_start_found = 0 ;
pc - > frame_start_found = 0 ;
if ( p - > is_avc )
if ( p - > is_avc )
return next_avc ;
return next_avc ;
return i - ( state & 5 ) - 5 * ( state > 7 ) ;
return i - ( state & 5 ) ;
}
}
static int scan_mmco_reset ( AVCodecParserContext * s , GetBitContext * gb ,
static int scan_mmco_reset ( AVCodecParserContext * s , GetBitContext * gb ,