[x265] [PATCH]Fix inconsistent output with aq-motion and tune grain

Yaswanth Sastry yaswanth.sastry at multicorewareinc.com
Thu Feb 20 10:12:29 UTC 2025


>From 4bd00afcb3c6b45ac5849cd16b354a321e68eba6 Mon Sep 17 00:00:00 2001
From: yaswanthsastry <yaswanth.sastry at multicorewareinc.com>
Date: Thu, 20 Feb 2025 14:59:34 +0530
Subject: [PATCH] Fix inconsistent output with aq-motion and tune grain

---
 source/common/lowres.cpp   | 14 ++++++++++++++
 source/encoder/encoder.cpp |  2 --
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/source/common/lowres.cpp b/source/common/lowres.cpp
index 1596f79da..257259cde 100644
--- a/source/common/lowres.cpp
+++ b/source/common/lowres.cpp
@@ -415,4 +415,18 @@ void Lowres::init(PicYuv *origPic, int poc)
             quarterSampleLowResStrideY,
             widthFullRes / 4, heightFullRes / 4);
     }
+    int cuCount = maxBlocksInRow * maxBlocksInCol;
+    int cuCountFullRes = (origPic->m_param->rc.qgSize > 8) ? cuCount : cuCount << 2;
+    memset(intraCost, 0, sizeof(int32_t) * cuCount);
+    if (!!origPic->m_param->rc.aqMode || !!origPic->m_param->rc.hevcAq || !!origPic->m_param->bAQMotion || !!origPic->m_param->bEnableWeightedPred || !!origPic->m_param->bEnableWeightedBiPred)
+        {
+        memset(qpAqOffset, 0.0, sizeof(double) * cuCountFullRes);
+        memset(invQscaleFactor, 0, sizeof(int) * cuCountFullRes);
+        memset(qpCuTreeOffset, 0.0, sizeof(double) * cuCountFullRes);
+        if (origPic->m_param->rc.qgSize == 8)
+             memset(invQscaleFactor8x8, 0, sizeof(int) * cuCount);
+        memset(edgeInclined, 0, sizeof(int) * cuCountFullRes);
+        }
+     if (origPic->m_param->bAQMotion)
+        memset(qpAqMotionOffset, 0.0, sizeof(double) * cuCountFullRes);
 }
diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp
index 5932d819f..cf2e95988 100644
--- a/source/encoder/encoder.cpp
+++ b/source/encoder/encoder.cpp
@@ -1599,8 +1599,6 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture* pic_out)
                 inFrame[layer]->m_encodeStartTime = x265_mdate();
                 /* Set lowres scencut and satdCost here to aovid overwriting ANALYSIS_READ
                    decision by lowres init*/
-                int cuCount = inFrame[layer]->m_lowres.maxBlocksInRow * inFrame[layer]->m_lowres.maxBlocksInCol;
-                memset(inFrame[layer]->m_lowres.intraCost, 0, sizeof(int32_t) * cuCount);
                 inFrame[layer]->m_lowres.bScenecut = false;
                 inFrame[layer]->m_lowres.satdCost = (int64_t)-1;
                 inFrame[layer]->m_lowresInit = false;
--
2.37.3.windows.1




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20250220/9fd01cd9/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patchaqmotion.diff
Type: application/octet-stream
Size: 2489 bytes
Desc: patchaqmotion.diff
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20250220/9fd01cd9/attachment-0001.obj>


More information about the x265-devel mailing list