@ -139,6 +139,7 @@ typedef struct Vp3DecodeContext {
AVFrame last_frame ;
AVFrame last_frame ;
AVFrame current_frame ;
AVFrame current_frame ;
int keyframe ;
int keyframe ;
uint8_t idct_permutation [ 64 ] ;
DSPContext dsp ;
DSPContext dsp ;
VideoDSPContext vdsp ;
VideoDSPContext vdsp ;
VP3DSPContext vp3dsp ;
VP3DSPContext vp3dsp ;
@ -384,7 +385,7 @@ static void init_dequantizer(Vp3DecodeContext *s, int qpi)
int qmin = 8 < < ( inter + ! i ) ;
int qmin = 8 < < ( inter + ! i ) ;
int qscale = i ? ac_scale_factor : dc_scale_factor ;
int qscale = i ? ac_scale_factor : dc_scale_factor ;
s - > qmat [ qpi ] [ inter ] [ plane ] [ s - > dsp . idct_permutation [ i ] ] = av_clip ( ( qscale * coeff ) / 100 * 4 , qmin , 4096 ) ;
s - > qmat [ qpi ] [ inter ] [ plane ] [ s - > idct_permutation [ i ] ] = av_clip ( ( qscale * coeff ) / 100 * 4 , qmin , 4096 ) ;
}
}
// all DC coefficients use the same quant so as not to interfere with DC prediction
// all DC coefficients use the same quant so as not to interfere with DC prediction
s - > qmat [ qpi ] [ inter ] [ plane ] [ 0 ] = s - > qmat [ 0 ] [ inter ] [ plane ] [ 0 ] ;
s - > qmat [ qpi ] [ inter ] [ plane ] [ 0 ] = s - > qmat [ 0 ] [ inter ] [ plane ] [ 0 ] ;
@ -1680,8 +1681,8 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
ff_videodsp_init ( & s - > vdsp , 8 ) ;
ff_videodsp_init ( & s - > vdsp , 8 ) ;
ff_vp3dsp_init ( & s - > vp3dsp , avctx - > flags ) ;
ff_vp3dsp_init ( & s - > vp3dsp , avctx - > flags ) ;
ff_init_scantable_permutation ( s - > dsp . idct_permutation , s - > vp3dsp . idct_perm ) ;
ff_init_scantable_permutation ( s - > idct_permutation , s - > vp3dsp . idct_perm ) ;
ff_init_scantable ( s - > dsp . idct_permutation , & s - > scantable , ff_zigzag_direct ) ;
ff_init_scantable ( s - > idct_permutation , & s - > scantable , ff_zigzag_direct ) ;
/* initialize to an impossible value which will force a recalculation
/* initialize to an impossible value which will force a recalculation
* in the first frame decode */
* in the first frame decode */
@ -1886,7 +1887,7 @@ static int vp3_update_thread_context(AVCodecContext *dst, const AVCodecContext *
}
}
// copy previous frame data
// copy previous frame data
copy_fields ( s , s1 , golden_frame , dsp ) ;
copy_fields ( s , s1 , golden_frame , idct_permutation ) ;
// copy qscale data if necessary
// copy qscale data if necessary
for ( i = 0 ; i < 3 ; i + + ) {
for ( i = 0 ; i < 3 ; i + + ) {