comparison postproc/postprocess.c @ 7972:6d1103afba1c

cleanly passing the cpuCaps
author michael
date Wed, 30 Oct 2002 01:51:14 +0000
parents 2648f13b1709
children a57c1fc0c2fc
comparison
equal deleted inserted replaced
7971:b6d3ada27931 7972:6d1103afba1c
75 //#undef HAVE_MMX 75 //#undef HAVE_MMX
76 //#undef ARCH_X86 76 //#undef ARCH_X86
77 //#define DEBUG_BRIGHTNESS 77 //#define DEBUG_BRIGHTNESS
78 #include "../libvo/fastmemcpy.h" 78 #include "../libvo/fastmemcpy.h"
79 #include "postprocess.h" 79 #include "postprocess.h"
80 #include "../cpudetect.h"
81 #include "../mangle.h" 80 #include "../mangle.h"
82 81
83 #define MIN(a,b) ((a) > (b) ? (b) : (a)) 82 #define MIN(a,b) ((a) > (b) ? (b) : (a))
84 #define MAX(a,b) ((a) < (b) ? (b) : (a)) 83 #define MAX(a,b) ((a) < (b) ? (b) : (a))
85 #define ABS(a) ((a) > 0 ? (a) : (-(a))) 84 #define ABS(a) ((a) > 0 ? (a) : (-(a)))
102 #endif 101 #endif
103 102
104 static int verbose= 0; 103 static int verbose= 0;
105 104
106 static const int deringThreshold= 20; 105 static const int deringThreshold= 20;
106
107 static int cpuCaps=0;
107 108
108 struct PPFilter{ 109 struct PPFilter{
109 char *shortName; 110 char *shortName;
110 char *longName; 111 char *longName;
111 int chromDefault; // is chrominance filtering on by default if this filter is manually activated 112 int chromDefault; // is chrominance filtering on by default if this filter is manually activated
187 { 188 {
188 if(w05 + w20 + b00 + b01 + b02 + b08 + b80 == 0) b00=0; 189 if(w05 + w20 + b00 + b01 + b02 + b08 + b80 == 0) b00=0;
189 } 190 }
190 #endif 191 #endif
191 192
192 static inline long long rdtsc()
193 {
194 long long l;
195 asm volatile( "rdtsc\n\t"
196 : "=A" (l)
197 );
198 // printf("%d\n", int(l/1000));
199 return l;
200 }
201 193
202 #ifdef ARCH_X86 194 #ifdef ARCH_X86
203 static inline void prefetchnta(void *p) 195 static inline void prefetchnta(void *p)
204 { 196 {
205 asm volatile( "prefetchnta (%0)\n\t" 197 asm volatile( "prefetchnta (%0)\n\t"
226 asm volatile( "prefetcht2 (%0)\n\t" 218 asm volatile( "prefetcht2 (%0)\n\t"
227 : : "r" (p) 219 : : "r" (p)
228 ); 220 );
229 } 221 }
230 #endif 222 #endif
223
224 int pp_init(int caps){
225 cpuCaps= caps;
226
227 return 0;
228 }
231 229
232 // The horizontal Functions exist only in C cuz the MMX code is faster with vertical filters and transposing 230 // The horizontal Functions exist only in C cuz the MMX code is faster with vertical filters and transposing
233 231
234 /** 232 /**
235 * Check if the given 8x8 Block is mostly "flat" 233 * Check if the given 8x8 Block is mostly "flat"
506 // difference wouldnt be messureable here but its much better because 504 // difference wouldnt be messureable here but its much better because
507 // someone might exchange the cpu whithout restarting mplayer ;) 505 // someone might exchange the cpu whithout restarting mplayer ;)
508 #ifdef RUNTIME_CPUDETECT 506 #ifdef RUNTIME_CPUDETECT
509 #ifdef ARCH_X86 507 #ifdef ARCH_X86
510 // ordered per speed fasterst first 508 // ordered per speed fasterst first
511 if(gCpuCaps.hasMMX2) 509 if(cpuCaps & PP_CPU_CAPS_MMX2)
512 postProcess_MMX2(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c); 510 postProcess_MMX2(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
513 else if(gCpuCaps.has3DNow) 511 else if(cpuCaps & PP_CPU_CAPS_3DNOW)
514 postProcess_3DNow(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c); 512 postProcess_3DNow(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
515 else if(gCpuCaps.hasMMX) 513 else if(cpuCaps & PP_CPU_CAPS_MMX)
516 postProcess_MMX(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c); 514 postProcess_MMX(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
517 else 515 else
518 postProcess_C(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c); 516 postProcess_C(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
519 #else 517 #else
520 postProcess_C(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c); 518 postProcess_C(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);