diff options
author | michael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-12-26 19:45:49 +0000 |
---|---|---|
committer | michael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-12-26 19:45:49 +0000 |
commit | 1eaa5eae03ccd7bbd44dbafe19ce0da1026be04c (patch) | |
tree | 3ef47d309bb8853dd0206281c2ac90d6fedb63c1 | |
parent | 63dc65aa4418254d436c5dda71002ff6e2aa25c2 (diff) | |
download | mpv-1eaa5eae03ccd7bbd44dbafe19ce0da1026be04c.tar.bz2 mpv-1eaa5eae03ccd7bbd44dbafe19ce0da1026be04c.tar.xz |
new -pp options stuff (-npp ...)
see line527@postproc/postprocess.c ;) for the documentation of the format
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3772 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | cfg-common.h | 1 | ||||
-rw-r--r-- | cfg-mencoder.h | 1 | ||||
-rw-r--r-- | cfg-mplayer.h | 2 | ||||
-rw-r--r-- | postproc/postprocess.c | 64 | ||||
-rw-r--r-- | postproc/postprocess.h | 2 |
5 files changed, 52 insertions, 18 deletions
diff --git a/cfg-common.h b/cfg-common.h index 5b16e54bbc..14c6f8d5bd 100644 --- a/cfg-common.h +++ b/cfg-common.h @@ -77,6 +77,7 @@ {"divxq", "Option -divxq has been renamed to -pp (postprocessing), use -pp !\n", CONF_TYPE_PRINT, 0, 0, 0}, {"pp", &divx_quality, CONF_TYPE_INT, CONF_MIN, 0, 63}, + {"npp", readPPOpt, CONF_TYPE_FUNC_PARAM, 0, 0, 0}, #ifdef HAVE_ODIVX_POSTPROCESS {"oldpp", &use_old_pp, CONF_TYPE_FLAG, 0, 0, 1}, #else diff --git a/cfg-mencoder.h b/cfg-mencoder.h index 2e564db7c6..38cda5f247 100644 --- a/cfg-mencoder.h +++ b/cfg-mencoder.h @@ -12,6 +12,7 @@ extern int use_old_pp; #endif extern int sws_flags; +extern int readPPOpt(void *, char *arg); #ifdef HAVE_DIVX4ENCORE struct config divx4opts_conf[]={ diff --git a/cfg-mplayer.h b/cfg-mplayer.h index c05ad7c3f7..24e7d5faa1 100644 --- a/cfg-mplayer.h +++ b/cfg-mplayer.h @@ -89,6 +89,8 @@ struct config ao_plugin_conf[]={ }; extern int sws_flags; +extern int readPPOpt(void *conf, char *arg); + /* * CONF_TYPE_FUNC_FULL : diff --git a/postproc/postprocess.c b/postproc/postprocess.c index 9011fbbb1b..979a9bbb59 100644 --- a/postproc/postprocess.c +++ b/postproc/postprocess.c @@ -143,6 +143,12 @@ static uint64_t packedYOffset= 0x0000000000000000LL; static uint64_t packedYScale= 0x0100010001000100LL; #endif +extern int divx_quality; +int newPPFlag=0; //is set if -npp is used +struct PPMode gPPMode[GET_PP_QUALITY_MAX+1]; + +extern int verbose; + int hFlatnessThreshold= 56 - 16; int vFlatnessThreshold= 56 - 16; int deringThreshold= 20; @@ -565,7 +571,7 @@ struct PPMode getPPModeByNameAndQuality(char *name, int quality) strncpy(temp, name, GET_MODE_BUFFER_SIZE); - printf("%s\n", name); + if(verbose) printf("%s\n", name); for(;;){ char *filterName; @@ -582,7 +588,7 @@ struct PPMode getPPModeByNameAndQuality(char *name, int quality) if(filterToken == NULL) break; p+= strlen(filterToken) + 1; // p points to next filterToken filterName= strtok(filterToken, optionDelimiters); - printf("%s::%s\n", filterToken, filterName); + if(verbose) printf("%s::%s\n", filterToken, filterName); if(*filterName == '-') { @@ -594,7 +600,7 @@ struct PPMode getPPModeByNameAndQuality(char *name, int quality) option= strtok(NULL, optionDelimiters); if(option == NULL) break; - printf("%s\n", option); + if(verbose) printf(" option: %s\n", option); if(!strcmp("autoq", option) || !strcmp("a", option)) q= quality; else if(!strcmp("nochrom", option) || !strcmp("y", option)) chrom=0; else if(!strcmp("chrom", option) || !strcmp("c", option)) chrom=1; @@ -700,11 +706,34 @@ struct PPMode getPPModeByNameAndQuality(char *name, int quality) if(ppMode.chromMode & DERING) ppMode.oldMode |= PP_DERING_C; #endif + if(verbose) printf("lumMode=%X, chromMode=%X\n", ppMode.lumMode, ppMode.chromMode); return ppMode; } /** + * Check and load the -npp part of the cmd line + */ +int readPPOpt(void *conf, char *arg) +{ + int quality; + for(quality=0; quality<GET_PP_QUALITY_MAX+1; quality++) + { + gPPMode[quality]= getPPModeByNameAndQuality(arg, quality); + + if(gPPMode[quality].error) return -1; + } + newPPFlag=1; + +// it shouldnt matter what we set divx_quality to as long as its not 0 +// (we dont use it if newPPFlag is set) + divx_quality=1; + return 1; +} + +/** * Obsolete, dont use it, use postprocess2() instead + * this will check newPPFlag automatically and use postprocess2 if it is set + * mode = quality if newPPFlag */ void postprocess(unsigned char * src[], int src_stride, unsigned char * dst[], int dst_stride, @@ -714,20 +743,17 @@ void postprocess(unsigned char * src[], int src_stride, { struct PPMode ppMode; static QP_STORE_T zeroArray[2048/8]; -/* - static int qual=0; - - ppMode= getPPModeByNameAndQuality("fast,default,-hdeblock,-vdeblock,tmpnoise:150:200:300", qual); - printf("OK\n"); - qual++; - qual%=7; - printf("\n%X %X %X %X :%d: %d %d %d\n", ppMode.lumMode, ppMode.chromMode, ppMode.oldMode, ppMode.error, - qual, ppMode.maxTmpNoise[0], ppMode.maxTmpNoise[1], ppMode.maxTmpNoise[2]); - postprocess2(src, src_stride, dst, dst_stride, - horizontal_size, vertical_size, QP_store, QP_stride, &ppMode); - - return; -*/ + + if(newPPFlag) + { + ppMode= gPPMode[mode]; + + postprocess2(src, src_stride, dst, dst_stride, + horizontal_size, vertical_size, QP_store, QP_stride, &ppMode); + + return; + } + if(QP_store==NULL) { QP_store= zeroArray; @@ -844,6 +870,7 @@ void postprocess2(unsigned char * src[], int src_stride, /** * gets the mode flags for a given quality (larger values mean slower but better postprocessing) + * with -npp it simply returns quality * 0 <= quality <= 6 */ int getPpModeForQuality(int quality){ @@ -880,7 +907,8 @@ int getPpModeForQuality(int quality){ }; if(use_old_pp) return odivx_modes[quality]; #endif - return modes[quality]; + if(newPPFlag) return quality; + else return modes[quality]; } diff --git a/postproc/postprocess.h b/postproc/postprocess.h index 1c6e25d7e3..36a7b17317 100644 --- a/postproc/postprocess.h +++ b/postproc/postprocess.h @@ -114,4 +114,6 @@ int getPpModeForQuality(int quality); // name is the stuff after "-pp" on the command line struct PPMode getPpModeByNameAndQuality(char *name, int quality); +int readPPOpt(void *conf, char *arg); + #endif |