@@ -107,6 +107,8 @@ pub fn fdct(data: &mut [i16; 64]) {
107107 /* Note results are scaled up by sqrt(8) compared to a true DCT; */
108108 /* furthermore, we scale the results by 2**PASS1_BITS. */
109109
110+ let mut data2 = [ 0i32 ; 64 ] ;
111+
110112 for y in 0 ..8 {
111113 let offset = y * 8 ;
112114
@@ -128,18 +130,18 @@ pub fn fdct(data: &mut [i16; 64]) {
128130 let tmp11 = tmp1 + tmp2;
129131 let tmp12 = tmp1 - tmp2;
130132
131- data [ offset + 0 ] = into_el ( ( tmp10 + tmp11) << PASS1_BITS ) ;
132- data [ offset + 4 ] = into_el ( ( tmp10 - tmp11) << PASS1_BITS ) ;
133+ data2 [ offset + 0 ] = ( tmp10 + tmp11) << PASS1_BITS ;
134+ data2 [ offset + 4 ] = ( tmp10 - tmp11) << PASS1_BITS ;
133135
134136 let z1 = ( tmp12 + tmp13) * FIX_0_541196100 ;
135- data [ offset + 2 ] = into_el ( descale (
137+ data2 [ offset + 2 ] = descale (
136138 z1 + ( tmp13 * FIX_0_765366865 ) ,
137139 CONST_BITS - PASS1_BITS ,
138- ) ) ;
139- data [ offset + 6 ] = into_el ( descale (
140+ ) ;
141+ data2 [ offset + 6 ] = descale (
140142 z1 + ( tmp12 * -FIX_1_847759065 ) ,
141143 CONST_BITS - PASS1_BITS ,
142- ) ) ;
144+ ) ;
143145
144146 /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
145147 * cK represents cos(K*pi/16).
@@ -164,10 +166,10 @@ pub fn fdct(data: &mut [i16; 64]) {
164166 let z3 = z3 + z5;
165167 let z4 = z4 + z5;
166168
167- data [ offset + 7 ] = into_el ( descale ( tmp4 + z1 + z3, CONST_BITS - PASS1_BITS ) ) ;
168- data [ offset + 5 ] = into_el ( descale ( tmp5 + z2 + z4, CONST_BITS - PASS1_BITS ) ) ;
169- data [ offset + 3 ] = into_el ( descale ( tmp6 + z2 + z3, CONST_BITS - PASS1_BITS ) ) ;
170- data [ offset + 1 ] = into_el ( descale ( tmp7 + z1 + z4, CONST_BITS - PASS1_BITS ) ) ;
169+ data2 [ offset + 7 ] = descale ( tmp4 + z1 + z3, CONST_BITS - PASS1_BITS ) ;
170+ data2 [ offset + 5 ] = descale ( tmp5 + z2 + z4, CONST_BITS - PASS1_BITS ) ;
171+ data2 [ offset + 3 ] = descale ( tmp6 + z2 + z3, CONST_BITS - PASS1_BITS ) ;
172+ data2 [ offset + 1 ] = descale ( tmp7 + z1 + z4, CONST_BITS - PASS1_BITS ) ;
171173 }
172174
173175 /* Pass 2: process columns.
@@ -176,14 +178,14 @@ pub fn fdct(data: &mut [i16; 64]) {
176178 */
177179
178180 for x in 0 ..8 {
179- let tmp0 = i32 :: from ( data [ DCT_SIZE * 0 + x] ) + i32 :: from ( data [ DCT_SIZE * 7 + x] ) ;
180- let tmp7 = i32 :: from ( data [ DCT_SIZE * 0 + x] ) - i32 :: from ( data [ DCT_SIZE * 7 + x] ) ;
181- let tmp1 = i32 :: from ( data [ DCT_SIZE * 1 + x] ) + i32 :: from ( data [ DCT_SIZE * 6 + x] ) ;
182- let tmp6 = i32 :: from ( data [ DCT_SIZE * 1 + x] ) - i32 :: from ( data [ DCT_SIZE * 6 + x] ) ;
183- let tmp2 = i32 :: from ( data [ DCT_SIZE * 2 + x] ) + i32 :: from ( data [ DCT_SIZE * 5 + x] ) ;
184- let tmp5 = i32 :: from ( data [ DCT_SIZE * 2 + x] ) - i32 :: from ( data [ DCT_SIZE * 5 + x] ) ;
185- let tmp3 = i32 :: from ( data [ DCT_SIZE * 3 + x] ) + i32 :: from ( data [ DCT_SIZE * 4 + x] ) ;
186- let tmp4 = i32 :: from ( data [ DCT_SIZE * 3 + x] ) - i32 :: from ( data [ DCT_SIZE * 4 + x] ) ;
181+ let tmp0 = data2 [ DCT_SIZE * 0 + x] + data2 [ DCT_SIZE * 7 + x] ;
182+ let tmp7 = data2 [ DCT_SIZE * 0 + x] - data2 [ DCT_SIZE * 7 + x] ;
183+ let tmp1 = data2 [ DCT_SIZE * 1 + x] + data2 [ DCT_SIZE * 6 + x] ;
184+ let tmp6 = data2 [ DCT_SIZE * 1 + x] - data2 [ DCT_SIZE * 6 + x] ;
185+ let tmp2 = data2 [ DCT_SIZE * 2 + x] + data2 [ DCT_SIZE * 5 + x] ;
186+ let tmp5 = data2 [ DCT_SIZE * 2 + x] - data2 [ DCT_SIZE * 5 + x] ;
187+ let tmp3 = data2 [ DCT_SIZE * 3 + x] + data2 [ DCT_SIZE * 4 + x] ;
188+ let tmp4 = data2 [ DCT_SIZE * 3 + x] - data2 [ DCT_SIZE * 4 + x] ;
187189
188190 /* Even part per LL&M figure 1 --- note that published figure is faulty;
189191 * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
0 commit comments