1
0
mirror of https://github.com/mpv-player/mpv synced 2025-01-24 00:23:27 +00:00
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7964 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
michael 2002-10-29 20:12:24 +00:00
parent f5929b0a59
commit de382c1b8c
4 changed files with 48 additions and 55 deletions

View File

@ -2,6 +2,7 @@
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include <errno.h>
#include "../config.h"
#include "../mp_msg.h"
@ -173,6 +174,29 @@ static int open(vf_instance_t *vf, char* args){
return 1;
}
int readPPOpt(void *conf, char *arg)
{
int val;
if(arg == NULL)
return -2; // ERR_MISSING_PARAM
errno = 0;
val = (int)strtol(arg,NULL,0);
if(errno != 0)
return -4; // What about include cfgparser.h and use ERR_* defines */
if(val < 0)
return -3; // ERR_OUT_OF_RANGE
divx_quality = val;
return 1;
}
void revertPPOpt(void *conf, char* opt)
{
divx_quality=0;
}
vf_info_t vf_info_pp = {
"postprocessing",
"pp",

View File

@ -47,10 +47,8 @@ c = checked against the other implementations (-vo md5)
/*
TODO:
remove global/static vars
reduce the time wasted on the mem transfer
unroll stuff if instructions depend too much on the prior one
we use 8x8 blocks for the horizontal filters, opendivx seems to use 8x4?
move YScale thing to the end instead of fixing QP
write a faster and higher quality deblocking filter :)
make the mainloop more flexible (variable number of blocks at once
@ -69,7 +67,6 @@ try to unroll inner for(x=0 ... loop to avoid these damn if(x ... checks
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#ifdef HAVE_MALLOC_H
#include <malloc.h>
#endif
@ -104,15 +101,9 @@ static uint64_t __attribute__((aligned(8))) b08= 0x0808080808080808LL;
static uint64_t __attribute__((aligned(8))) b80= 0x8080808080808080LL;
#endif
extern int divx_quality;
static int firstTime2 = 0;
static int verbose= 0;
extern int verbose;
int deringThreshold= 20;
//amount of "black" u r willing to loose to get a brightness corrected picture
double maxClippedThreshold= 0.01;
static const int deringThreshold= 20;
struct PPFilter{
char *shortName;
@ -593,11 +584,21 @@ struct PPMode pp_get_mode_by_name_and_quality(char *name, int quality)
char *p= temp;
char *filterDelimiters= ",/";
char *optionDelimiters= ":";
struct PPMode ppMode= {0,0,0,0,0,{150,200,400}};
struct PPMode ppMode;
char *filterToken;
ppMode.lumMode= 0;
ppMode.chromMode= 0;
ppMode.maxTmpNoise[0]= 700;
ppMode.maxTmpNoise[1]= 1500;
ppMode.maxTmpNoise[2]= 3000;
ppMode.maxAllowedY= 234;
ppMode.minAllowedY= 16;
ppMode.baseDcDiff= 256/4;
ppMode.flatnessThreshold=40;
ppMode.flatnessThreshold= 56-16;
ppMode.maxClippedThreshold= 0.01;
strncpy(temp, name, GET_MODE_BUFFER_SIZE);
if(verbose>1) printf("pp: %s\n", name);
@ -705,9 +706,6 @@ struct PPMode pp_get_mode_by_name_and_quality(char *name, int quality)
{
int o;
int numOfNoises=0;
ppMode.maxTmpNoise[0]= 150;
ppMode.maxTmpNoise[1]= 200;
ppMode.maxTmpNoise[2]= 400;
for(o=0; options[o]!=NULL; o++)
{
@ -725,9 +723,6 @@ struct PPMode pp_get_mode_by_name_and_quality(char *name, int quality)
else if(filters[i].mask == V_DEBLOCK || filters[i].mask == H_DEBLOCK)
{
int o;
ppMode.baseDcDiff=256/4;
// hFlatnessThreshold= 40;
// vFlatnessThreshold= 40;
for(o=0; options[o]!=NULL && o<2; o++)
{
@ -818,32 +813,6 @@ void pp_free_context(void *vc){
free(c);
}
//FIXME move this shit away from here
int readPPOpt(void *conf, char *arg)
{
int val;
if(arg == NULL)
return -2; // ERR_MISSING_PARAM
errno = 0;
val = (int)strtol(arg,NULL,0);
if(errno != 0)
return -4; // What about include cfgparser.h and use ERR_* defines */
if(val < 0)
return -3; // ERR_OUT_OF_RANGE
divx_quality = val;
firstTime2 = 1;
return 1;
}
void revertPPOpt(void *conf, char* opt)
{
divx_quality=0;
}
void pp_postprocess(uint8_t * src[3], int srcStride[3],
uint8_t * dst[3], int dstStride[3],
int width, int height,
@ -889,10 +858,9 @@ for(y=0; y<mbHeight; y++){
}
}
if(firstTime2 && verbose)
if(verbose>2)
{
printf("using npp filters 0x%X/0x%X\n", mode->lumMode, mode->chromMode);
firstTime2=0;
}
postProcess(src[0], srcStride[0], dst[0], dstStride[0],

View File

@ -68,19 +68,20 @@ char *pp_help;
//FIXME decide if this should be exported at all
typedef struct PPMode{
int lumMode; //acivates filters for luminance
int chromMode; //acivates filters for chrominance
int error; // non zero on error
int lumMode; // acivates filters for luminance
int chromMode; // acivates filters for chrominance
int error; // non zero on error
int minAllowedY; // for brigtness correction
int maxAllowedY; // for brihtness correction
int minAllowedY; // for brigtness correction
int maxAllowedY; // for brihtness correction
float maxClippedThreshold; // amount of "black" u r willing to loose to get a brightness corrected picture
int maxTmpNoise[3]; // for Temporal Noise Reducing filter (Maximal sum of abs differences)
int maxTmpNoise[3]; // for Temporal Noise Reducing filter (Maximal sum of abs differences)
int baseDcDiff;
int flatnessThreshold;
int forcedQuant; // quantizer if FORCE_QUANT is used
int forcedQuant; // quantizer if FORCE_QUANT is used
} PPMode;
void pp_postprocess(uint8_t * src[3], int srcStride[3],

View File

@ -2711,7 +2711,7 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int
// printf("\n\n");
/* we allways get a completly black picture first */
maxClipped= (uint64_t)(sum * maxClippedThreshold);
maxClipped= (uint64_t)(sum * c.ppMode.maxClippedThreshold);
clipped= sum;
for(black=255; black>0; black--)