<div dir="ltr"><div># HG changeset patch</div><div># User Ximing Cheng <<a href="mailto:ximingcheng@tencent.com">ximingcheng@tencent.com</a>></div><div># Date 1444372125 -28800</div><div>#      Fri Oct 09 14:28:45 2015 +0800</div><div># Node ID 4176ffb657db00f173ba15a8d54c821f6811f514</div><div># Parent  55a4a9b920ff0385fd0b65c73c4c3f63b8a8cc65</div><div>Remove new/delete in BitCost, double the size of s_bitsizes to remove the abs operation in bitcost</div><div><br></div><div>diff --git a/source/encoder/bitcost.cpp b/source/encoder/bitcost.cpp</div><div>--- a/source/encoder/bitcost.cpp</div><div>+++ b/source/encoder/bitcost.cpp</div><div>@@ -41,7 +41,7 @@</div><div>             x265_emms(); // just to be safe</div><div> </div><div>             CalculateLogs();</div><div>-            s_costs[qp] = new uint16_t[4 * BC_MAX_MV + 1] + 2 * BC_MAX_MV;</div><div>+            s_costs[qp] = X265_MALLOC(uint16_t, 4 * BC_MAX_MV + 1) + 2 * BC_MAX_MV;</div><div>             double lambda = x265_lambda_tab[qp];</div><div> </div><div>             // estimate same cost for negative and positive MVD</div><div>@@ -67,11 +67,11 @@</div><div> {</div><div>     if (!s_bitsizes)</div><div>     {</div><div>-        s_bitsizes = new float[2 * BC_MAX_MV + 1];</div><div>+        s_bitsizes = X265_MALLOC(float, 4 * BC_MAX_MV + 1) + 2 * BC_MAX_MV;</div><div>         s_bitsizes[0] = 0.718f;</div><div>         float log2_2 = 2.0f / log(2.0f);  // 2 x 1/log(2)</div><div>         for (int i = 1; i <= 2 * BC_MAX_MV; i++)</div><div>-            s_bitsizes[i] = log((float)(i + 1)) * log2_2 + 1.718f;</div><div>+            s_bitsizes[i] = s_bitsizes[-i] = log((float)(i + 1)) * log2_2 + 1.718f;</div><div>     }</div><div> }</div><div> </div><div>@@ -81,12 +81,12 @@</div><div>     {</div><div>         if (s_costs[i])</div><div>         {</div><div>-            delete [] (s_costs[i] - 2 * BC_MAX_MV);</div><div>+            X265_FREE(s_costs[i] - 2 * BC_MAX_MV);</div><div> </div><div>             s_costs[i] = 0;</div><div>         }</div><div>     }</div><div> </div><div>-    delete [] s_bitsizes;</div><div>+    X265_FREE(s_bitsizes - 2 * BC_MAX_MV);</div><div>     s_bitsizes = 0;</div><div> }</div><div>diff --git a/source/encoder/bitcost.h b/source/encoder/bitcost.h</div><div>--- a/source/encoder/bitcost.h</div><div>+++ b/source/encoder/bitcost.h</div><div>@@ -47,14 +47,14 @@</div><div>     // return bit cost of motion vector difference, without lambda</div><div>     inline uint32_t bitcost(const MV& mv) const</div><div>     {</div><div>-        return (uint32_t)(s_bitsizes[abs(mv.x - m_mvp.x)] +</div><div>-                          s_bitsizes[abs(mv.y - m_mvp.y)] + 0.5f);</div><div>+        return (uint32_t)(s_bitsizes[mv.x - m_mvp.x] +</div><div>+                          s_bitsizes[mv.y - m_mvp.y] + 0.5f);</div><div>     }</div><div> </div><div>     static inline uint32_t bitcost(const MV& mv, const MV& mvp)</div><div>     {</div><div>-        return (uint32_t)(s_bitsizes[abs(mv.x - mvp.x)] +</div><div>-                          s_bitsizes[abs(mv.y - mvp.y)] + 0.5f);</div><div>+        return (uint32_t)(s_bitsizes[mv.x - mvp.x] +</div><div>+                          s_bitsizes[mv.y - mvp.y] + 0.5f);</div><div>     }</div><div> </div><div>     static void destroy();</div><div><br></div></div>