Commit 98c92aaf authored by Christophe Massiot's avatar Christophe Massiot

Un bug cette fois-ci avec le parseur et un traitement erron� des macroblocs

saut�s dans les images B qui provoquait des carr�s.
parent 4958099e
......@@ -1581,9 +1581,23 @@ static __inline__ void SkippedMacroblock( vpar_thread_t * p_vpar, int i_mb,
/* Motion type is picture structure. */
p_mb->pf_motion = pf_motion_skipped[i_chroma_format]
[i_structure];
p_mb->i_mb_type = MB_MOTION_FORWARD;
p_mb->i_coded_block_pattern = 0;
memset( p_mb->pppi_motion_vectors, 0, 8*sizeof(int) );
/* Motion direction and motion vectors depend on the coding type. */
if( i_coding_type == B_CODING_TYPE )
{
int i, j, k;
p_mb->i_mb_type = p_vpar->mb.i_motion_dir;
for( i = 0; i < 2; i++ )
for( j = 0; j < 2; j++ )
for( k = 0; k < 2; k++ )
p_mb->pppi_motion_vectors[i][j][k] = p_vpar->mb.pppi_pmv[i][j][k];
}
else if( i_coding_type == P_CODING_TYPE )
{
p_mb->i_mb_type = MB_MOTION_FORWARD;
memset( p_mb->pppi_motion_vectors, 0, 8*sizeof(int) );
}
/* Set the field we use for motion compensation */
p_mb->ppi_field_select[0][0] = p_mb->ppi_field_select[0][1]
......@@ -1625,6 +1639,14 @@ static __inline__ void MacroblockModes( vpar_thread_t * p_vpar,
p_mb->i_mb_type = DMBType( p_vpar );
}
if( i_coding_type == B_CODING_TYPE )
{
/* We need to remember the motion direction of the last macroblock
* before a skipped macroblock (ISO/IEC 13818-2 7.6.6) */
p_vpar->mb.i_motion_dir = p_mb->i_mb_type
& (MB_MOTION_FORWARD | MB_MOTION_BACKWARD);
}
/* SCALABILITY : warning, we don't know if spatial_temporal_weight_code
* has to be dropped, take care if you use scalable streams. */
/* RemoveBits( &p_vpar->bit_stream, 2 ); */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment