[x265] [PATCH] noiseReduction: allow separate strengths to be specified for intra and inter CUs
deepthi at multicorewareinc.com
deepthi at multicorewareinc.com
Thu Dec 4 07:01:30 CET 2014
# HG changeset patch
# User Deepthi Nandakumar <deepthi at multicorewareinc.com>
# Date 1417668578 -19800
# Thu Dec 04 10:19:38 2014 +0530
# Node ID 40ab64845edff9d5a9659875e1f8030cf179d0cb
# Parent 2f66c3284c35935df8e4b32e38d826e14277e365
noiseReduction: allow separate strengths to be specified for intra and inter CUs
diff -r 2f66c3284c35 -r 40ab64845edf source/CMakeLists.txt
--- a/source/CMakeLists.txt Wed Dec 03 21:35:10 2014 -0600
+++ b/source/CMakeLists.txt Thu Dec 04 10:19:38 2014 +0530
@@ -21,7 +21,7 @@
include(CheckCXXCompilerFlag)
# X265_BUILD must be incremented each time the public API is changed
-set(X265_BUILD 39)
+set(X265_BUILD 40)
configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
"${PROJECT_BINARY_DIR}/x265.def")
configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
diff -r 2f66c3284c35 -r 40ab64845edf source/common/param.cpp
--- a/source/common/param.cpp Wed Dec 03 21:35:10 2014 -0600
+++ b/source/common/param.cpp Thu Dec 04 10:19:38 2014 +0530
@@ -766,7 +766,8 @@
&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));
@@ -1078,8 +1079,10 @@
"Target bitrate can not be less than zero");
CHECK(param->rc.qCompress < 0.5 || param->rc.qCompress > 1.0,
"qCompress must be between 0.5 and 1.0");
- if (param->noiseReduction)
- CHECK(0 > param->noiseReduction || param->noiseReduction > 2000, "Valid noise reduction range 0 - 2000");
+ 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,
@@ -1201,8 +1204,10 @@
fprintf(stderr, "psy-rdoq=%.2lf ", param->psyRdoq);
TOOLOPT(param->bEnableEarlySkip, "early-skip");
TOOLOPT(param->bEnableCbfFastMode, "fast-cbf");
- if (param->noiseReduction)
- fprintf(stderr, "nr=%d ", param->noiseReduction);
+ 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)
diff -r 2f66c3284c35 -r 40ab64845edf source/encoder/frameencoder.cpp
--- a/source/encoder/frameencoder.cpp Wed Dec 03 21:35:10 2014 -0600
+++ b/source/encoder/frameencoder.cpp Thu Dec 04 10:19:38 2014 +0530
@@ -126,12 +126,12 @@
ok &= m_rce.picTimingSEI && m_rce.hrdTiming;
}
- if (m_param->noiseReduction)
+ if (m_param->noiseReductionIntra || m_param->noiseReductionInter)
m_nr = X265_MALLOC(NoiseReduction, 1);
if (m_nr)
memset(m_nr, 0, sizeof(NoiseReduction));
else
- m_param->noiseReduction = 0;
+ m_param->noiseReductionIntra = m_param->noiseReductionInter = 0;
start();
return ok;
@@ -1083,7 +1083,8 @@
m_nr->count[cat] >>= 1;
}
- uint64_t scaledCount = (uint64_t)m_param->noiseReduction * m_nr->count[cat];
+ int nrStrength = cat < 8 ? m_param->noiseReductionIntra : m_param->noiseReductionInter;
+ uint64_t scaledCount = (uint64_t)nrStrength * m_nr->count[cat];
for (int i = 0; i < coefCount; i++)
{
diff -r 2f66c3284c35 -r 40ab64845edf source/encoder/search.cpp
--- a/source/encoder/search.cpp Wed Dec 03 21:35:10 2014 -0600
+++ b/source/encoder/search.cpp Thu Dec 04 10:19:38 2014 +0530
@@ -72,7 +72,7 @@
m_me.subpelRefine = param.subpelRefine;
bool ok = m_quant.init(m_bEnableRDOQ, param.psyRdoq, scalingList, m_entropyCoder);
- if (m_param->noiseReduction)
+ if (m_param->noiseReductionIntra || m_param->noiseReductionInter)
ok &= m_quant.allocNoiseReduction(param);
ok &= Predict::allocBuffers(param.internalCsp); /* sets m_hChromaShift & m_vChromaShift */
diff -r 2f66c3284c35 -r 40ab64845edf source/x265.cpp
--- a/source/x265.cpp Wed Dec 03 21:35:10 2014 -0600
+++ b/source/x265.cpp Thu Dec 04 10:19:38 2014 +0530
@@ -210,7 +210,8 @@
{ "lambda-file", required_argument, NULL, 0 },
{ "b-intra", no_argument, NULL, 0 },
{ "no-b-intra", no_argument, NULL, 0 },
- { "nr", required_argument, NULL, 0 },
+ { "nr-intra", required_argument, NULL, 0 },
+ { "nr-inter", required_argument, NULL, 0 },
{ "stats", required_argument, NULL, 0 },
{ "pass", required_argument, NULL, 0 },
{ "slow-firstpass", no_argument, NULL, 0 },
@@ -401,7 +402,8 @@
H0(" --[no-]early-skip Enable early SKIP detection. Default %s\n", OPT(param->bEnableEarlySkip));
H1(" --[no-]fast-cbf Enable early outs based on whether residual is coded. Default %s\n", OPT(param->bEnableCbfFastMode));
H1(" --[no-]tskip-fast Enable fast intra transform skipping. Default %s\n", OPT(param->bEnableTSkipFast));
- H1(" --nr <integer> An integer value in range of 0 to 2000, which denotes strength of noise reduction. Default 0\n");
+ H1(" --nr-intra <integer> An integer value in range of 0 to 2000, which denotes strength of noise reduction in intra CUs. Default 0\n");
+ H1(" --nr-inter <integer> An integer value in range of 0 to 2000, which denotes strength of noise reduction in inter CUs. Default 0\n");
H0("\nCoding tools:\n");
H0("-w/--[no-]weightp Enable weighted prediction in P slices. Default %s\n", OPT(param->bEnableWeightedPred));
H0(" --[no-]weightb Enable weighted prediction in B slices. Default %s\n", OPT(param->bEnableWeightedBiPred));
diff -r 2f66c3284c35 -r 40ab64845edf source/x265.h
--- a/source/x265.h Wed Dec 03 21:35:10 2014 -0600
+++ b/source/x265.h Thu Dec 04 10:19:38 2014 +0530
@@ -755,9 +755,13 @@
* regardless of this setting. */
int bIntraInBFrames;
- /* An integer value in range of 0 to 1000, which denotes strength of noise
- * reduction. 0 means disabled */
- int noiseReduction;
+ /* An integer value in range of 0 to 2000, which denotes strength of noise
+ * reduction in intra CUs. 0 means disabled */
+ int noiseReductionIntra;
+
+ /* An integer value in range of 0 to 2000, which denotes strength of noise
+ * reduction in intra CUs. 0 means disabled */
+ int noiseReductionInter;
/* The lossless flag enables true lossless coding, by bypassing scaling,
* transform, quantization and in-loop filter processes. This is used for
More information about the x265-devel
mailing list