changeset 7985:1ab37da5b1da

per context cpuCaps (idea by kabi)
author michael
date Wed, 30 Oct 2002 21:02:21 +0000
parents a57c1fc0c2fc
children 39b5d7082e1f
files libmpcodecs/vf_pp.c postproc/postprocess.c postproc/postprocess.h
diffstat 3 files changed, 15 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/vf_pp.c	Wed Oct 30 20:50:33 2002 +0000
+++ b/libmpcodecs/vf_pp.c	Wed Oct 30 21:02:21 2002 +0000
@@ -27,7 +27,11 @@
 static int config(struct vf_instance_s* vf,
         int width, int height, int d_width, int d_height,
 	unsigned int voflags, unsigned int outfmt){
-    vf->priv->context= pp_get_context(width, height);
+    vf->priv->context= pp_get_context(width, height,
+          (gCpuCaps.hasMMX   ? PP_CPU_CAPS_MMX   : 0)
+	| (gCpuCaps.hasMMX2  ? PP_CPU_CAPS_MMX2  : 0)
+	| (gCpuCaps.has3DNow ? PP_CPU_CAPS_3DNOW : 0)
+    );
 
     return vf_next_config(vf,width,height,d_width,d_height,voflags,vf->priv->outfmt);
 }
@@ -131,12 +135,6 @@
     vf->priv->outfmt=vf_match_csp(&vf->next,fmt_list,IMGFMT_YV12);
     if(!vf->priv->outfmt) return 0; // no csp match :(
     
-    pp_init(
-          (gCpuCaps.hasMMX   ? PP_CPU_CAPS_MMX   : 0)
-	| (gCpuCaps.hasMMX2  ? PP_CPU_CAPS_MMX2  : 0)
-	| (gCpuCaps.has3DNow ? PP_CPU_CAPS_3DNOW : 0)
-    );
-    
     if(args){
 	if(!strcmp("help", args)){
 		printf("%s", pp_help);
--- a/postproc/postprocess.c	Wed Oct 30 20:50:33 2002 +0000
+++ b/postproc/postprocess.c	Wed Oct 30 21:02:21 2002 +0000
@@ -104,8 +104,6 @@
 
 static const int deringThreshold= 20;
 
-static int cpuCaps=0;
-
 struct PPFilter{
 	char *shortName;
 	char *longName;
@@ -150,6 +148,8 @@
 	int nonBQP;
 
 	int frameNum;
+	
+	int cpuCaps;
 
 	PPMode ppMode;
 } PPContext;
@@ -221,12 +221,6 @@
 }
 #endif
 
-int pp_init(int caps){
-    cpuCaps= caps;
-    
-    return 0;
-}
-
 // The horizontal Functions exist only in C cuz the MMX code is faster with vertical filters and transposing
 
 /**
@@ -495,7 +489,7 @@
 // minor note: the HAVE_xyz is messed up after that line so dont use it
 
 static inline void postProcess(uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
-	QP_STORE_T QPs[], int QPStride, int isColor, PPMode *ppMode, void *vc)
+	QP_STORE_T QPs[], int QPStride, int isColor, PPMode *ppMode, pp_context *vc)
 {
 	PPContext *c= (PPContext *)vc;
 	c->ppMode= *ppMode; //FIXME
@@ -506,11 +500,11 @@
 #ifdef RUNTIME_CPUDETECT
 #ifdef ARCH_X86
 	// ordered per speed fasterst first
-	if(cpuCaps & PP_CPU_CAPS_MMX2)
+	if(c->cpuCaps & PP_CPU_CAPS_MMX2)
 		postProcess_MMX2(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
-	else if(cpuCaps & PP_CPU_CAPS_3DNOW)
+	else if(c->cpuCaps & PP_CPU_CAPS_3DNOW)
 		postProcess_3DNow(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
-	else if(cpuCaps & PP_CPU_CAPS_MMX)
+	else if(c->cpuCaps & PP_CPU_CAPS_MMX)
 		postProcess_MMX(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
 	else
 		postProcess_C(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
@@ -759,11 +753,13 @@
 	return ppMode;
 }
 
-void *pp_get_context(int width, int height){
+void *pp_get_context(int width, int height, int cpuCaps){
 	PPContext *c= memalign(32, sizeof(PPContext));
 	int i;
 	int mbWidth = (width+15)>>4;
 	int mbHeight= (height+15)>>4;
+	
+	c->cpuCaps= cpuCaps;
 
 	c->tempBlocks= (uint8_t*)memalign(8, 2*16*8);
 	c->yHistogram= (uint64_t*)memalign(8, 256*sizeof(uint64_t));
--- a/postproc/postprocess.h	Wed Oct 30 20:50:33 2002 +0000
+++ b/postproc/postprocess.h	Wed Oct 30 21:02:21 2002 +0000
@@ -95,10 +95,9 @@
 // name is the stuff after "-pp" on the command line
 PPMode pp_get_mode_by_name_and_quality(char *name, int quality);
 
-pp_context *pp_get_context(int width, int height);
+pp_context *pp_get_context(int width, int height, int cpuCaps);
 void pp_free_context(pp_context *ppContext);
 
-int pp_init(int cpuCaps);
 #define PP_CPU_CAPS_MMX   0x80000000
 #define PP_CPU_CAPS_MMX2  0x20000000
 #define PP_CPU_CAPS_3DNOW 0x40000000