comparison libpostproc/postprocess.c @ 117:a02f3088b0cf libavcodec

negative black bugfix
author michael
date Tue, 23 Oct 2001 00:03:19 +0000
parents 1895a8fa81ea
children 3dd1950ac98d
comparison
equal deleted inserted replaced
116:1895a8fa81ea 117:a02f3088b0cf
134 134
135 //amount of "black" u r willing to loose to get a brightness corrected picture 135 //amount of "black" u r willing to loose to get a brightness corrected picture
136 double maxClippedThreshold= 0.01; 136 double maxClippedThreshold= 0.01;
137 137
138 int maxAllowedY=234; 138 int maxAllowedY=234;
139 //FIXME can never make a movie´s black brighter (anyone needs that?)
140 int minAllowedY=16; 139 int minAllowedY=16;
141 140
142 static struct PPFilter filters[]= 141 static struct PPFilter filters[]=
143 { 142 {
144 {"hb", "hdeblock", 1, 1, 3, H_DEBLOCK}, 143 {"hb", "hdeblock", 1, 1, 3, H_DEBLOCK},
2505 "pxor %%mm4, %%mm4 \n\t" 2504 "pxor %%mm4, %%mm4 \n\t"
2506 2505
2507 #define SCALED_CPY \ 2506 #define SCALED_CPY \
2508 "movq (%0), %%mm0 \n\t"\ 2507 "movq (%0), %%mm0 \n\t"\
2509 "movq (%0,%2), %%mm1 \n\t"\ 2508 "movq (%0,%2), %%mm1 \n\t"\
2510 "psubusb %%mm2, %%mm0 \n\t"\
2511 "psubusb %%mm2, %%mm1 \n\t"\
2512 "movq %%mm0, %%mm5 \n\t"\ 2509 "movq %%mm0, %%mm5 \n\t"\
2513 "punpcklbw %%mm4, %%mm0 \n\t"\ 2510 "punpcklbw %%mm4, %%mm0 \n\t"\
2514 "punpckhbw %%mm4, %%mm5 \n\t"\ 2511 "punpckhbw %%mm4, %%mm5 \n\t"\
2515 "psllw $7, %%mm0 \n\t"\ 2512 "psubw %%mm2, %%mm0 \n\t"\
2516 "psllw $7, %%mm5 \n\t"\ 2513 "psubw %%mm2, %%mm5 \n\t"\
2514 "psllw $6, %%mm0 \n\t"\
2515 "psllw $6, %%mm5 \n\t"\
2517 "pmulhw %%mm3, %%mm0 \n\t"\ 2516 "pmulhw %%mm3, %%mm0 \n\t"\
2518 "pmulhw %%mm3, %%mm5 \n\t"\ 2517 "pmulhw %%mm3, %%mm5 \n\t"\
2519 "packuswb %%mm5, %%mm0 \n\t"\ 2518 "packuswb %%mm5, %%mm0 \n\t"\
2520 "movq %%mm0, (%1) \n\t"\ 2519 "movq %%mm0, (%1) \n\t"\
2521 "movq %%mm1, %%mm5 \n\t"\ 2520 "movq %%mm1, %%mm5 \n\t"\
2522 "punpcklbw %%mm4, %%mm1 \n\t"\ 2521 "punpcklbw %%mm4, %%mm1 \n\t"\
2523 "punpckhbw %%mm4, %%mm5 \n\t"\ 2522 "punpckhbw %%mm4, %%mm5 \n\t"\
2524 "psllw $7, %%mm1 \n\t"\ 2523 "psubw %%mm2, %%mm1 \n\t"\
2525 "psllw $7, %%mm5 \n\t"\ 2524 "psubw %%mm2, %%mm5 \n\t"\
2525 "psllw $6, %%mm1 \n\t"\
2526 "psllw $6, %%mm5 \n\t"\
2526 "pmulhw %%mm3, %%mm1 \n\t"\ 2527 "pmulhw %%mm3, %%mm1 \n\t"\
2527 "pmulhw %%mm3, %%mm5 \n\t"\ 2528 "pmulhw %%mm3, %%mm5 \n\t"\
2528 "packuswb %%mm5, %%mm1 \n\t"\ 2529 "packuswb %%mm5, %%mm1 \n\t"\
2529 "movq %%mm1, (%1, %3) \n\t"\ 2530 "movq %%mm1, (%1, %3) \n\t"\
2530 2531
2683 { 2684 {
2684 if(clipped < maxClipped) break; 2685 if(clipped < maxClipped) break;
2685 clipped-= yHistogram[white]; 2686 clipped-= yHistogram[white];
2686 } 2687 }
2687 2688
2688 // we cant handle negative correctures 2689 packedYOffset= (black - minAllowedY) & 0xFFFF;
2689 packedYOffset= MAX(black - minAllowedY, 0);
2690 packedYOffset|= packedYOffset<<32; 2690 packedYOffset|= packedYOffset<<32;
2691 packedYOffset|= packedYOffset<<16; 2691 packedYOffset|= packedYOffset<<16;
2692 packedYOffset|= packedYOffset<<8;
2693 2692
2694 scale= (double)(maxAllowedY - minAllowedY) / (double)(white-black); 2693 scale= (double)(maxAllowedY - minAllowedY) / (double)(white-black);
2695 2694
2696 packedYScale= (uint16_t)(scale*512.0 + 0.5); 2695 packedYScale= (uint16_t)(scale*1024.0 + 0.5);
2697 packedYScale|= packedYScale<<32; 2696 packedYScale|= packedYScale<<32;
2698 packedYScale|= packedYScale<<16; 2697 packedYScale|= packedYScale<<16;
2699 } 2698 }
2700 else 2699 else
2701 { 2700 {