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;
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;
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;
}
}
}
}
- 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);
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);
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);
&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));
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
"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");
"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,
{
static int once /* = 0 */;
- if (ATOMIC_CAS32(&once, 0, 1) == 1)
+ if (ATOMIC_INC(&once) > 1)
{
if (param->maxCUSize != g_maxCUSize)
{
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");