Mercurial > mplayer.hg
comparison postproc/postprocess_template.c @ 3171:3a325e7f6e1d
faster brightness correcture in MMX2
author | michael |
---|---|
date | Wed, 28 Nov 2001 01:26:03 +0000 |
parents | b2e24fec97bc |
children | 365e9a92498d |
comparison
equal
deleted
inserted
replaced
3170:59d8aea76341 | 3171:3a325e7f6e1d |
---|---|
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 { |