summaryrefslogtreecommitdiffstats
path: root/postproc
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-12-28 13:56:04 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-12-28 13:56:04 +0000
commit0c4138440d91db5ce6a36e60c5616c427b1619ec (patch)
tree8257ce353372314ad682022f56ec867d75ff56a1 /postproc
parent2ef40475313bda1b608b6d53cb787d7d04061997 (diff)
downloadmpv-0c4138440d91db5ce6a36e60c5616c427b1619ec.tar.bz2
mpv-0c4138440d91db5ce6a36e60c5616c427b1619ec.tar.xz
minor brightness/contrast bugfix / moved some global vars into ppMode
non mmx compilation bugfix git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3833 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'postproc')
-rw-r--r--postproc/postprocess.c27
-rw-r--r--postproc/postprocess.h2
-rw-r--r--postproc/postprocess_template.c21
3 files changed, 29 insertions, 21 deletions
diff --git a/postproc/postprocess.c b/postproc/postprocess.c
index b1d1918ca9..dfcb72de0a 100644
--- a/postproc/postprocess.c
+++ b/postproc/postprocess.c
@@ -47,6 +47,7 @@ c = checked against the other implementations (-vo md5)
/*
TODO:
+remove global/static vars
reduce the time wasted on the mem transfer
implement everything in C at least (done at the moment but ...)
unroll stuff if instructions depend too much on the prior one
@@ -153,15 +154,12 @@ int hFlatnessThreshold= 56 - 16;
int vFlatnessThreshold= 56 - 16;
int deringThreshold= 20;
-static int dcOffset= 1;
-static int dcThreshold= 3;
+static int dcOffset;
+static int dcThreshold;
//amount of "black" u r willing to loose to get a brightness corrected picture
double maxClippedThreshold= 0.01;
-int maxAllowedY=234;
-int minAllowedY=16;
-
static struct PPFilter filters[]=
{
{"hb", "hdeblock", 1, 1, 3, H_DEBLOCK},
@@ -672,6 +670,7 @@ struct PPMode getPPModeByNameAndQuality(char *name, int quality)
ppMode.minAllowedY= 16;
ppMode.maxAllowedY= 234;
for(o=0; options[o]!=NULL; o++)
+ {
if( !strcmp(options[o],"fullyrange")
||!strcmp(options[o],"f"))
{
@@ -679,6 +678,7 @@ struct PPMode getPPModeByNameAndQuality(char *name, int quality)
ppMode.maxAllowedY= 255;
numOfUnknownOptions--;
}
+ }
}
else if(filters[i].mask == TEMP_NOISE_FILTER)
{
@@ -704,6 +704,9 @@ struct PPMode getPPModeByNameAndQuality(char *name, int quality)
else if(filters[i].mask == V_DEBLOCK || filters[i].mask == H_DEBLOCK)
{
int o;
+ ppMode.maxDcDiff=1;
+// hFlatnessThreshold= 40;
+// vFlatnessThreshold= 40;
for(o=0; options[o]!=NULL && o<2; o++)
{
@@ -712,16 +715,7 @@ struct PPMode getPPModeByNameAndQuality(char *name, int quality)
if(tail==options[o]) break;
numOfUnknownOptions--;
- if(o==0)
- {
- dcOffset= val;
- dcThreshold= 2*val+1;
- mmxDCOffset= 0x7F - val;
- mmxDCThreshold= 0x7F - 2*val - 1;
-
- mmxDCOffset*= 0x0101010101010101LL;
- mmxDCThreshold*= 0x0101010101010101LL;
- }
+ if(o==0) ppMode.maxDcDiff= val;
else hFlatnessThreshold=
vFlatnessThreshold= val;
}
@@ -800,6 +794,9 @@ void postprocess(unsigned char * src[], int src_stride,
ppMode.maxTmpNoise[0]= 700;
ppMode.maxTmpNoise[1]= 1500;
ppMode.maxTmpNoise[2]= 3000;
+ ppMode.maxAllowedY= 234;
+ ppMode.minAllowedY= 16;
+ ppMode.maxDcDiff= 1;
#ifdef HAVE_ODIVX_POSTPROCESS
// Note: I could make this shit outside of this file, but it would mean one
diff --git a/postproc/postprocess.h b/postproc/postprocess.h
index 36a7b17317..c6a9dbe3a1 100644
--- a/postproc/postprocess.h
+++ b/postproc/postprocess.h
@@ -85,6 +85,8 @@ struct PPMode{
int maxAllowedY; // for brihtness correction
int maxTmpNoise[3]; // for Temporal Noise Reducing filter (Maximal sum of abs differences)
+
+ int maxDcDiff; // max abs diff between pixels to be considered flat
};
struct PPFilter{
diff --git a/postproc/postprocess_template.c b/postproc/postprocess_template.c
index 8ceeab1d00..6ad9819858 100644
--- a/postproc/postprocess_template.c
+++ b/postproc/postprocess_template.c
@@ -2615,11 +2615,20 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int
long long memcpyTime=0, vertTime=0, horizTime=0, sumTime;
sumTime= rdtsc();
#endif
-//mode= 0x7F;
+
+ dcOffset= ppMode->maxDcDiff;
+ dcThreshold= ppMode->maxDcDiff*2 + 1;
+
#ifdef HAVE_MMX
maxTmpNoise[0]= ppMode->maxTmpNoise[0];
maxTmpNoise[1]= ppMode->maxTmpNoise[1];
maxTmpNoise[2]= ppMode->maxTmpNoise[2];
+
+ mmxDCOffset= 0x7F - dcOffset;
+ mmxDCThreshold= 0x7F - dcThreshold;
+
+ mmxDCOffset*= 0x0101010101010101LL;
+ mmxDCThreshold*= 0x0101010101010101LL;
#endif
if(mode & CUBIC_IPOL_DEINT_FILTER) copyAhead=16;
@@ -2662,8 +2671,8 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int
if(mode & FULL_Y_RANGE)
{
- maxAllowedY=255;
- minAllowedY=0;
+ ppMode->maxAllowedY=255;
+ ppMode->minAllowedY=0;
}
}
@@ -2703,14 +2712,14 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int
clipped-= yHistogram[white];
}
- scale= (double)(maxAllowedY - minAllowedY) / (double)(white-black);
+ scale= (double)(ppMode->maxAllowedY - ppMode->minAllowedY) / (double)(white-black);
#ifdef HAVE_MMX2
packedYScale= (uint16_t)(scale*256.0 + 0.5);
- packedYOffset= (((black*packedYScale)>>8) - minAllowedY) & 0xFFFF;
+ packedYOffset= (((black*packedYScale)>>8) - ppMode->minAllowedY) & 0xFFFF;
#else
packedYScale= (uint16_t)(scale*1024.0 + 0.5);
- packedYOffset= (black - minAllowedY) & 0xFFFF;
+ packedYOffset= (black - ppMode->minAllowedY) & 0xFFFF;
#endif
packedYOffset|= packedYOffset<<32;