|
|
@@ -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]; |
|
|
|
} |
|
|
|
|
|
|
|
|