<div dir="ltr">Can you elaborate more on your plans for improve frame parallelism? Do you plan to enable starting SAO and loop filter at a CTU-level instead of waiting for the entire row to be ready?</div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Pradeep Ramachandran, PhD<div>Solution Architect,</div><div><a href="http://pradeeprama.info/" target="_blank">pradeeprama.info/</a></div><div><a href="http://www.multicorewareinc.com/" target="_blank">www.multicorewareinc.com/</a></div><div>Ph:   +91 99627 82018</div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On Tue, Dec 8, 2015 at 10:57 PM, chen <span dir="ltr"><<a href="mailto:chenm003@163.com" target="_blank">chenm003@163.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div>Hello Deepthi,</div><div><br></div><div>Hope team are fine.</div><div><br></div><div>The next goal may improve Frame Parallelism performance, we can start CU early.</div><div><br></div><div>Thanks,</div><div>Min</div><div><div class="h5"><div><br></div>At 2015-12-08 18:33:09,"Deepthi Nandakumar" <<a href="mailto:deepthi@multicorewareinc.com" target="_blank">deepthi@multicorewareinc.com</a>> wrote:<br> <blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid"><div dir="ltr"><div><div>Min,<br><br></div>Thanks a lot for the series. I will test and queue them as soon as we regain access to test machines etc. <br><br></div>Sorry about the delay.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 8, 2015 at 5:24 AM, Min Chen <span dir="ltr"><<a href="mailto:chenm003@163.com" target="_blank">chenm003@163.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid"># HG changeset patch<br>
# User Min Chen <<a href="mailto:chenm003@163.com" target="_blank">chenm003@163.com</a>><br>
# Date 1449511549 21600<br>
# Node ID 4f6b549198244291d25d6d2a0208e212960237c1<br>
# Parent  b7ca5ebd7fcdcd4af0ef5ae567e88c04b7694e46<br>
Convert Deblock functions to statis<br>
---<br>
 source/common/deblock.cpp |   16 ++++++++--------<br>
 source/common/deblock.h   |   16 ++++++++--------<br>
 2 files changed, 16 insertions(+), 16 deletions(-)<br>
<br>
diff -r b7ca5ebd7fcd -r 4f6b54919824 source/common/deblock.cpp<br>
--- a/source/common/deblock.cpp Mon Dec 07 11:34:23 2015 -0600<br>
+++ b/source/common/deblock.cpp Mon Dec 07 12:05:49 2015 -0600<br>
@@ -34,7 +34,7 @@<br>
 #define DEBLOCK_SMALLEST_BLOCK  8<br>
 #define DEFAULT_INTRA_TC_OFFSET 2<br>
<br>
-void Deblock::deblockCTU(const CUData* ctu, const CUGeom& cuGeom, int32_t dir) const<br>
+void Deblock::deblockCTU(const CUData* ctu, const CUGeom& cuGeom, int32_t dir)<br>
 {<br>
     uint8_t blockStrength[MAX_NUM_PARTITIONS];<br>
<br>
@@ -69,7 +69,7 @@<br>
<br>
 /* Deblocking filter process in CU-based (the same function as conventional's)<br>
  * param Edge the direction of the edge in block boundary (horizonta/vertical), which is added newly */<br>
-void Deblock::deblockCU(const CUData* cu, const CUGeom& cuGeom, const int32_t dir, uint8_t blockStrength[]) const<br>
+void Deblock::deblockCU(const CUData* cu, const CUGeom& cuGeom, const int32_t dir, uint8_t blockStrength[])<br>
 {<br>
     uint32_t absPartIdx = cuGeom.absPartIdx;<br>
     uint32_t depth = cuGeom.depth;<br>
@@ -124,7 +124,7 @@<br>
         return g_rasterToZscan[g_zscanToRaster[absPartIdx] + baseUnitIdx * numUnits + edgeIdx];<br>
 }<br>
<br>
-void Deblock::setEdgefilterMultiple(const CUData* cu, uint32_t scanIdx, int32_t dir, int32_t edgeIdx, uint8_t value, uint8_t blockStrength[], uint32_t numUnits) const<br>
+void Deblock::setEdgefilterMultiple(const CUData* cu, uint32_t scanIdx, int32_t dir, int32_t edgeIdx, uint8_t value, uint8_t blockStrength[], uint32_t numUnits)<br>
 {<br>
     X265_CHECK(numUnits > 0, "numUnits edge filter check\n");<br>
     for (uint32_t i = 0; i < numUnits; i++)<br>
@@ -134,7 +134,7 @@<br>
     }<br>
 }<br>
<br>
-void Deblock::setEdgefilterTU(const CUData* cu, uint32_t absPartIdx, uint32_t tuDepth, int32_t dir, uint8_t blockStrength[]) const<br>
+void Deblock::setEdgefilterTU(const CUData* cu, uint32_t absPartIdx, uint32_t tuDepth, int32_t dir, uint8_t blockStrength[])<br>
 {<br>
     uint32_t log2TrSize = cu->m_log2CUSize[absPartIdx] - tuDepth;<br>
     if (cu->m_tuDepth[absPartIdx] > tuDepth)<br>
@@ -149,7 +149,7 @@<br>
     setEdgefilterMultiple(cu, absPartIdx, dir, 0, 2, blockStrength, numUnits);<br>
 }<br>
<br>
-void Deblock::setEdgefilterPU(const CUData* cu, uint32_t absPartIdx, int32_t dir, uint8_t blockStrength[], uint32_t numUnits) const<br>
+void Deblock::setEdgefilterPU(const CUData* cu, uint32_t absPartIdx, int32_t dir, uint8_t blockStrength[], uint32_t numUnits)<br>
 {<br>
     const uint32_t hNumUnits = numUnits >> 1;<br>
     const uint32_t qNumUnits = numUnits >> 2;<br>
@@ -190,7 +190,7 @@<br>
     }<br>
 }<br>
<br>
-uint8_t Deblock::getBoundaryStrength(const CUData* cuQ, int32_t dir, uint32_t partQ, const uint8_t blockStrength[]) const<br>
+uint8_t Deblock::getBoundaryStrength(const CUData* cuQ, int32_t dir, uint32_t partQ, const uint8_t blockStrength[])<br>
 {<br>
     // Calculate block index<br>
     uint32_t partP;<br>
@@ -340,7 +340,7 @@<br>
     }<br>
 }<br>
<br>
-void Deblock::edgeFilterLuma(const CUData* cuQ, uint32_t absPartIdx, uint32_t depth, int32_t dir, int32_t edge, const uint8_t blockStrength[]) const<br>
+void Deblock::edgeFilterLuma(const CUData* cuQ, uint32_t absPartIdx, uint32_t depth, int32_t dir, int32_t edge, const uint8_t blockStrength[])<br>
 {<br>
     PicYuv* reconPic = cuQ->m_encData->m_reconPic;<br>
     pixel* src = reconPic->getLumaAddr(cuQ->m_cuAddr, absPartIdx);<br>
@@ -440,7 +440,7 @@<br>
     }<br>
 }<br>
<br>
-void Deblock::edgeFilterChroma(const CUData* cuQ, uint32_t absPartIdx, uint32_t depth, int32_t dir, int32_t edge, const uint8_t blockStrength[]) const<br>
+void Deblock::edgeFilterChroma(const CUData* cuQ, uint32_t absPartIdx, uint32_t depth, int32_t dir, int32_t edge, const uint8_t blockStrength[])<br>
 {<br>
     int32_t chFmt = cuQ->m_chromaFormat, chromaShift;<br>
     intptr_t offset, srcStep;<br>
diff -r b7ca5ebd7fcd -r 4f6b54919824 source/common/deblock.h<br>
--- a/source/common/deblock.h   Mon Dec 07 11:34:23 2015 -0600<br>
+++ b/source/common/deblock.h   Mon Dec 07 12:05:49 2015 -0600<br>
@@ -38,24 +38,24 @@<br>
 public:<br>
     enum { EDGE_VER, EDGE_HOR };<br>
<br>
-    void deblockCTU(const CUData* ctu, const CUGeom& cuGeom, int32_t dir) const;<br>
+    static void deblockCTU(const CUData* ctu, const CUGeom& cuGeom, int32_t dir);<br>
<br>
 protected:<br>
<br>
     // CU-level deblocking function<br>
-    void deblockCU(const CUData* cu, const CUGeom& cuGeom, const int32_t dir, uint8_t blockStrength[]) const;<br>
+    static void deblockCU(const CUData* cu, const CUGeom& cuGeom, const int32_t dir, uint8_t blockStrength[]);<br>
<br>
     // set filtering functions<br>
-    void setEdgefilterTU(const CUData* cu, uint32_t absPartIdx, uint32_t tuDepth, int32_t dir, uint8_t blockStrength[]) const;<br>
-    void setEdgefilterPU(const CUData* cu, uint32_t absPartIdx, int32_t dir, uint8_t blockStrength[], uint32_t numUnits) const;<br>
-    void setEdgefilterMultiple(const CUData* cu, uint32_t absPartIdx, int32_t dir, int32_t edgeIdx, uint8_t value, uint8_t blockStrength[], uint32_t numUnits) const;<br>
+    static void setEdgefilterTU(const CUData* cu, uint32_t absPartIdx, uint32_t tuDepth, int32_t dir, uint8_t blockStrength[]);<br>
+    static void setEdgefilterPU(const CUData* cu, uint32_t absPartIdx, int32_t dir, uint8_t blockStrength[], uint32_t numUnits);<br>
+    static void setEdgefilterMultiple(const CUData* cu, uint32_t absPartIdx, int32_t dir, int32_t edgeIdx, uint8_t value, uint8_t blockStrength[], uint32_t numUnits);<br>
<br>
     // get filtering functions<br>
-    uint8_t getBoundaryStrength(const CUData* cuQ, int32_t dir, uint32_t partQ, const uint8_t blockStrength[]) const;<br>
+    static uint8_t getBoundaryStrength(const CUData* cuQ, int32_t dir, uint32_t partQ, const uint8_t blockStrength[]);<br>
<br>
     // filter luma/chroma functions<br>
-    void edgeFilterLuma(const CUData* cuQ, uint32_t absPartIdx, uint32_t depth, int32_t dir, int32_t edge, const uint8_t blockStrength[]) const;<br>
-    void edgeFilterChroma(const CUData* cuQ, uint32_t absPartIdx, uint32_t depth, int32_t dir, int32_t edge, const uint8_t blockStrength[]) const;<br>
+    static void edgeFilterLuma(const CUData* cuQ, uint32_t absPartIdx, uint32_t depth, int32_t dir, int32_t edge, const uint8_t blockStrength[]);<br>
+    static void edgeFilterChroma(const CUData* cuQ, uint32_t absPartIdx, uint32_t depth, int32_t dir, int32_t edge, const uint8_t blockStrength[]);<br>
<br>
     static const uint8_t s_tcTable[54];<br>
     static const uint8_t s_betaTable[52];<br>
<br>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org" target="_blank">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div><br><br clear="all"><br>-- <br><div><div dir="ltr"><div><div>Deepthi Nandakumar<br></div>Engineering Manager, x265<br></div>Multicoreware, Inc<br></div></div>
</div>
</blockquote></div></div></div><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" rel="noreferrer" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
<br></blockquote></div><br></div>