Mercurial > libavcodec.hg
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 } |