@ -963,7 +963,7 @@ static int unpack_modes(Vp3DecodeContext *s, GetBitContext *gb)
*/
*/
static int unpack_vectors ( Vp3DecodeContext * s , GetBitContext * gb )
static int unpack_vectors ( Vp3DecodeContext * s , GetBitContext * gb )
{
{
int i , j , k ;
int i , j , k , l ;
int coding_mode ;
int coding_mode ;
int motion_x [ 6 ] ;
int motion_x [ 6 ] ;
int motion_y [ 6 ] ;
int motion_y [ 6 ] ;
@ -1047,6 +1047,10 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
* Y fragment , then average for the C fragment vectors */
* Y fragment , then average for the C fragment vectors */
motion_x [ 4 ] = motion_y [ 4 ] = 0 ;
motion_x [ 4 ] = motion_y [ 4 ] = 0 ;
for ( k = 0 ; k < 4 ; k + + ) {
for ( k = 0 ; k < 4 ; k + + ) {
for ( l = 0 ; l < s - > coded_fragment_list_index ; l + + )
if ( s - > coded_fragment_list [ l ] = = s - > macroblock_fragments [ 6 * current_macroblock + k ] )
break ;
if ( l < s - > coded_fragment_list_index ) {
if ( coding_mode = = 0 ) {
if ( coding_mode = = 0 ) {
motion_x [ k ] = motion_vector_table [ get_vlc2 ( gb , s - > motion_vector_vlc . table , 6 , 2 ) ] ;
motion_x [ k ] = motion_vector_table [ get_vlc2 ( gb , s - > motion_vector_vlc . table , 6 , 2 ) ] ;
motion_y [ k ] = motion_vector_table [ get_vlc2 ( gb , s - > motion_vector_vlc . table , 6 , 2 ) ] ;
motion_y [ k ] = motion_vector_table [ get_vlc2 ( gb , s - > motion_vector_vlc . table , 6 , 2 ) ] ;
@ -1056,6 +1060,10 @@ static int unpack_vectors(Vp3DecodeContext *s, GetBitContext *gb)
}
}
last_motion_x = motion_x [ k ] ;
last_motion_x = motion_x [ k ] ;
last_motion_y = motion_y [ k ] ;
last_motion_y = motion_y [ k ] ;
} else {
motion_x [ k ] = 0 ;
motion_y [ k ] = 0 ;
}
motion_x [ 4 ] + = motion_x [ k ] ;
motion_x [ 4 ] + = motion_x [ k ] ;
motion_y [ 4 ] + = motion_y [ k ] ;
motion_y [ 4 ] + = motion_y [ k ] ;
}
}