<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 28, 2018 at 5:06 PM,  <span dir="ltr"><<a href="mailto:bhavna@multicorewareinc.com" target="_blank">bhavna@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 Bhavna Hariharan <<a href="mailto:bhavna@multicorewareinc.com">bhavna@multicorewareinc.com</a>><br>
# Date 1519723941 -19800<br>
#      Tue Feb 27 15:02:21 2018 +0530<br>
# Node ID 4d8777a67a59658e4f2c01b7f0fb2f<wbr>bef06cd047<br>
# Parent  a12d4abf477016158397064730afa1<wbr>60a067c3e9<br>
analysis: Introduce refine-intra level 4<br>
<br>
refine-intra 4 does not reuse any analysis information from the save encode.<br>
Analysis is re-done for all I-frames and intra in inter blocks in the load run,<br>
this improves the quality of the subsequent inter frames.<br>
<br>
diff -r a12d4abf4770 -r 4d8777a67a59 doc/reST/cli.rst<br>
--- a/doc/reST/cli.rst  Thu Jan 25 11:37:21 2018 +0530<br>
+++ b/doc/reST/cli.rst  Tue Feb 27 15:02:21 2018 +0530<br>
@@ -915,7 +915,7 @@<br>
        This option should be coupled with analysis-reuse-mode option, --analysis-reuse-level 10.<br>
        The ctu size of load should be double the size of save. Default 0.<br>
<br>
-.. option:: --refine-intra <0..3><br>
+.. option:: --refine-intra <0..4><br>
<br>
        Enables refinement of intra blocks in current encode.<br>
<br>
@@ -931,6 +931,8 @@<br>
<br>
        Level 3 - Perform analysis of intra modes for depth reused from first encode.<br>
<br>
+       Level 4 - Does not reuse any analysis information - redo analysis for the intra block.<br>
+<br>
        Default 0.<br>
<br>
 .. option:: --refine-inter <0..3><br>
diff -r a12d4abf4770 -r 4d8777a67a59 source/CMakeLists.txt<br>
--- a/source/CMakeLists.txt     Thu Jan 25 11:37:21 2018 +0530<br>
+++ b/source/CMakeLists.txt     Tue Feb 27 15:02:21 2018 +0530<br>
@@ -29,7 +29,7 @@<br>
 option(STATIC_LINK_CRT "Statically link C runtime for release builds" OFF)<br>
 mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)<br>
 # X265_BUILD must be incremented each time the public API is changed<br>
-set(X265_BUILD 151)<br>
+set(X265_BUILD 152)<br>
 configure_file("${PROJECT_<wbr>SOURCE_DIR}/<a href="http://x265.def.in" rel="noreferrer" target="_blank">x265.def.in</a>"<br>
                "${PROJECT_BINARY_DIR}/x265.<wbr>def")<br>
 configure_file("${PROJECT_<wbr>SOURCE_DIR}/<a href="http://x265_config.h.in" rel="noreferrer" target="_blank">x265_config.h.in</a>"<br>
diff -r a12d4abf4770 -r 4d8777a67a59 source/common/param.cpp<br>
--- a/source/common/param.cpp   Thu Jan 25 11:37:21 2018 +0530<br>
+++ b/source/common/param.cpp   Tue Feb 27 15:02:21 2018 +0530<br>
@@ -1365,7 +1365,7 @@<br>
         "Supported values for bCTUInfo are 0, 1, 2, 4, 6");<br>
     CHECK(param->interRefine > 3 || param->interRefine < 0,<br>
         "Invalid refine-inter value, refine-inter levels 0 to 3 supported");<br>
-    CHECK(param->intraRefine > 3 || param->intraRefine < 0,<br>
+    CHECK(param->intraRefine > 4 || param->intraRefine < 0,<br>
         "Invalid refine-intra value, refine-intra levels 0 to 3 supported");<br>
 #if !X86_64<br>
     CHECK(param->searchMethod == X265_SEA && (param->sourceWidth > 840 || param->sourceHeight > 480),<br>
diff -r a12d4abf4770 -r 4d8777a67a59 source/encoder/analysis.cpp<br>
--- a/source/encoder/analysis.cpp       Thu Jan 25 11:37:21 2018 +0530<br>
+++ b/source/encoder/analysis.cpp       Tue Feb 27 15:02:21 2018 +0530<br>
@@ -518,10 +518,10 @@<br>
     bool mightSplit = !(cuGeom.flags & CUGeom::LEAF);<br>
     bool mightNotSplit = !(cuGeom.flags & CUGeom::SPLIT_MANDATORY);<br>
<br>
-    bool bAlreadyDecided = parentCTU.m_lumaIntraDir[<wbr>cuGeom.absPartIdx] != (uint8_t)ALL_IDX;<br>
-    bool bDecidedDepth = parentCTU.m_cuDepth[cuGeom.<wbr>absPartIdx] == depth;<br>
+    bool bAlreadyDecided = m_param->intraRefine != 4 && parentCTU.m_lumaIntraDir[<wbr>cuGeom.absPartIdx] != (uint8_t)ALL_IDX;<br>
+    bool bDecidedDepth = m_param->intraRefine != 4 && parentCTU.m_cuDepth[cuGeom.<wbr>absPartIdx] == depth;<br>
     int split = 0;<br>
-    if (m_param->intraRefine)<br>
+    if (m_param->intraRefine && m_param->intraRefine != 4)<br>
     {<br>
         split = ((cuGeom.log2CUSize == (uint32_t)(g_log2Size[m_param-<wbr>>minCUSize] + 1)) && bDecidedDepth);<br>
         if (cuGeom.log2CUSize == (uint32_t)(g_log2Size[m_param-<wbr>>minCUSize]) && !bDecidedDepth)<br>
@@ -2425,14 +2425,19 @@<br>
         PartSize size = (PartSize)parentCTU.m_<wbr>partSize[cuGeom.absPartIdx];<br>
         if (parentCTU.isIntra(cuGeom.<wbr>absPartIdx) && m_param->interRefine < 2)<br>
         {<br>
-            bool reuseModes = !((m_param->intraRefine == 3) ||<br>
-                                (m_param->intraRefine == 2 && parentCTU.m_lumaIntraDir[<wbr>cuGeom.absPartIdx] > DC_IDX));<br>
-            if (reuseModes)<br>
+            if (m_param->intraRefine == 4)<br>
+                compressIntraCU(parentCTU, cuGeom, qp);<br>
+            else<br>
             {<br>
-                memcpy(mode.cu.m_lumaIntraDir, parentCTU.m_lumaIntraDir + cuGeom.absPartIdx, cuGeom.numPartitions);<br>
-                memcpy(mode.cu.m_<wbr>chromaIntraDir, parentCTU.m_chromaIntraDir + cuGeom.absPartIdx, cuGeom.numPartitions);<br>
+                bool reuseModes = !((m_param->intraRefine == 3) ||<br>
+                    (m_param->intraRefine == 2 && parentCTU.m_lumaIntraDir[<wbr>cuGeom.absPartIdx] > DC_IDX));<br>
+                if (reuseModes)<br>
+                {<br>
+                    memcpy(mode.cu.m_lumaIntraDir, parentCTU.m_lumaIntraDir + cuGeom.absPartIdx, cuGeom.numPartitions);<br>
+                    memcpy(mode.cu.m_<wbr>chromaIntraDir, parentCTU.m_chromaIntraDir + cuGeom.absPartIdx, cuGeom.numPartitions);<br>
+                }<br>
+                checkIntra(mode, cuGeom, size);<br>
             }<br>
-            checkIntra(mode, cuGeom, size);<br>
         }<br>
         else if (!parentCTU.isIntra(cuGeom.<wbr>absPartIdx) && m_param->interRefine < 2)<br>
         {<br>
diff -r a12d4abf4770 -r 4d8777a67a59 source/x265cli.h<br>
--- a/source/x265cli.h  Thu Jan 25 11:37:21 2018 +0530<br>
+++ b/source/x265cli.h  Tue Feb 27 15:02:21 2018 +0530<br>
@@ -475,11 +475,12 @@<br>
     H0("   --analysis-reuse-level <1..10>      Level of analysis reuse indicates amount of info stored/reused in save/load mode, 1:least..10:most. Default %d\n", param->analysisReuseLevel);<br>
     H0("   --refine-mv-type <string>     Reuse MV information received through API call. Supported option is avc. Default disabled - %d\n", param->bMVType);<br>
     H0("   --scale-factor <int>          Specify factor by which input video is scaled down for analysis save mode. Default %d\n", param->scaleFactor);<br>
-    H0("   --refine-intra <0..3>         Enable intra refinement for encode that uses analysis-load.\n"<br>
+    H0("   --refine-intra <0..4>         Enable intra refinement for encode that uses analysis-load.\n"<br>
         "                                    - 0 : Forces both mode and depth from the save encode.\n"<br>
         "                                    - 1 : Functionality of (0) + evaluate all intra modes at min-cu-size's depth when current depth is one smaller than min-cu-size's depth.\n"<br>
         "                                    - 2 : Functionality of (1) + irrespective of size evaluate all angular modes when the save encode decides the best mode as angular.\n"<br>
         "                                    - 3 : Functionality of (1) + irrespective of size evaluate all intra modes.\n"<br>
+        "                                    - 4 : Re-evaluate all intra blocks, does not reuse data from save encode.\n"<br>
         "                                Default:%d\n", param->intraRefine);<br>
     H0("   --refine-inter <0..3>         Enable inter refinement for encode that uses analysis-load.\n"<br>
         "                                    - 0 : Forces both mode and depth from the save encode.\n"<br>
<br>______________________________<wbr>_________________<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" rel="noreferrer" target="_blank">https://mailman.videolan.org/<wbr>listinfo/x265-devel</a><br>
<br></blockquote></div><br></div><div class="gmail_extra">Pushed.</div></div>