@ -1172,7 +1172,7 @@ static void propagate_block_data(DiracBlock *block, int stride, int size)
* Dirac Specification - >
* 12. Block motion data syntax
*/
static void dirac_unpack_block_motion_data ( DiracContext * s )
static int dirac_unpack_block_motion_data ( DiracContext * s )
{
GetBitContext * gb = & s - > gb ;
uint8_t * sbsplit = s - > sbsplit ;
@ -1192,7 +1192,9 @@ static void dirac_unpack_block_motion_data(DiracContext *s)
ff_dirac_init_arith_decoder ( arith , gb , svq3_get_ue_golomb ( gb ) ) ; /* svq3_get_ue_golomb(gb) is the length */
for ( y = 0 ; y < s - > sbheight ; y + + ) {
for ( x = 0 ; x < s - > sbwidth ; x + + ) {
int split = dirac_get_arith_uint ( arith , CTX_SB_F1 , CTX_SB_DATA ) ;
unsigned int split = dirac_get_arith_uint ( arith , CTX_SB_F1 , CTX_SB_DATA ) ;
if ( split > 2 )
return - 1 ;
sbsplit [ x ] = ( split + pred_sbsplit ( sbsplit + x , s - > sbwidth , x , y ) ) % 3 ;
}
sbsplit + = s - > sbwidth ;
@ -1221,6 +1223,8 @@ static void dirac_unpack_block_motion_data(DiracContext *s)
propagate_block_data ( block , s - > blwidth , step ) ;
}
}
return 0 ;
}
static int weight ( int i , int blen , int offset )
@ -1675,7 +1679,8 @@ static int dirac_decode_picture_header(DiracContext *s)
if ( s - > num_refs ) {
if ( dirac_unpack_prediction_parameters ( s ) ) /* [DIRAC_STD] 11.2 Picture Prediction Data. picture_prediction() */
return - 1 ;
dirac_unpack_block_motion_data ( s ) ; /* [DIRAC_STD] 12. Block motion data syntax */
if ( dirac_unpack_block_motion_data ( s ) ) /* [DIRAC_STD] 12. Block motion data syntax */
return - 1 ;
}
if ( dirac_unpack_idwt_params ( s ) ) /* [DIRAC_STD] 11.3 Wavelet transform data */
return - 1 ;