@ -671,37 +671,23 @@ static int smka_decode_frame(AVCodecContext *avctx, void *data,
for ( i = 0 ; i < = stereo ; i + + )
for ( i = 0 ; i < = stereo ; i + + )
* samples + + = pred [ i ] ;
* samples + + = pred [ i ] ;
for ( ; i < unp_size / 2 ; i + + ) {
for ( ; i < unp_size / 2 ; i + + ) {
unsigned idx = 2 * ( i & stereo ) ;
if ( get_bits_left ( & gb ) < 0 ) {
if ( get_bits_left ( & gb ) < 0 ) {
ret = AVERROR_INVALIDDATA ;
ret = AVERROR_INVALIDDATA ;
goto error ;
goto error ;
}
}
if ( i & stereo ) {
if ( vlc [ idx ] . table )
if ( vlc [ 2 ] . table )
res = get_vlc2 ( & gb , vlc [ idx ] . table , SMKTREE_BITS , 3 ) ;
res = get_vlc2 ( & gb , vlc [ 2 ] . table , SMKTREE_BITS , 3 ) ;
else
else
res = values [ idx ] ;
res = values [ 2 ] ;
val = res ;
val = res ;
if ( vlc [ + + idx ] . table )
if ( vlc [ 3 ] . table )
res = get_vlc2 ( & gb , vlc [ idx ] . table , SMKTREE_BITS , 3 ) ;
res = get_vlc2 ( & gb , vlc [ 3 ] . table , SMKTREE_BITS , 3 ) ;
else
else
res = values [ idx ] ;
res = values [ 3 ] ;
val | = res < < 8 ;
val | = res < < 8 ;
pred [ idx / 2 ] + = val ;
pred [ 1 ] + = val ;
* samples + + = pred [ idx / 2 ] ;
* samples + + = pred [ 1 ] ;
} else {
if ( vlc [ 0 ] . table )
res = get_vlc2 ( & gb , vlc [ 0 ] . table , SMKTREE_BITS , 3 ) ;
else
res = values [ 0 ] ;
val = res ;
if ( vlc [ 1 ] . table )
res = get_vlc2 ( & gb , vlc [ 1 ] . table , SMKTREE_BITS , 3 ) ;
else
res = values [ 1 ] ;
val | = res < < 8 ;
pred [ 0 ] + = val ;
* samples + + = pred [ 0 ] ;
}
}
}
} else { //8-bit data
} else { //8-bit data
for ( i = stereo ; i > = 0 ; i - - )
for ( i = stereo ; i > = 0 ; i - - )
@ -709,25 +695,17 @@ static int smka_decode_frame(AVCodecContext *avctx, void *data,
for ( i = 0 ; i < = stereo ; i + + )
for ( i = 0 ; i < = stereo ; i + + )
* samples8 + + = pred [ i ] ;
* samples8 + + = pred [ i ] ;
for ( ; i < unp_size ; i + + ) {
for ( ; i < unp_size ; i + + ) {
unsigned idx = i & stereo ;
if ( get_bits_left ( & gb ) < 0 ) {
if ( get_bits_left ( & gb ) < 0 ) {
ret = AVERROR_INVALIDDATA ;
ret = AVERROR_INVALIDDATA ;
goto error ;
goto error ;
}
}
if ( i & stereo ) {
if ( vlc [ idx ] . table )
if ( vlc [ 1 ] . table )
val = get_vlc2 ( & gb , vlc [ idx ] . table , SMKTREE_BITS , 3 ) ;
res = get_vlc2 ( & gb , vlc [ 1 ] . table , SMKTREE_BITS , 3 ) ;
else
else
val = values [ idx ] ;
res = values [ 1 ] ;
pred [ idx ] + = val ;
pred [ 1 ] + = res ;
* samples8 + + = pred [ idx ] ;
* samples8 + + = pred [ 1 ] ;
} else {
if ( vlc [ 0 ] . table )
res = get_vlc2 ( & gb , vlc [ 0 ] . table , SMKTREE_BITS , 3 ) ;
else
res = values [ 0 ] ;
pred [ 0 ] + = res ;
* samples8 + + = pred [ 0 ] ;
}
}
}
}
}