<div dir="ltr">From c833d87574e219aeb85409ec8897bc1047dd73fc Mon Sep 17 00:00:00 2001<br>From: Niranjan <<a href="mailto:niranjan@multicorewareinc.com">niranjan@multicorewareinc.com</a>><br>Date: Thu, 25 Mar 2021 12:07:30 +0530<br>Subject: [PATCH] 1)Enable --scenecut-aware-qp with --crf in pass 2 2)Increased<br> qpDelta limit to 20 3)Fix: Access violation when aqMode=0 + qgSize=8<br><br>---<br> source/common/lowres.cpp       |  2 +-<br> source/common/param.cpp        | 16 ++++++++--------<br> source/encoder/ratecontrol.cpp | 10 ++++++++++<br> 3 files changed, 19 insertions(+), 9 deletions(-)<br><br>diff --git a/source/common/lowres.cpp b/source/common/lowres.cpp<br>index 578981d64..334640ec9 100644<br>--- a/source/common/lowres.cpp<br>+++ b/source/common/lowres.cpp<br>@@ -73,7 +73,7 @@ bool Lowres::create(x265_param* param, PicYuv *origPic, uint32_t qgSize)<br> <br>     size_t planesize = lumaStride * (lines + 2 * origPic->m_lumaMarginY);<br>     size_t padoffset = lumaStride * origPic->m_lumaMarginY + origPic->m_lumaMarginX;<br>-    if (!!param->rc.aqMode || !!param->rc.hevcAq || !!param->bAQMotion)<br>+    if (!!param->rc.aqMode || !!param->rc.hevcAq || !!param->bAQMotion || !!param->bEnableWeightedPred || !!param->bEnableWeightedBiPred)<br>     {<br>         CHECKED_MALLOC_ZERO(qpAqOffset, double, cuCountFullRes);<br>         CHECKED_MALLOC_ZERO(invQscaleFactor, int, cuCountFullRes);<br>diff --git a/source/common/param.cpp b/source/common/param.cpp<br>index fb74d759b..2800c45f7 100755<br>--- a/source/common/param.cpp<br>+++ b/source/common/param.cpp<br>@@ -1858,17 +1858,17 @@ int x265_check_params(x265_param* param)<br>             "Invalid masking direction. Value must be between 0 and 3(inclusive)");<br>             CHECK(param->fwdScenecutWindow < 0 || param->fwdScenecutWindow > 1000,<br>             "Invalid forward scenecut Window duration. Value must be between 0 and 1000(inclusive)");<br>-            CHECK(param->fwdRefQpDelta < 0 || param->fwdRefQpDelta > 10,<br>-            "Invalid fwdRefQpDelta value. Value must be between 0 and 10 (inclusive)");<br>-            CHECK(param->fwdNonRefQpDelta < 0 || param->fwdNonRefQpDelta > 10,<br>-            "Invalid fwdNonRefQpDelta value. Value must be between 0 and 10 (inclusive)");<br>+            CHECK(param->fwdRefQpDelta < 0 || param->fwdRefQpDelta > 20,<br>+            "Invalid fwdRefQpDelta value. Value must be between 0 and 20 (inclusive)");<br>+            CHECK(param->fwdNonRefQpDelta < 0 || param->fwdNonRefQpDelta > 20,<br>+            "Invalid fwdNonRefQpDelta value. Value must be between 0 and 20 (inclusive)");<br> <br>             CHECK(param->bwdScenecutWindow < 0 || param->bwdScenecutWindow > 1000,<br>                 "Invalid backward scenecut Window duration. Value must be between 0 and 1000(inclusive)");<br>-            CHECK(param->bwdRefQpDelta < -1 || param->bwdRefQpDelta > 10,<br>-                "Invalid bwdRefQpDelta value. Value must be between 0 and 10 (inclusive)");<br>-            CHECK(param->bwdNonRefQpDelta < -1 || param->bwdNonRefQpDelta > 10,<br>-                "Invalid bwdNonRefQpDelta value. Value must be between 0 and 10 (inclusive)");<br>+            CHECK(param->bwdRefQpDelta < -1 || param->bwdRefQpDelta > 20,<br>+                "Invalid bwdRefQpDelta value. Value must be between 0 and 20 (inclusive)");<br>+            CHECK(param->bwdNonRefQpDelta < -1 || param->bwdNonRefQpDelta > 20,<br>+                "Invalid bwdNonRefQpDelta value. Value must be between 0 and 20 (inclusive)");<br>         }<br>     }<br>     if (param->bEnableHME)<br>diff --git a/source/encoder/ratecontrol.cpp b/source/encoder/ratecontrol.cpp<br>index a4756de39..9c7b6132b 100644<br>--- a/source/encoder/ratecontrol.cpp<br>+++ b/source/encoder/ratecontrol.cpp<br>@@ -1394,6 +1394,16 @@ int RateControl::rateControlStart(Frame* curFrame, RateControlEntry* rce, Encode<br>     if (!m_isAbr && m_2pass && m_param->rc.rateControlMode == X265_RC_CRF)<br>     {<br>         rce->qpPrev = x265_qScale2qp(rce->qScale);<br>+        if (m_param->bEnableSceneCutAwareQp)<br>+        {<br>+            double lqmin = m_lmin[m_sliceType];<br>+            double lqmax = m_lmax[m_sliceType];<br>+            if (m_param->bEnableSceneCutAwareQp & FORWARD)<br>+                rce->newQScale = forwardMasking(curFrame, rce->newQScale);<br>+            if (m_param->bEnableSceneCutAwareQp & BACKWARD)<br>+                rce->newQScale = backwardMasking(curFrame, rce->newQScale);<br>+            rce->newQScale = x265_clip3(lqmin, lqmax, rce->newQScale);<br>+        }<br>         rce->qScale = rce->newQScale;<br>         rce->qpaRc = curEncData.m_avgQpRc = curEncData.m_avgQpAq = x265_qScale2qp(rce->newQScale);<br>         m_qp = int(rce->qpaRc + 0.5);<br>-- <br>2.18.0.windows.1<br><br><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><font color="#0c343d" face="verdana, sans-serif"><br></font></div><div dir="ltr"><font color="#0c343d" face="verdana, sans-serif">Thanks & Regards</font><div><font color="#0c343d" face="verdana, sans-serif"><b>Niranjan Kumar B</b></font></div><div><font size="1" color="#0c343d" face="verdana, sans-serif">Video Codec Engineer </font></div><div><font size="1" color="#0c343d" face="verdana, sans-serif">Media & AI Analytics</font></div><div><font face="trebuchet ms, sans-serif" color="#0c343d">+91 958 511 1449</font></div><div><a href="https://multicorewareinc.com/" style="color:rgb(17,85,204)" target="_blank"><img src="https://docs.google.com/uc?export=download&id=1kc3RJu9M8bnIf6Xa5rUw2d-eEVUsPBE5&revid=0B7tw9XJBmynaemR1VUpQUi9DVytRVW5SVkRwVTFjb1hBMUcwPQ"></a></div></div></div></div></div></div></div></div>