<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Memory leak in IPP sample JPEG encoder in Intel® Integrated Performance Primitives</title>
    <link>https://community.intel.com/t5/Intel-Integrated-Performance/Memory-leak-in-IPP-sample-JPEG-encoder/m-p/776747#M1177</link>
    <description>Hi,&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;I have created a custom JPEG encoder/decoder using the sample encoder/decoder from the IPP sample and I found out there is an memory leak in the jpeg encoder "ipp-samples\\image-codecs\\uic\\src\\codec\\image\\jpeg\\enc\\src\\jpegenc.cpp".&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Actually the are two memory leaks. One is in theCJPEGEncoder::Clean function:&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;&lt;SPAN class="sectionbodytext"&gt;CJPEGEncoder::Clean&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;...&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; &lt;B&gt;m_jpeg_restart_interval = 0; &lt;/B&gt;                   &lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; m_jpeg_mode       = JPEG_BASELINE;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;...&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;#ifdef _OPENMP&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; if(&lt;B&gt;m_jpeg_restart_interval != 0&lt;/B&gt; &amp;amp;&amp;amp; JT_RSTI == m_threading_mode)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; {&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  for(i = 0; i &amp;lt; m_num_threads; i++)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  {&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;   m_state_t&lt;I&gt;.Destroy();&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;   m_BitStreamOutT&lt;I&gt;.Detach();&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  }&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  delete[] m_state_t;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  delete[] m_BitStreamOutT;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; }&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;#endif&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;m_jpeg_restart_interval is never different from 0 :)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;The other one isCJPEGEncoder::Init (this one is a bit tricky). If one CJPEGEncoder is used to encode multiple files with identical size and color parameters each time whenCJPEGEncoder::WriteHeader() is called more and more memory is "leaked".CJPEGEncoder::WriteHeader calls Init which frees all previous allocated memory except when allocating the resources for the Restart Interval (RSTI) threading model.&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;CJPEGEncoder::Init&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;...&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;#ifdef _OPENMP&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; if(m_jpeg_restart_interval != 0 &amp;amp;&amp;amp; JT_RSTI == m_threading_mode)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; {&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  &lt;B&gt;m_BitStreamOutT = new CBitStreamOutput[m_num_threads];&lt;/B&gt;    &lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  buflen = m_numxMCU * m_mcuWidth*m_mcuHeight*m_rstiHeight*m_jpeg_ncomp;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  for(i =0; i &amp;lt; m_num_threads; i++)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  {&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;   m_BitStreamOutT&lt;I&gt;.Init(buflen);&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  }&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;...&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;I found a solution for myself but it will be good if the problem is fixed in the next releases :)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;PS: the &lt;B&gt;m_lastDC&lt;/B&gt; variable is also never deallocated :)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;Best&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;Martin.&lt;/DIV&gt;</description>
    <pubDate>Thu, 04 Aug 2011 12:17:14 GMT</pubDate>
    <dc:creator>martishka</dc:creator>
    <dc:date>2011-08-04T12:17:14Z</dc:date>
    <item>
      <title>Memory leak in IPP sample JPEG encoder</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/Memory-leak-in-IPP-sample-JPEG-encoder/m-p/776747#M1177</link>
      <description>Hi,&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;I have created a custom JPEG encoder/decoder using the sample encoder/decoder from the IPP sample and I found out there is an memory leak in the jpeg encoder "ipp-samples\\image-codecs\\uic\\src\\codec\\image\\jpeg\\enc\\src\\jpegenc.cpp".&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Actually the are two memory leaks. One is in theCJPEGEncoder::Clean function:&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;&lt;SPAN class="sectionbodytext"&gt;CJPEGEncoder::Clean&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;...&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; &lt;B&gt;m_jpeg_restart_interval = 0; &lt;/B&gt;                   &lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; m_jpeg_mode       = JPEG_BASELINE;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;...&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;#ifdef _OPENMP&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; if(&lt;B&gt;m_jpeg_restart_interval != 0&lt;/B&gt; &amp;amp;&amp;amp; JT_RSTI == m_threading_mode)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; {&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  for(i = 0; i &amp;lt; m_num_threads; i++)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  {&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;   m_state_t&lt;I&gt;.Destroy();&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;   m_BitStreamOutT&lt;I&gt;.Detach();&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  }&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  delete[] m_state_t;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  delete[] m_BitStreamOutT;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; }&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;#endif&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;m_jpeg_restart_interval is never different from 0 :)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;The other one isCJPEGEncoder::Init (this one is a bit tricky). If one CJPEGEncoder is used to encode multiple files with identical size and color parameters each time whenCJPEGEncoder::WriteHeader() is called more and more memory is "leaked".CJPEGEncoder::WriteHeader calls Init which frees all previous allocated memory except when allocating the resources for the Restart Interval (RSTI) threading model.&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;BLOCKQUOTE&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;CJPEGEncoder::Init&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;...&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;#ifdef _OPENMP&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; if(m_jpeg_restart_interval != 0 &amp;amp;&amp;amp; JT_RSTI == m_threading_mode)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt; {&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  &lt;B&gt;m_BitStreamOutT = new CBitStreamOutput[m_num_threads];&lt;/B&gt;    &lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  buflen = m_numxMCU * m_mcuWidth*m_mcuHeight*m_rstiHeight*m_jpeg_ncomp;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  for(i =0; i &amp;lt; m_num_threads; i++)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  {&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;   m_BitStreamOutT&lt;I&gt;.Init(buflen);&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;  }&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;...&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;I found a solution for myself but it will be good if the problem is fixed in the next releases :)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;PS: the &lt;B&gt;m_lastDC&lt;/B&gt; variable is also never deallocated :)&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;Best&lt;/DIV&gt;&lt;DIV id="_mcePaste" class="sectionbodytext"&gt;Martin.&lt;/DIV&gt;</description>
      <pubDate>Thu, 04 Aug 2011 12:17:14 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/Memory-leak-in-IPP-sample-JPEG-encoder/m-p/776747#M1177</guid>
      <dc:creator>martishka</dc:creator>
      <dc:date>2011-08-04T12:17:14Z</dc:date>
    </item>
    <item>
      <title>Memory leak in IPP sample JPEG encoder</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/Memory-leak-in-IPP-sample-JPEG-encoder/m-p/776748#M1178</link>
      <description>Hi,&lt;DIV&gt;thanks for reporting this issue, but this problemhas been solvedsome time ago. And fixed version will be available in next IPP release ( i suggest in 7.0.5).&lt;/DIV&gt;</description>
      <pubDate>Thu, 04 Aug 2011 16:42:39 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/Memory-leak-in-IPP-sample-JPEG-encoder/m-p/776748#M1178</guid>
      <dc:creator>Sergey_Ryadno</dc:creator>
      <dc:date>2011-08-04T16:42:39Z</dc:date>
    </item>
    <item>
      <title>Memory leak in IPP sample JPEG encoder</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/Memory-leak-in-IPP-sample-JPEG-encoder/m-p/776749#M1179</link>
      <description>That's good to know.</description>
      <pubDate>Fri, 05 Aug 2011 13:47:37 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/Memory-leak-in-IPP-sample-JPEG-encoder/m-p/776749#M1179</guid>
      <dc:creator>martishka</dc:creator>
      <dc:date>2011-08-05T13:47:37Z</dc:date>
    </item>
  </channel>
</rss>

