X-Git-Url: https://git.piment-noir.org/?p=deb_x265.git;a=blobdiff_plain;f=source%2Fcommon%2Fparam.cpp;h=2159fd9226b70ba04943d7f365bcacf9696e9499;hp=af70058e5dcebae7e7e0e53391cacd44999c3c57;hb=b53f7c52d8280ab63876efd6eb292c21430ac607;hpb=5c9b45285dd64723ad1dac380b98a7b1f3095674 diff --git a/source/common/param.cpp b/source/common/param.cpp index af70058..2159fd9 100644 --- a/source/common/param.cpp +++ b/source/common/param.cpp @@ -176,6 +176,8 @@ void x265_param_default(x265_param *param) param->rdPenalty = 0; param->psyRd = 0.0; param->psyRdoq = 0.0; + param->analysisMode = 0; + param->analysisFileName = NULL; param->bIntraInBFrames = 0; param->bLossless = 0; param->bCULossless = 0; @@ -193,7 +195,7 @@ void x265_param_default(x265_param *param) param->rc.qpStep = 4; param->rc.rateControlMode = X265_RC_CRF; param->rc.qp = 32; - param->rc.aqMode = X265_AQ_AUTO_VARIANCE; + param->rc.aqMode = X265_AQ_VARIANCE; param->rc.aqStrength = 1.0; param->rc.cuTree = 1; param->rc.rfConstantMax = 0; @@ -406,6 +408,24 @@ int x265_param_default_preset(x265_param *param, const char *preset, const char param->scenecutThreshold = 0; param->rc.cuTree = 0; } + else if (!strcmp(tune, "grain")) + { + param->deblockingFilterBetaOffset = -2; + param->deblockingFilterTCOffset = -2; + param->bIntraInBFrames = 0; + param->psyRdoq = 30; + param->psyRd = 0.5; + param->rc.ipFactor = 1.1; + param->rc.pbFactor = 1.1; + param->rc.aqMode = X265_AQ_VARIANCE; + param->rc.aqStrength = 0.3; + param->rc.qCompress = 0.8; + } + else if (!strcmp(tune, "cbr")) + { + param->rc.pbFactor = 1.0; + param->rc.rateTolerance = 0.5; + } else return -1; } @@ -532,9 +552,6 @@ int x265_param_parse(x265_param *p, const char *name, const char *value) } } } - OPT("csv") p->csvfn = value; - OPT("scaling-list") p->scalingLists = value; - OPT("lambda-file") p->rc.lambdaFileName = value; OPT("threads") p->poolNumThreads = atoi(value); OPT("frame-threads") p->frameNumThreads = atoi(value); OPT("pmode") p->bDistributeModeAnalysis = atobool(value); @@ -623,7 +640,22 @@ int x265_param_parse(x265_param *p, const char *name, const char *value) OPT("psy-rdoq") p->psyRdoq = atof(value); OPT("signhide") p->bEnableSignHiding = atobool(value); OPT("b-intra") p->bIntraInBFrames = atobool(value); - OPT("lft") p->bEnableLoopFilter = atobool(value); + OPT("lft") p->bEnableLoopFilter = atobool(value); /* DEPRECATED */ + OPT("deblock") + { + if (2 == sscanf(value, "%d:%d", &p->deblockingFilterTCOffset, &p->deblockingFilterBetaOffset) || + 2 == sscanf(value, "%d,%d", &p->deblockingFilterTCOffset, &p->deblockingFilterBetaOffset)) + { + p->bEnableLoopFilter = true; + } + else if (sscanf(value, "%d", &p->deblockingFilterTCOffset)) + { + p->bEnableLoopFilter = 1; + p->deblockingFilterBetaOffset = p->deblockingFilterTCOffset; + } + else + p->bEnableLoopFilter = atobool(value); + } OPT("sao") p->bEnableSAO = atobool(value); OPT("sao-non-deblock") p->bSaoNonDeblocked = atobool(value); OPT("ssim") p->bEnableSsim = atobool(value); @@ -635,6 +667,11 @@ int x265_param_parse(x265_param *p, const char *name, const char *value) OPT("hrd") p->bEmitHRDSEI = atobool(value); OPT2("ipratio", "ip-factor") p->rc.ipFactor = atof(value); OPT2("pbratio", "pb-factor") p->rc.pbFactor = atof(value); + OPT("qcomp") p->rc.qCompress = atof(value); + OPT("qpstep") p->rc.qpStep = atoi(value); + OPT("ratetol") p->rc.rateTolerance = atof(value); + OPT("cplxblur") p->rc.complexityBlur = atof(value); + OPT("qblur") p->rc.qblur = atof(value); OPT("aq-mode") p->rc.aqMode = atoi(value); OPT("aq-strength") p->rc.aqStrength = atof(value); OPT("vbv-maxrate") p->rc.vbvMaxBitrate = atoi(value); @@ -729,7 +766,8 @@ int x265_param_parse(x265_param *p, const char *name, const char *value) &p->vui.defDispWinRightOffset, &p->vui.defDispWinBottomOffset) != 4; } - OPT("nr") p->noiseReduction = atoi(value); + OPT("nr-intra") p->noiseReductionIntra = atoi(value); + OPT("nr-inter") p->noiseReductionInter = atoi(value); OPT("pass") { int pass = Clip3(0, 3, atoi(value)); @@ -737,6 +775,10 @@ int x265_param_parse(x265_param *p, const char *name, const char *value) p->rc.bStatRead = pass & 2; } OPT("stats") p->rc.statFileName = strdup(value); + OPT("csv") p->csvfn = strdup(value); + OPT("scaling-list") p->scalingLists = strdup(value); + OPT("lambda-file") p->rc.lambdaFileName = strdup(value); + OPT("analysis-file") p->analysisFileName = strdup(value); else return X265_PARAM_BAD_NAME; #undef OPT @@ -960,6 +1002,10 @@ int x265_check_params(x265_param *param) "Aq-Mode is out of range"); CHECK(param->rc.aqStrength < 0 || param->rc.aqStrength > 3, "Aq-Strength is out of range"); + CHECK(param->deblockingFilterTCOffset < -6 || param->deblockingFilterTCOffset > 6, + "deblocking filter tC offset must be in the range of -6 to +6"); + CHECK(param->deblockingFilterBetaOffset < -6 || param->deblockingFilterBetaOffset > 6, + "deblocking filter Beta offset must be in the range of -6 to +6"); CHECK(param->psyRd < 0 || 2.0 < param->psyRd, "Psy-rd strength must be between 0 and 2.0"); CHECK(param->psyRdoq < 0 || 50.0 < param->psyRdoq, "Psy-rdoq strength must be between 0 and 50.0"); CHECK(param->bEnableWavefront < 0, "WaveFrontSynchro cannot be negative"); @@ -1031,8 +1077,12 @@ int x265_check_params(x265_param *param) "Valid initial VBV buffer occupancy must be a fraction 0 - 1, or size in kbits"); CHECK(param->rc.bitrate < 0, "Target bitrate can not be less than zero"); - if (param->noiseReduction) - CHECK(100 > param->noiseReduction || param->noiseReduction > 1000, "Valid noise reduction range 100 - 1000"); + CHECK(param->rc.qCompress < 0.5 || param->rc.qCompress > 1.0, + "qCompress must be between 0.5 and 1.0"); + if (param->noiseReductionIntra) + CHECK(0 > param->noiseReductionIntra || param->noiseReductionIntra > 2000, "Valid noise reduction range 0 - 2000"); + if (param->noiseReductionInter) + CHECK(0 > param->noiseReductionInter || param->noiseReductionInter > 2000, "Valid noise reduction range 0 - 2000"); CHECK(param->rc.rateControlMode == X265_RC_CRF && param->rc.bStatRead, "Constant rate-factor is incompatible with 2pass"); CHECK(param->rc.rateControlMode == X265_RC_CQP && param->rc.bStatRead, @@ -1061,7 +1111,7 @@ int x265_set_globals(x265_param *param) { static int once /* = 0 */; - if (ATOMIC_CAS32(&once, 0, 1) == 1) + if (ATOMIC_INC(&once) > 1) { if (param->maxCUSize != g_maxCUSize) { @@ -1152,11 +1202,19 @@ void x265_print_params(x265_param *param) fprintf(stderr, "psy-rd=%.2lf ", param->psyRd); if (param->psyRdoq > 0.) fprintf(stderr, "psy-rdoq=%.2lf ", param->psyRdoq); - TOOLOPT(param->bEnableEarlySkip, "esd"); - TOOLOPT(param->bEnableCbfFastMode, "cfm"); - if (param->noiseReduction) - fprintf(stderr, "nr=%d ", param->noiseReduction); - TOOLOPT(param->bEnableLoopFilter, "lft"); + TOOLOPT(param->bEnableEarlySkip, "early-skip"); + TOOLOPT(param->bEnableCbfFastMode, "fast-cbf"); + if (param->noiseReductionIntra) + fprintf(stderr, "nr-intra=%d ", param->noiseReductionIntra); + if (param->noiseReductionInter) + fprintf(stderr, "nr-inter=%d ", param->noiseReductionInter); + if (param->bEnableLoopFilter) + { + if (param->deblockingFilterBetaOffset || param->deblockingFilterTCOffset) + fprintf(stderr, "deblock(tC=%d:B=%d) ", param->deblockingFilterTCOffset, param->deblockingFilterBetaOffset); + else + TOOLOPT(param->bEnableLoopFilter, "deblock"); + } if (param->bEnableSAO) fprintf(stderr, "sao%s ", param->bSaoNonDeblocked ? "-non-deblock" : ""); TOOLOPT(param->bEnableSignHiding, "signhide");