<div dir="ltr"><div>This looks like a Main bug where rdcost was not looking at g_chromaScale at all.<br><br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 4, 2014 at 4:36 PM,  <span dir="ltr"><<a href="mailto:aarthi@multicorewareinc.com" target="_blank">aarthi@multicorewareinc.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Aarthi Thirumalai<br>
# Date 1417675781 -19800<br>
#      Thu Dec 04 12:19:41 2014 +0530<br>
# Node ID 23061220a5fe287cac893320d8ee0a782d6767c0<br>
# Parent  511dde5ac1deee96a0105bb87e14670ef5ed72a6<br>
rc: fix chroma qp and chroma lambda derivations.<br>
<br>
fix the chroma qp values for Main10 profile, derive chroma qp from luma qp values<br>
according to the HEVC spec.<br>
improves quality at high qps.<br>
<br>
diff -r 511dde5ac1de -r 23061220a5fe source/common/constants.cpp<br>
--- a/source/common/constants.cpp       Thu Dec 04 12:43:06 2014 +0530<br>
+++ b/source/common/constants.cpp       Thu Dec 04 12:19:41 2014 +0530<br>
@@ -289,11 +289,21 @@<br>
     {  4, -13, 22, -31, 38, -46, 54, -61, 67, -73, 78, -82, 85, -88, 90, -90, 90, -90, 88, -85, 82, -78, 73, -67, 61, -54, 46, -38, 31, -22, 13, -4 }<br>
 };<br>
<br>
+<br>
+#if HIGH_BIT_DEPTH<br>
+const uint8_t g_chromaScale[ChromaQPMappingTableSize] =<br>
+{<br>
+    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,<br>
+    51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51<br>
+};<br>
+<br>
+#else<br>
 const uint8_t g_chromaScale[ChromaQPMappingTableSize] =<br>
 {<br>
     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,<br>
     51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51<br>
-};<br>
+};<br>
+#endif<br>
<br>
 const uint8_t g_chroma422IntraAngleMappingTable[AngleMapping422TableSize] =<br>
 { 0, 1, 2, 2, 2, 2, 3, 5, 7, 8, 10, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 28, 29, 29, 30, 31, DM_CHROMA_IDX };<br>
diff -r 511dde5ac1de -r 23061220a5fe source/encoder/rdcost.h<br>
--- a/source/encoder/rdcost.h   Thu Dec 04 12:43:06 2014 +0530<br>
+++ b/source/encoder/rdcost.h   Thu Dec 04 12:19:41 2014 +0530<br>
@@ -57,12 +57,12 @@<br>
<br>
         setLambda(x265_lambda2_tab[qp], x265_lambda_tab[qp]);<br>
<br>
-        int qpCb = Clip3(QP_MIN, QP_MAX_MAX, qp + slice.m_pps->chromaQpOffset[0]);<br>
+        int qpCb = Clip3(QP_MIN, QP_MAX_MAX, (int)g_chromaScale[qp + slice.m_pps->chromaQpOffset[0]]);<br>
         int chroma_offset_idx = X265_MIN(qp - qpCb + 12, MAX_CHROMA_LAMBDA_OFFSET);<br>
         uint16_t lambdaOffset = m_psyRd ? x265_chroma_lambda2_offset_tab[chroma_offset_idx] : 256;<br>
         setCbDistortionWeight(lambdaOffset);<br>
<br>
-        int qpCr = Clip3(QP_MIN, QP_MAX_MAX, qp + slice.m_pps->chromaQpOffset[1]);<br>
+        int qpCr = Clip3(QP_MIN, QP_MAX_MAX, (int)g_chromaScale[qp + slice.m_pps->chromaQpOffset[0]]);<br>
         chroma_offset_idx = X265_MIN(qp - qpCr + 12, MAX_CHROMA_LAMBDA_OFFSET);<br>
         lambdaOffset = m_psyRd ? x265_chroma_lambda2_offset_tab[chroma_offset_idx] : 256;<br>
         setCrDistortionWeight(lambdaOffset);<br>
diff -r 511dde5ac1de -r 23061220a5fe source/encoder/sao.cpp<br>
--- a/source/encoder/sao.cpp    Thu Dec 04 12:43:06 2014 +0530<br>
+++ b/source/encoder/sao.cpp    Thu Dec 04 12:19:41 2014 +0530<br>
@@ -177,7 +177,7 @@<br>
 {<br>
     Slice* slice = frame->m_encData->m_slice;<br>
<br>
-    int qpCb = Clip3(0, QP_MAX_MAX, qp + slice->m_pps->chromaQpOffset[0]);<br>
+    int qpCb = Clip3(QP_MIN, QP_MAX_MAX, (int)g_chromaScale[qp + slice->m_pps->chromaQpOffset[0]]);<br>
     m_lumaLambda = x265_lambda2_tab[qp];<br>
     m_chromaLambda = x265_lambda2_tab[qpCb]; // Use Cb QP for SAO chroma<br>
     m_frame = frame;<br>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div><br></div>