Mercurial > mplayer.hg
comparison postproc/postprocess_template.c @ 2180:c76bfc70a28c
minor QP scaling & auto-contrast bugfix
fixed compilation problem without -fomit-frame-pointer
author | michael |
---|---|
date | Sat, 13 Oct 2001 09:30:07 +0000 |
parents | 2d8d14b882cc |
children | d90f8fc7ead6 |
comparison
equal
deleted
inserted
replaced
2179:2d8d14b882cc | 2180:c76bfc70a28c |
---|---|
848 // "movq b80, %%mm6 \n\t" // MIN_SIGNED_BYTE | 848 // "movq b80, %%mm6 \n\t" // MIN_SIGNED_BYTE |
849 "leal (%0, %1), %%eax \n\t" | 849 "leal (%0, %1), %%eax \n\t" |
850 "leal (%%eax, %1, 4), %%ebx \n\t" | 850 "leal (%%eax, %1, 4), %%ebx \n\t" |
851 | 851 |
852 "movq b80, %%mm6 \n\t" | 852 "movq b80, %%mm6 \n\t" |
853 "movd %2, %%mm5 \n\t" // QP | 853 "movd pQPb, %%mm5 \n\t" // QP |
854 "movq %%mm5, %%mm4 \n\t" | 854 "movq %%mm5, %%mm4 \n\t" |
855 "paddusb %%mm5, %%mm5 \n\t" // 2QP | 855 "paddusb %%mm5, %%mm5 \n\t" // 2QP |
856 "paddusb %%mm5, %%mm4 \n\t" // 3QP | 856 "paddusb %%mm5, %%mm4 \n\t" // 3QP |
857 "pxor %%mm5, %%mm5 \n\t" // 0 | 857 "pxor %%mm5, %%mm5 \n\t" // 0 |
858 "psubb %%mm4, %%mm5 \n\t" // -3QP | 858 "psubb %%mm4, %%mm5 \n\t" // -3QP |
931 "movq %%mm4, %%mm2 \n\t"\ | 931 "movq %%mm4, %%mm2 \n\t"\ |
932 "psrlq $24, %%mm1 \n\t"\ | 932 "psrlq $24, %%mm1 \n\t"\ |
933 "psubusb %%mm3, %%mm2 \n\t"\ | 933 "psubusb %%mm3, %%mm2 \n\t"\ |
934 "movd %%mm1, %%ecx \n\t"\ | 934 "movd %%mm1, %%ecx \n\t"\ |
935 "psubusb %%mm4, %%mm3 \n\t"\ | 935 "psubusb %%mm4, %%mm3 \n\t"\ |
936 "paddsb (%3, %%ecx, 8), %%mm0 \n\t"\ | 936 "paddsb (%2, %%ecx, 8), %%mm0 \n\t"\ |
937 "por %%mm2, %%mm3 \n\t" /* p´x = |px - p(x+1)| */\ | 937 "por %%mm2, %%mm3 \n\t" /* p´x = |px - p(x+1)| */\ |
938 "paddb %%mm6, %%mm0 \n\t"\ | 938 "paddb %%mm6, %%mm0 \n\t"\ |
939 "pcmpeqb %%mm7, %%mm2 \n\t" /* p´x = sgn[px - p(x+1)] */\ | 939 "pcmpeqb %%mm7, %%mm2 \n\t" /* p´x = sgn[px - p(x+1)] */\ |
940 "movq %%mm3, %%mm1 \n\t"\ | 940 "movq %%mm3, %%mm1 \n\t"\ |
941 "psllq $32, %%mm1 \n\t" /* p´5 = |p1 - p2| */\ | 941 "psllq $32, %%mm1 \n\t" /* p´5 = |p1 - p2| */\ |
952 "psrlq $24, %%mm3 \n\t"\ | 952 "psrlq $24, %%mm3 \n\t"\ |
953 "movd " #c ", %%mm0 \n\t"\ | 953 "movd " #c ", %%mm0 \n\t"\ |
954 "movd 4" #c ", %%mm1 \n\t"\ | 954 "movd 4" #c ", %%mm1 \n\t"\ |
955 "punpckldq %%mm1, %%mm0 \n\t"\ | 955 "punpckldq %%mm1, %%mm0 \n\t"\ |
956 "paddb %%mm6, %%mm0 \n\t"\ | 956 "paddb %%mm6, %%mm0 \n\t"\ |
957 "paddsb (%3, %%ecx, 8), %%mm0 \n\t"\ | 957 "paddsb (%2, %%ecx, 8), %%mm0 \n\t"\ |
958 "paddb %%mm6, %%mm0 \n\t"\ | 958 "paddb %%mm6, %%mm0 \n\t"\ |
959 "movq %%mm0, " #c " \n\t"\ | 959 "movq %%mm0, " #c " \n\t"\ |
960 "movd %%mm3, %%ecx \n\t"\ | 960 "movd %%mm3, %%ecx \n\t"\ |
961 "movd " #d ", %%mm0 \n\t"\ | 961 "movd " #d ", %%mm0 \n\t"\ |
962 "paddsb (%3, %%ecx, 8), %%mm4 \n\t"\ | 962 "paddsb (%2, %%ecx, 8), %%mm4 \n\t"\ |
963 "movd 4" #d ", %%mm1 \n\t"\ | 963 "movd 4" #d ", %%mm1 \n\t"\ |
964 "paddb %%mm6, %%mm4 \n\t"\ | 964 "paddb %%mm6, %%mm4 \n\t"\ |
965 "punpckldq %%mm1, %%mm0 \n\t"\ | 965 "punpckldq %%mm1, %%mm0 \n\t"\ |
966 "movq %%mm4, " #b " \n\t"\ | 966 "movq %%mm4, " #b " \n\t"\ |
967 "paddb %%mm6, %%mm0 \n\t"\ | 967 "paddb %%mm6, %%mm0 \n\t"\ |
968 "paddsb (%3, %%ecx, 8), %%mm0 \n\t"\ | 968 "paddsb (%2, %%ecx, 8), %%mm0 \n\t"\ |
969 "paddb %%mm6, %%mm0 \n\t"\ | 969 "paddb %%mm6, %%mm0 \n\t"\ |
970 "movq %%mm0, " #d " \n\t"\ | 970 "movq %%mm0, " #d " \n\t"\ |
971 | 971 |
972 HX1b((%0),(%%eax),(%%eax, %1),(%%eax, %1, 2)) | 972 HX1b((%0),(%%eax),(%%eax, %1),(%%eax, %1, 2)) |
973 HX1b((%0, %1, 4),(%%ebx),(%%ebx, %1),(%%ebx, %1, 2)) | 973 HX1b((%0, %1, 4),(%%ebx),(%%ebx, %1),(%%ebx, %1, 2)) |
974 | 974 |
975 | 975 |
976 : | 976 : |
977 : "r" (src), "r" (stride), "r" (QP), "r" (lut) | 977 : "r" (src), "r" (stride), "r" (lut) |
978 : "%eax", "%ebx", "%ecx" | 978 : "%eax", "%ebx", "%ecx" |
979 ); | 979 ); |
980 #else | 980 #else |
981 | 981 |
982 //FIXME (has little in common with the mmx2 version) | 982 //FIXME (has little in common with the mmx2 version) |
2099 for(x=0; x<width; x+=BLOCK_SIZE) | 2099 for(x=0; x<width; x+=BLOCK_SIZE) |
2100 { | 2100 { |
2101 const int stride= dstStride; | 2101 const int stride= dstStride; |
2102 int QP= isColor ? | 2102 int QP= isColor ? |
2103 QPs[(y>>3)*QPStride + (x>>3)]: | 2103 QPs[(y>>3)*QPStride + (x>>3)]: |
2104 (QPs[(y>>4)*QPStride + (x>>4)] * (packedYScale &0xFFFF))>>8; | 2104 QPs[(y>>4)*QPStride + (x>>4)]; |
2105 if(!isColor && (mode & LEVEL_FIX)) QP= (QP* (packedYScale &0xFFFF))>>8; | |
2105 #ifdef HAVE_MMX | 2106 #ifdef HAVE_MMX |
2106 asm volatile( | 2107 asm volatile( |
2107 "movd %0, %%mm7 \n\t" | 2108 "movd %0, %%mm7 \n\t" |
2108 "packuswb %%mm7, %%mm7 \n\t" // 0, 0, 0, QP, 0, 0, 0, QP | 2109 "packuswb %%mm7, %%mm7 \n\t" // 0, 0, 0, QP, 0, 0, 0, QP |
2109 "packuswb %%mm7, %%mm7 \n\t" // 0,QP, 0, QP, 0,QP, 0, QP | 2110 "packuswb %%mm7, %%mm7 \n\t" // 0,QP, 0, QP, 0,QP, 0, QP |