u32 i_dummy;
NextStartCode( p_vpar );
- while( i_mb_address+i_mb_base < p_vpar->sequence.i_mb_size
+ while( (i_coding_type != I_CODING_TYPE || i_coding_type != D_CODING_TYPE
+ || !p_vpar->picture.b_error)
+ && i_mb_address+i_mb_base < p_vpar->sequence.i_mb_size
&& !p_vpar->b_die )
{
if( ((i_dummy = ShowBits( &p_vpar->bit_stream, 32 ))
/* Try to recover from error. If we missed less than half the
* number of macroblocks of the picture, mark the missed ones
* as skipped. */
- if( p_vpar->picture.b_error &&
+ if( (i_coding_type == P_CODING_TYPE || i_coding_type == B_CODING_TYPE)
+ && p_vpar->picture.b_error &&
( (i_mb_address-i_mb_base) > (p_vpar->sequence.i_mb_size >> 1)
|| (i_structure != FRAME_STRUCTURE
&& (i_mb_address-i_mb_base) > (p_vpar->sequence.i_mb_size >> 2) ) ) )