[x265] [PATCH 14/14] Cleanup and Fix warnings
Snehaa Giridharan
snehaa at multicorewareinc.com
Wed Oct 19 07:39:25 UTC 2022
>From 7532117d7a4161b05df3f80103ff149699688d82 Mon Sep 17 00:00:00 2001
From: Snehaa Giridharan <snehaa at multicorewareinc.com>
Date: Wed, 19 Oct 2022 12:40:51 +0530
Subject: [PATCH] Cleanup and Fix warnings
Also modifies cli.rst
---
doc/reST/cli.rst | 5 +
source/CMakeLists.txt | 2 +-
source/common/temporalfilter.cpp | 228 +------------------------------
source/common/temporalfilter.h | 11 --
source/encoder/dpb.cpp | 2 +-
5 files changed, 10 insertions(+), 238 deletions(-)
diff --git a/doc/reST/cli.rst b/doc/reST/cli.rst
index be32fc6cc..9fa12fa92 100755
--- a/doc/reST/cli.rst
+++ b/doc/reST/cli.rst
@@ -1328,6 +1328,11 @@ Temporal / motion search options
Search range for HME level 0, 1 and 2.
The Search Range for each HME level must be between 0 and
32768(excluding).
Default search range is 16,32,48 for level 0,1,2 respectively.
+
+.. option:: --mcstf, --no-mcstf
+
+ Enable Motion Compensated Temporal filtering.
+ Default: disabled
Spatial/intra options
=====================
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 8a93a8bc4..04ceea0ec 100755
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -29,7 +29,7 @@ option(NATIVE_BUILD "Target the build CPU" OFF)
option(STATIC_LINK_CRT "Statically link C runtime for release builds" OFF)
mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)
# X265_BUILD must be incremented each time the public API is changed
-set(X265_BUILD 205)
+set(X265_BUILD 206)
configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
"${PROJECT_BINARY_DIR}/x265.def")
configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
diff --git a/source/common/temporalfilter.cpp
b/source/common/temporalfilter.cpp
index d178c5800..01a6ddf15 100644
--- a/source/common/temporalfilter.cpp
+++ b/source/common/temporalfilter.cpp
@@ -494,113 +494,6 @@ void TemporalFilter::applyMotion(MV *mvs, uint32_t
mvsStride, PicYuv *input, Pic
}
}
-#if 0
-/*
-* Old Version: bilateralFilter
-*/
-void TemporalFilter::bilateralFilter(Frame* frame,
- TemporalFilterRefPicInfo* m_mcstfRefList,
- double overallStrength)
-{
-
- const int numRefs = frame->m_mcstf->m_numRef;
-
- for (int i = 0; i < numRefs; i++)
- {
- TemporalFilterRefPicInfo *ref = &m_mcstfRefList[i];
- applyMotion(m_mcstfRefList[i].mvs, m_mcstfRefList[i].mvsStride,
m_mcstfRefList[i].picBuffer, ref->compensatedPic);
- }
-
- int refStrengthRow = 2;
- if (numRefs == m_range * 2)
- {
- refStrengthRow = 0;
- }
- else if (numRefs == m_range)
- {
- refStrengthRow = 1;
- }
-
- const double lumaSigmaSq = (m_QP - m_sigmaZeroPoint) * (m_QP -
m_sigmaZeroPoint) * m_sigmaMultiplier;
- const double chromaSigmaSq = 30 * 30;
-
- PicYuv* orgPic = frame->m_fencPic;
-
- for (int c = 0; c < m_numComponents; c++)
- {
- int height, width;
- pixel *srcPelRow = NULL;
- intptr_t srcStride, correctedPicsStride = 0;
-
- if (!c)
- {
- height = orgPic->m_picHeight;
- width = orgPic->m_picWidth;
- srcPelRow = orgPic->m_picOrg[c];
- srcStride = orgPic->m_stride;
- }
- else
- {
- int csx = CHROMA_H_SHIFT(m_internalCsp);
- int csy = CHROMA_V_SHIFT(m_internalCsp);
-
- height = orgPic->m_picHeight >> csy;
- width = orgPic->m_picWidth >> csx;
- srcPelRow = orgPic->m_picOrg[c];
- srcStride = (int)orgPic->m_strideC;
- }
-
- const double sigmaSq = (!c) ? lumaSigmaSq : chromaSigmaSq;
- const double weightScaling = overallStrength * ((!c) ? 0.4 :
m_chromaFactor);
-
- const pixel maxSampleValue = (1 << m_bitDepth) - 1;
- const double bitDepthDiffWeighting = 1024.0 / (maxSampleValue + 1);
-
- for (int y = 0; y < height; y++, srcPelRow += srcStride)
- {
- pixel *srcPel = srcPelRow;
-
- for (int x = 0; x < width; x++, srcPel++)
- {
- const int orgVal = (int)*srcPel;
- double temporalWeightSum = 1.0;
- double newVal = (double)orgVal;
-
- for (int i = 0; i < numRefs; i++)
- {
- TemporalFilterRefPicInfo *refPicInfo =
&m_mcstfRefList[i];
-
- if (!c)
- correctedPicsStride =
refPicInfo->compensatedPic->m_stride;
- else
- correctedPicsStride =
refPicInfo->compensatedPic->m_strideC;
-
- const pixel *pCorrectedPelPtr =
refPicInfo->compensatedPic->m_picOrg[c] + (y * correctedPicsStride + x);
- const int refVal = (int)*pCorrectedPelPtr;
- double diff = (double)(refVal - orgVal);
- diff *= bitDepthDiffWeighting;
- double diffSq = diff * diff;
-
- const int index = X265_MIN(1,
std::abs(refPicInfo->origOffset) - 1);
- const double weight = weightScaling *
s_refStrengths[refStrengthRow][index] * exp(-diffSq / (2 * sigmaSq));
-
- newVal += weight * refVal;
- temporalWeightSum += weight;
- }
- newVal /= temporalWeightSum;
- pixel sampleVal = (pixel)round(newVal);
- sampleVal = (sampleVal < 0 ? 0 : (sampleVal >
maxSampleValue ? maxSampleValue : sampleVal));
- *srcPel = sampleVal;
- }
- }
- }
-}
-
-#else
-
-/*
-* New Version: bilateralFilter
-*/
void TemporalFilter::bilateralFilter(Frame* frame,
TemporalFilterRefPicInfo* m_mcstfRefList,
double overallStrength)
@@ -656,7 +549,7 @@ void TemporalFilter::bilateralFilter(Frame* frame,
const double sigmaSq = (!c) ? lumaSigmaSq : chromaSigmaSq;
const double weightScaling = overallStrength * ( (!c) ? 0.4 :
m_chromaFactor);
- const pixel maxSampleValue = (1 << m_bitDepth) - 1;
+ const double maxSampleValue = (1 << m_bitDepth) - 1;
const double bitDepthDiffWeighting = 1024.0 / (maxSampleValue + 1);
const int blkSize = (!c) ? 8 : 4;
@@ -742,128 +635,14 @@ void TemporalFilter::bilateralFilter(Frame* frame,
temporalWeightSum += weight;
}
newVal /= temporalWeightSum;
- pixel sampleVal = (pixel)round(newVal);
+ double sampleVal = round(newVal);
sampleVal = (sampleVal < 0 ? 0 : (sampleVal >
maxSampleValue ? maxSampleValue : sampleVal));
- *srcPel = sampleVal;
- }
- }
- }
-}
-#endif
-
-#if 0
-/*Old Version: motionEstimationLuma*/
-
-void TemporalFilter::motionEstimationLuma(MV *mvs, uint32_t mvStride,
PicYuv *orig, PicYuv *buffer, int blockSize,
- MV *previous, uint32_t prevMvStride, int factor, bool doubleRes, int*
minError)
-{
-
- int range = 5;
-
-
- const int stepSize = blockSize;
-
- const int origWidth = orig->m_picWidth;
- const int origHeight = orig->m_picHeight;
-
-
- for (int blockY = 0; blockY + blockSize < origHeight; blockY +=
stepSize)
- {
- for (int blockX = 0; blockX + blockSize < origWidth; blockX +=
stepSize)
- {
- MV best(0, 0);
- int leastError = INT_MAX;
-
- if (previous == NULL)
- {
- range = 8;
- }
- else
- {
-
- for (int py = -2; py <= 2; py++)
- {
- int testy = blockY / (2 * blockSize) + py;
-
- for (int px = -2; px <= 2; px++)
- {
-
- int testx = blockX / (2 * blockSize) + px;
- if ((testx >= 0) && (testx < origWidth / (2 *
blockSize)) && (testy >= 0) && (testy < origHeight / (2 * blockSize)))
- {
- int mvIdx = testy * prevMvStride + testx;
- MV old = previous[mvIdx];
-
- int error = motionErrorLuma(orig, buffer,
blockX, blockY, old.x * factor, old.y * factor, blockSize, leastError);
- if (error < leastError)
- {
- best.set(old.x * factor, old.y * factor);
- leastError = error;
- }
- }
- }
- }
-
- }
-
- MV prevBest = best;
- for (int y2 = prevBest.y / s_motionVectorFactor - range; y2 <=
prevBest.y / s_motionVectorFactor + range; y2++)
- {
- for (int x2 = prevBest.x / s_motionVectorFactor - range;
x2 <= prevBest.x / s_motionVectorFactor + range; x2++)
- {
- int error = motionErrorLuma(orig, buffer, blockX,
blockY, x2 * s_motionVectorFactor, y2 * s_motionVectorFactor, blockSize,
leastError/*best.error*/);
- if (error < leastError)
- {
- best.set(x2 * s_motionVectorFactor, y2 *
s_motionVectorFactor);
- leastError = error;
- }
- }
- }
-
- if (doubleRes)
- { // merge into one loop, probably with precision array (here
[12, 3] or maybe [4, 1]) with setable number of iterations
- prevBest = best;
- int doubleRange = 3 * 4;
- for (int y2 = prevBest.y - doubleRange; y2 <= prevBest.y +
doubleRange; y2 += 4)
- {
- for (int x2 = prevBest.x - doubleRange; x2 <=
prevBest.x + doubleRange; x2 += 4)
- {
- int error = motionErrorLuma(orig, buffer, blockX,
blockY, x2, y2, blockSize, leastError);
- if (error < leastError)
- {
- best.set(x2, y2);
- leastError = error;
- }
- }
- }
-
- prevBest = best;
- doubleRange = 3;
- for (int y2 = prevBest.y - doubleRange; y2 <= prevBest.y +
doubleRange; y2++)
- {
- for (int x2 = prevBest.x - doubleRange; x2 <=
prevBest.x + doubleRange; x2++)
- {
- int error = motionErrorLuma(orig, buffer, blockX,
blockY, x2, y2, blockSize, leastError);
- if (error < leastError)
- {
- best.set(x2, y2);
- leastError = error;
- }
- }
- }
+ *srcPel = (pixel)sampleVal;
}
-
- int mvIdx = (blockY / stepSize) * mvStride + (blockX /
stepSize);
- mvs[mvIdx] = best;
- if (doubleRes)
- minError[mvIdx] = leastError;
}
}
}
-#else
-
-/*New Version: motionEstimationLuma*/
void TemporalFilter::motionEstimationLuma(MV *mvs, uint32_t mvStride,
PicYuv *orig, PicYuv *buffer, int blockSize,
MV *previous, uint32_t prevMvStride, int factor)
{
@@ -1211,7 +990,6 @@ void TemporalFilter::motionEstimationLumaDoubleRes(MV
*mvs, uint32_t mvStride, P
}
}
}
-#endif
void TemporalFilter::destroyRefPicInfo(TemporalFilterRefPicInfo* curFrame)
{
diff --git a/source/common/temporalfilter.h b/source/common/temporalfilter.h
index 55ae6736d..10f0c52b4 100644
--- a/source/common/temporalfilter.h
+++ b/source/common/temporalfilter.h
@@ -35,8 +35,6 @@
using namespace X265_NS;
-#define BILTERAL_FILTER_NEW_VERSION 1
-
const int s_interpolationFilter[16][8] =
{
{ 0, 0, 0, 64, 0, 0, 0, 0 }, //0
@@ -57,7 +55,6 @@ const int s_interpolationFilter[16][8] =
{ 0, 0, -2, 4, 64, -3, 1, 0 } //15-->-->
};
-#if BILTERAL_FILTER_NEW_VERSION
const double s_refStrengths[3][4] =
{ // abs(POC offset)
// 1, 2 3 4
@@ -65,14 +62,6 @@ const double s_refStrengths[3][4] =
{1.13, 0.97, 0.81, 0.57}, // m_range
{0.30, 0.30, 0.30, 0.30} // otherwise
};
-#else
-const double s_refStrengths[2][2] =
-{ // abs(POC offset)
- // 1, 2
- {0.85, 0.60}, // w future refs
- {1.20, 1.00}, // w/o future refs
-};
-#endif
class OrigPicBuffer
{
diff --git a/source/encoder/dpb.cpp b/source/encoder/dpb.cpp
index 9292b6c75..79274f5dd 100644
--- a/source/encoder/dpb.cpp
+++ b/source/encoder/dpb.cpp
@@ -73,7 +73,7 @@ void DPB::recycleUnreferenced()
bool isMCSTFReferenced = false;
if (curFrame->m_param->bEnableTemporalFilter)
- isMCSTFReferenced = curFrame->m_refPicCnt[1];
+ isMCSTFReferenced =!!(curFrame->m_refPicCnt[1]);
if (!curFrame->m_encData->m_bHasReferences &&
!curFrame->m_countRefEncoders && !isMCSTFReferenced)
{
--
2.37.2.windows.2
*Thanks and Regards,*
*Snehaa.GVideo Codec Engineer,Media & AI analytics
<https://multicorewareinc.com/>*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20221019/bf7c6bc6/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: mcstf_patch_14.diff
Type: application/octet-stream
Size: 13022 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20221019/bf7c6bc6/attachment-0001.obj>
More information about the x265-devel
mailing list