Mercurial > libavcodec.hg
comparison libpostproc/postprocess_template.c @ 173:37eaaa9596cc libavcodec
faster brightness correcture in MMX2
| author | michael |
|---|---|
| date | Wed, 28 Nov 2001 01:26:03 +0000 |
| parents | a0efaf471d6b |
| children | edc5f6cf1855 |
comparison
equal
deleted
inserted
replaced
| 172:a0efaf471d6b | 173:37eaaa9596cc |
|---|---|
| 2462 "leal (%0,%2), %%eax \n\t" | 2462 "leal (%0,%2), %%eax \n\t" |
| 2463 "leal (%1,%3), %%ebx \n\t" | 2463 "leal (%1,%3), %%ebx \n\t" |
| 2464 "movq packedYOffset, %%mm2 \n\t" | 2464 "movq packedYOffset, %%mm2 \n\t" |
| 2465 "movq packedYScale, %%mm3 \n\t" | 2465 "movq packedYScale, %%mm3 \n\t" |
| 2466 "pxor %%mm4, %%mm4 \n\t" | 2466 "pxor %%mm4, %%mm4 \n\t" |
| 2467 | 2467 #ifdef HAVE_MMX2 |
| 2468 #define SCALED_CPY(src1, src2, dst1, dst2) \ | |
| 2469 "movq " #src1 ", %%mm0 \n\t"\ | |
| 2470 "movq " #src1 ", %%mm5 \n\t"\ | |
| 2471 "movq " #src2 ", %%mm1 \n\t"\ | |
| 2472 "movq " #src2 ", %%mm6 \n\t"\ | |
| 2473 "punpcklbw %%mm0, %%mm0 \n\t"\ | |
| 2474 "punpckhbw %%mm5, %%mm5 \n\t"\ | |
| 2475 "punpcklbw %%mm1, %%mm1 \n\t"\ | |
| 2476 "punpckhbw %%mm6, %%mm6 \n\t"\ | |
| 2477 "pmulhuw %%mm3, %%mm0 \n\t"\ | |
| 2478 "pmulhuw %%mm3, %%mm5 \n\t"\ | |
| 2479 "pmulhuw %%mm3, %%mm1 \n\t"\ | |
| 2480 "pmulhuw %%mm3, %%mm6 \n\t"\ | |
| 2481 "psubw %%mm2, %%mm0 \n\t"\ | |
| 2482 "psubw %%mm2, %%mm5 \n\t"\ | |
| 2483 "psubw %%mm2, %%mm1 \n\t"\ | |
| 2484 "psubw %%mm2, %%mm6 \n\t"\ | |
| 2485 "packuswb %%mm5, %%mm0 \n\t"\ | |
| 2486 "packuswb %%mm6, %%mm1 \n\t"\ | |
| 2487 "movq %%mm0, " #dst1 " \n\t"\ | |
| 2488 "movq %%mm1, " #dst2 " \n\t"\ | |
| 2489 | |
| 2490 #else //HAVE_MMX2 | |
| 2468 #define SCALED_CPY(src1, src2, dst1, dst2) \ | 2491 #define SCALED_CPY(src1, src2, dst1, dst2) \ |
| 2469 "movq " #src1 ", %%mm0 \n\t"\ | 2492 "movq " #src1 ", %%mm0 \n\t"\ |
| 2470 "movq " #src1 ", %%mm5 \n\t"\ | 2493 "movq " #src1 ", %%mm5 \n\t"\ |
| 2471 "punpcklbw %%mm4, %%mm0 \n\t"\ | 2494 "punpcklbw %%mm4, %%mm0 \n\t"\ |
| 2472 "punpckhbw %%mm4, %%mm5 \n\t"\ | 2495 "punpckhbw %%mm4, %%mm5 \n\t"\ |
| 2489 "packuswb %%mm5, %%mm0 \n\t"\ | 2512 "packuswb %%mm5, %%mm0 \n\t"\ |
| 2490 "packuswb %%mm6, %%mm1 \n\t"\ | 2513 "packuswb %%mm6, %%mm1 \n\t"\ |
| 2491 "movq %%mm0, " #dst1 " \n\t"\ | 2514 "movq %%mm0, " #dst1 " \n\t"\ |
| 2492 "movq %%mm1, " #dst2 " \n\t"\ | 2515 "movq %%mm1, " #dst2 " \n\t"\ |
| 2493 | 2516 |
| 2517 #endif //!HAVE_MMX2 | |
| 2518 | |
| 2494 SCALED_CPY((%0) , (%0, %2) , (%1) , (%1, %3)) | 2519 SCALED_CPY((%0) , (%0, %2) , (%1) , (%1, %3)) |
| 2495 SCALED_CPY((%0, %2, 2), (%%eax, %2, 2), (%1, %3, 2), (%%ebx, %3, 2)) | 2520 SCALED_CPY((%0, %2, 2), (%%eax, %2, 2), (%1, %3, 2), (%%ebx, %3, 2)) |
| 2496 SCALED_CPY((%0, %2, 4), (%%eax, %2, 4), (%1, %3, 4), (%%ebx, %3, 4)) | 2521 SCALED_CPY((%0, %2, 4), (%%eax, %2, 4), (%1, %3, 4), (%%ebx, %3, 4)) |
| 2497 "leal (%%eax,%2,4), %%eax \n\t" | 2522 "leal (%%eax,%2,4), %%eax \n\t" |
| 2498 "leal (%%ebx,%3,4), %%ebx \n\t" | 2523 "leal (%%ebx,%3,4), %%ebx \n\t" |
| 2676 { | 2701 { |
| 2677 if(clipped < maxClipped) break; | 2702 if(clipped < maxClipped) break; |
| 2678 clipped-= yHistogram[white]; | 2703 clipped-= yHistogram[white]; |
| 2679 } | 2704 } |
| 2680 | 2705 |
| 2706 scale= (double)(maxAllowedY - minAllowedY) / (double)(white-black); | |
| 2707 | |
| 2708 #ifdef HAVE_MMX2 | |
| 2709 packedYScale= (uint16_t)(scale*256.0 + 0.5); | |
| 2710 packedYOffset= (((black*packedYScale)>>8) - minAllowedY) & 0xFFFF; | |
| 2711 #else | |
| 2712 packedYScale= (uint16_t)(scale*1024.0 + 0.5); | |
| 2681 packedYOffset= (black - minAllowedY) & 0xFFFF; | 2713 packedYOffset= (black - minAllowedY) & 0xFFFF; |
| 2714 #endif | |
| 2715 | |
| 2682 packedYOffset|= packedYOffset<<32; | 2716 packedYOffset|= packedYOffset<<32; |
| 2683 packedYOffset|= packedYOffset<<16; | 2717 packedYOffset|= packedYOffset<<16; |
| 2684 | 2718 |
| 2685 scale= (double)(maxAllowedY - minAllowedY) / (double)(white-black); | |
| 2686 | |
| 2687 packedYScale= (uint16_t)(scale*1024.0 + 0.5); | |
| 2688 packedYScale|= packedYScale<<32; | 2719 packedYScale|= packedYScale<<32; |
| 2689 packedYScale|= packedYScale<<16; | 2720 packedYScale|= packedYScale<<16; |
| 2690 } | 2721 } |
| 2691 else | 2722 else |
| 2692 { | 2723 { |
