diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2001-12-26 19:45:49 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2001-12-26 19:45:49 +0000 |
commit | 45b4f28550a0a1adcd58de1e31f056beb327854c (patch) | |
tree | 8c78bd213e540d2345a8094f2e1f921d9e6a0ffa /postproc/postprocess.c | |
parent | 3a842ea5d1917e0702a7dc6f0732052dd848ae05 (diff) | |
download | ffmpeg-45b4f28550a0a1adcd58de1e31f056beb327854c.tar.gz |
new -pp options stuff (-npp ...)
see line527@postproc/postprocess.c ;) for the documentation of the format
Originally committed as revision 3772 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc
Diffstat (limited to 'postproc/postprocess.c')
-rw-r--r-- | postproc/postprocess.c | 64 |
1 files changed, 46 insertions, 18 deletions
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]; } |