comparison vc1dsp.c @ 6158:2f43560f5dba libavcodec

simplify 4-point transform part a bit
author kostya
date Sat, 19 Jan 2008 11:04:02 +0000
parents 953c8efd5298
children 674acd1e7e18
comparison
equal deleted inserted replaced
6157:953c8efd5298 6158:2f43560f5dba
192 192
193 src = block; 193 src = block;
194 for(i = 0; i < 8; i++){ 194 for(i = 0; i < 8; i++){
195 t1 = 17 * (src[ 0] + src[16]) + 64; 195 t1 = 17 * (src[ 0] + src[16]) + 64;
196 t2 = 17 * (src[ 0] - src[16]) + 64; 196 t2 = 17 * (src[ 0] - src[16]) + 64;
197 t3 = 22 * src[ 8]; 197 t3 = 22 * src[ 8] + 10 * src[24];
198 t4 = 22 * src[24]; 198 t4 = 22 * src[24] - 10 * src[ 8];
199 t5 = 10 * src[ 8]; 199
200 t6 = 10 * src[24]; 200 dest[0*linesize] = cm[dest[0*linesize] + ((t1 + t3) >> 7)];
201 201 dest[1*linesize] = cm[dest[1*linesize] + ((t2 - t4) >> 7)];
202 dest[0*linesize] = cm[dest[0*linesize] + ((t1 + t3 + t6) >> 7)]; 202 dest[2*linesize] = cm[dest[2*linesize] + ((t2 + t4) >> 7)];
203 dest[1*linesize] = cm[dest[1*linesize] + ((t2 - t4 + t5) >> 7)]; 203 dest[3*linesize] = cm[dest[3*linesize] + ((t1 - t3) >> 7)];
204 dest[2*linesize] = cm[dest[2*linesize] + ((t2 + t4 - t5) >> 7)];
205 dest[3*linesize] = cm[dest[3*linesize] + ((t1 - t3 - t6) >> 7)];
206 204
207 src ++; 205 src ++;
208 dest++; 206 dest++;
209 } 207 }
210 } 208 }
221 src = block; 219 src = block;
222 dst = block; 220 dst = block;
223 for(i = 0; i < 8; i++){ 221 for(i = 0; i < 8; i++){
224 t1 = 17 * (src[0] + src[2]) + 4; 222 t1 = 17 * (src[0] + src[2]) + 4;
225 t2 = 17 * (src[0] - src[2]) + 4; 223 t2 = 17 * (src[0] - src[2]) + 4;
226 t3 = 22 * src[1]; 224 t3 = 22 * src[1] + 10 * src[3];
227 t4 = 22 * src[3]; 225 t4 = 22 * src[3] - 10 * src[1];
228 t5 = 10 * src[1]; 226
229 t6 = 10 * src[3]; 227 dst[0] = (t1 + t3) >> 3;
230 228 dst[1] = (t2 - t4) >> 3;
231 dst[0] = (t1 + t3 + t6) >> 3; 229 dst[2] = (t2 + t4) >> 3;
232 dst[1] = (t2 - t4 + t5) >> 3; 230 dst[3] = (t1 - t3) >> 3;
233 dst[2] = (t2 + t4 - t5) >> 3;
234 dst[3] = (t1 - t3 - t6) >> 3;
235 231
236 src += 8; 232 src += 8;
237 dst += 8; 233 dst += 8;
238 } 234 }
239 235
271 /** Do inverse transform on 4x4 part of block 267 /** Do inverse transform on 4x4 part of block
272 */ 268 */
273 static void vc1_inv_trans_4x4_c(uint8_t *dest, int linesize, DCTELEM *block) 269 static void vc1_inv_trans_4x4_c(uint8_t *dest, int linesize, DCTELEM *block)
274 { 270 {
275 int i; 271 int i;
276 register int t1,t2,t3,t4,t5,t6; 272 register int t1,t2,t3,t4;
277 DCTELEM *src, *dst; 273 DCTELEM *src, *dst;
278 const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; 274 const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
279 275
280 src = block; 276 src = block;
281 dst = block; 277 dst = block;
282 for(i = 0; i < 4; i++){ 278 for(i = 0; i < 4; i++){
283 t1 = 17 * (src[0] + src[2]) + 4; 279 t1 = 17 * (src[0] + src[2]) + 4;
284 t2 = 17 * (src[0] - src[2]) + 4; 280 t2 = 17 * (src[0] - src[2]) + 4;
285 t3 = 22 * src[1]; 281 t3 = 22 * src[1] + 10 * src[3];
286 t4 = 22 * src[3]; 282 t4 = 22 * src[3] - 10 * src[1];
287 t5 = 10 * src[1]; 283
288 t6 = 10 * src[3]; 284 dst[0] = (t1 + t3) >> 3;
289 285 dst[1] = (t2 - t4) >> 3;
290 dst[0] = (t1 + t3 + t6) >> 3; 286 dst[2] = (t2 + t4) >> 3;
291 dst[1] = (t2 - t4 + t5) >> 3; 287 dst[3] = (t1 - t3) >> 3;
292 dst[2] = (t2 + t4 - t5) >> 3;
293 dst[3] = (t1 - t3 - t6) >> 3;
294 288
295 src += 8; 289 src += 8;
296 dst += 8; 290 dst += 8;
297 } 291 }
298 292
299 src = block; 293 src = block;
300 for(i = 0; i < 4; i++){ 294 for(i = 0; i < 4; i++){
301 t1 = 17 * (src[ 0] + src[16]) + 64; 295 t1 = 17 * (src[ 0] + src[16]) + 64;
302 t2 = 17 * (src[ 0] - src[16]) + 64; 296 t2 = 17 * (src[ 0] - src[16]) + 64;
303 t3 = 22 * src[ 8]; 297 t3 = 22 * src[ 8] + 10 * src[24];
304 t4 = 22 * src[24]; 298 t4 = 22 * src[24] - 10 * src[ 8];
305 t5 = 10 * src[ 8]; 299
306 t6 = 10 * src[24]; 300 dest[0*linesize] = cm[dest[0*linesize] + ((t1 + t3) >> 7)];
307 301 dest[1*linesize] = cm[dest[1*linesize] + ((t2 - t4) >> 7)];
308 dest[0*linesize] = cm[dest[0*linesize] + ((t1 + t3 + t6) >> 7)]; 302 dest[2*linesize] = cm[dest[2*linesize] + ((t2 + t4) >> 7)];
309 dest[1*linesize] = cm[dest[1*linesize] + ((t2 - t4 + t5) >> 7)]; 303 dest[3*linesize] = cm[dest[3*linesize] + ((t1 - t3) >> 7)];
310 dest[2*linesize] = cm[dest[2*linesize] + ((t2 + t4 - t5) >> 7)];
311 dest[3*linesize] = cm[dest[3*linesize] + ((t1 - t3 - t6) >> 7)];
312 304
313 src ++; 305 src ++;
314 dest++; 306 dest++;
315 } 307 }
316 } 308 }