<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 18, 2015 at 10:44 PM, 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Min Chen <<a href="mailto:chenm003@163.com" target="_blank">chenm003@163.com</a>><br>
# Date 1447865926 21600<br>
# Node ID 600706db4e14bd95a5d933418186f86403e897f4<br>
# Parent e160de7083971f21802517691f9a3a0934765952<br>
optimize SAO statistics initialize<br>
---<br>
source/encoder/sao.cpp | 52 ++++++++++++++++++++++++-----------------------<br>
1 files changed, 27 insertions(+), 25 deletions(-)<br>
<br>
diff -r e160de708397 -r 600706db4e14 source/encoder/sao.cpp<br>
--- a/source/encoder/sao.cpp Wed Nov 18 10:58:43 2015 -0600<br>
+++ b/source/encoder/sao.cpp Wed Nov 18 10:58:46 2015 -0600<br>
@@ -1156,32 +1156,34 @@<br>
if (allowMerge[1])<br>
m_entropyCoder.codeSaoMerge(0);<br>
m_entropyCoder.store(m_rdContexts.temp);<br>
+<br>
// reset stats Y, Cb, Cr<br>
- for (int plane = 0; plane < 3; plane++)<br>
+ X265_CHECK(sizeof(PerPlane) == (sizeof(int32_t) * (NUM_PLANE * MAX_NUM_SAO_TYPE * MAX_NUM_SAO_CLASS)), "Found Padding space in struct PerPlane");<br>
+<br>
+ // TODO: Confirm the address space is continuous<br>
+ memset(m_count, 0, 3 * sizeof(m_count[0]));<br></blockquote><div><br></div><div>Now that we're cleaning this up, m_count is confusing. PerClass is a 2D int array, and we're allocating one per plane? Can we clean this up once and for all in the malloc part itself? <br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+ if (m_param->bSaoNonDeblocked)<br>
{<br>
- for (int j = 0; j < MAX_NUM_SAO_TYPE; j++)<br>
- {<br>
- for (int k = 0; k < MAX_NUM_SAO_CLASS; k++)<br>
- {<br>
- m_offset[plane][j][k] = 0;<br>
- if (m_param->bSaoNonDeblocked)<br>
- {<br>
- m_count[plane][j][k] = m_countPreDblk[addr][plane][j][k];<br>
- m_offsetOrg[plane][j][k] = m_offsetOrgPreDblk[addr][plane][j][k];<br>
- }<br>
- else<br>
- {<br>
- m_count[plane][j][k] = 0;<br>
- m_offsetOrg[plane][j][k] = 0;<br>
- }<br>
- }<br>
- }<br>
+ memcpy(m_count, m_countPreDblk[addr], 3 * sizeof(m_count[0]));<br>
+ memcpy(m_offsetOrg, m_offsetOrgPreDblk[addr], 3 * sizeof(m_offsetOrg[0]));<br>
+ }<br>
+ else<br>
+ {<br>
+ memset(m_count, 0, 3 * sizeof(m_count[0]));<br>
+ memset(m_offsetOrg, 0, 3 * sizeof(m_offsetOrg[0]));<br>
+ }<br>
+ const struct SaoCtuParam dummy_initSaoParam = { SAO_MERGE_NONE, -1, 0, {0, 0, 0, 0} };<br>
+ saoParam->ctuParam[0][addr] = dummy_initSaoParam;<br>
+ saoParam->ctuParam[1][addr] = dummy_initSaoParam;<br>
+ saoParam->ctuParam[2][addr] = dummy_initSaoParam;<br>
<br>
- saoParam->ctuParam[plane][addr].mergeMode = SAO_MERGE_NONE;<br>
- saoParam->ctuParam[plane][addr].typeIdx = -1;<br>
- saoParam->ctuParam[plane][addr].bandPos = 0;<br>
- if (saoParam->bSaoFlag[plane > 0])<br>
- calcSaoStatsCu(addr, plane);<br>
+ if (saoParam->bSaoFlag[0])<br>
+ calcSaoStatsCu(addr, 0);<br>
+<br>
+ if (saoParam->bSaoFlag[1])<br>
+ {<br>
+ calcSaoStatsCu(addr, 1);<br>
+ calcSaoStatsCu(addr, 2);<br>
}<br>
<br>
saoComponentParamDist(saoParam, addr, addrUp, addrLeft, &mergeSaoParam[0][0], mergeDist);<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></div>