<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.13"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>libpgf: CDecoder::CMacroBlock Class Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="navtree.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="resize.js"></script> <script type="text/javascript" src="navtreedata.js"></script> <script type="text/javascript" src="navtree.js"></script> <script type="text/javascript"> $(document).ready(initResizable); </script> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/searchdata.js"></script> <script type="text/javascript" src="search/search.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectlogo"><img alt="Logo" src="PGF.PNG"/></td> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">libpgf  <span id="projectnumber">6.12.24</span> </div> <div id="projectbrief">PGF - Progressive Graphics File</div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.13 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> $(function() { initMenu('',true,false,'search.php','Search'); $(document).ready(function() { init_search(); }); }); </script> <div id="main-nav"></div> </div><!-- top --> <div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="nav-tree"> <div id="nav-tree-contents"> <div id="nav-sync" class="sync"></div> </div> </div> <div id="splitbar" style="-moz-user-select:none;" class="ui-resizable-handle"> </div> </div> <script type="text/javascript"> $(document).ready(function(){initNavTree('classCDecoder_1_1CMacroBlock.html','');}); </script> <div id="doc-content"> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> </div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> <iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults"> </iframe> </div> <div class="header"> <div class="summary"> <a href="#pub-methods">Public Member Functions</a> | <a href="#pub-attribs">Public Attributes</a> | <a href="#pri-methods">Private Member Functions</a> | <a href="#pri-attribs">Private Attributes</a> | <a href="classCDecoder_1_1CMacroBlock-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">CDecoder::CMacroBlock Class Reference</div> </div> </div><!--header--> <div class="contents"> <p>A macro block is a decoding unit of fixed size (uncoded) <a href="classCDecoder_1_1CMacroBlock.html#details">More...</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> <tr class="memitem:a023a230fc23472478e5429cef5ec4be4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#a023a230fc23472478e5429cef5ec4be4">CMacroBlock</a> (<a class="el" href="classCDecoder.html">CDecoder</a> *decoder)</td></tr> <tr class="separator:a023a230fc23472478e5429cef5ec4be4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0425cb162ca41e04f6ae0886a62b3cc9"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#a0425cb162ca41e04f6ae0886a62b3cc9">IsCompletelyRead</a> () const</td></tr> <tr class="separator:a0425cb162ca41e04f6ae0886a62b3cc9"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a72899e368b29833bd485c4858b5ad7ef"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#a72899e368b29833bd485c4858b5ad7ef">BitplaneDecode</a> ()</td></tr> <tr class="separator:a72899e368b29833bd485c4858b5ad7ef"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> Public Attributes</h2></td></tr> <tr class="memitem:a19247bd5e6073252c45abf9d33b44ee0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="unionROIBlockHeader.html">ROIBlockHeader</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#a19247bd5e6073252c45abf9d33b44ee0">m_header</a></td></tr> <tr class="memdesc:a19247bd5e6073252c45abf9d33b44ee0"><td class="mdescLeft"> </td><td class="mdescRight">block header <a href="#a19247bd5e6073252c45abf9d33b44ee0">More...</a><br /></td></tr> <tr class="separator:a19247bd5e6073252c45abf9d33b44ee0"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7722de1000647fb5a894db2e2f348bdd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">m_value</a> [<a class="el" href="PGFtypes_8h.html#aa362edf6db9662acf6ef958a6db19c35">BufferSize</a>]</td></tr> <tr class="memdesc:a7722de1000647fb5a894db2e2f348bdd"><td class="mdescLeft"> </td><td class="mdescRight">output buffer of values with index m_valuePos <a href="#a7722de1000647fb5a894db2e2f348bdd">More...</a><br /></td></tr> <tr class="separator:a7722de1000647fb5a894db2e2f348bdd"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ace0702d7f8281972b1db091248c3c80b"><td class="memItemLeft" align="right" valign="top">UINT32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a> [<a class="el" href="Encoder_8h.html#a05a74e73e6c734fcad194efbca053ed5">CodeBufferLen</a>]</td></tr> <tr class="memdesc:ace0702d7f8281972b1db091248c3c80b"><td class="mdescLeft"> </td><td class="mdescRight">input buffer for encoded bitstream <a href="#ace0702d7f8281972b1db091248c3c80b">More...</a><br /></td></tr> <tr class="separator:ace0702d7f8281972b1db091248c3c80b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a38f42e9e2d5ac8387db0122aecac79be"><td class="memItemLeft" align="right" valign="top">UINT32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#a38f42e9e2d5ac8387db0122aecac79be">m_valuePos</a></td></tr> <tr class="memdesc:a38f42e9e2d5ac8387db0122aecac79be"><td class="mdescLeft"> </td><td class="mdescRight">current position in m_value <a href="#a38f42e9e2d5ac8387db0122aecac79be">More...</a><br /></td></tr> <tr class="separator:a38f42e9e2d5ac8387db0122aecac79be"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a> Private Member Functions</h2></td></tr> <tr class="memitem:a580e46028e0104de8d6afab733c8b679"><td class="memItemLeft" align="right" valign="top">UINT32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#a580e46028e0104de8d6afab733c8b679">ComposeBitplane</a> (UINT32 bufferSize, <a class="el" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> planeMask, UINT32 *sigBits, UINT32 *refBits, UINT32 *signBits)</td></tr> <tr class="separator:a580e46028e0104de8d6afab733c8b679"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa6e8f0dedcdeb9e592de7dde07b5025e"><td class="memItemLeft" align="right" valign="top">UINT32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#aa6e8f0dedcdeb9e592de7dde07b5025e">ComposeBitplaneRLD</a> (UINT32 bufferSize, <a class="el" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> planeMask, UINT32 sigPos, UINT32 *refBits)</td></tr> <tr class="separator:aa6e8f0dedcdeb9e592de7dde07b5025e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af7de96f745479ca3956f671a7f794489"><td class="memItemLeft" align="right" valign="top">UINT32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#af7de96f745479ca3956f671a7f794489">ComposeBitplaneRLD</a> (UINT32 bufferSize, <a class="el" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> planeMask, UINT32 *sigBits, UINT32 *refBits, UINT32 signPos)</td></tr> <tr class="separator:af7de96f745479ca3956f671a7f794489"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4bf1b6bc026f95ef4d93fbdfaf69f724"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#a4bf1b6bc026f95ef4d93fbdfaf69f724">SetBitAtPos</a> (UINT32 pos, <a class="el" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> planeMask)</td></tr> <tr class="separator:a4bf1b6bc026f95ef4d93fbdfaf69f724"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7fd4539d524903d148ceb4de940d3194"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#a7fd4539d524903d148ceb4de940d3194">SetSign</a> (UINT32 pos, bool sign)</td></tr> <tr class="separator:a7fd4539d524903d148ceb4de940d3194"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a> Private Attributes</h2></td></tr> <tr class="memitem:a4a4b0f49967a8fc938295fdcc5093e66"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCDecoder.html">CDecoder</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#a4a4b0f49967a8fc938295fdcc5093e66">m_decoder</a></td></tr> <tr class="separator:a4a4b0f49967a8fc938295fdcc5093e66"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af6931769654b397d6c3becae44e868b0"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">m_sigFlagVector</a> [<a class="el" href="PGFtypes_8h.html#aa362edf6db9662acf6ef958a6db19c35">BufferSize</a>+1]</td></tr> <tr class="separator:af6931769654b397d6c3becae44e868b0"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>A macro block is a decoding unit of fixed size (uncoded) </p> <p>PGF decoder macro block class. </p><dl class="section author"><dt>Author</dt><dd>C. Stamm, I. Bauersachs </dd></dl> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00051">51</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> </div><h2 class="groupheader">Constructor & Destructor Documentation</h2> <a id="a023a230fc23472478e5429cef5ec4be4"></a> <h2 class="memtitle"><span class="permalink"><a href="#a023a230fc23472478e5429cef5ec4be4">◆ </a></span>CMacroBlock()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">CDecoder::CMacroBlock::CMacroBlock </td> <td>(</td> <td class="paramtype"><a class="el" href="classCDecoder.html">CDecoder</a> * </td> <td class="paramname"><em>decoder</em></td><td>)</td> <td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Constructor: Initializes new macro block. </p><dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">decoder</td><td>Pointer to outer class. </td></tr> </table> </dd> </dl> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00056">56</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> <div class="fragment"><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  : <a class="code" href="classCDecoder_1_1CMacroBlock.html#a19247bd5e6073252c45abf9d33b44ee0">m_header</a>(0) <span class="comment">// makes sure that IsCompletelyRead() returns true for an empty macro block</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  , <a class="code" href="classCDecoder_1_1CMacroBlock.html#a38f42e9e2d5ac8387db0122aecac79be">m_valuePos</a>(0)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  , <a class="code" href="classCDecoder_1_1CMacroBlock.html#a4a4b0f49967a8fc938295fdcc5093e66">m_decoder</a>(decoder)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  ASSERT(<a class="code" href="classCDecoder_1_1CMacroBlock.html#a4a4b0f49967a8fc938295fdcc5093e66">m_decoder</a>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a38f42e9e2d5ac8387db0122aecac79be"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a38f42e9e2d5ac8387db0122aecac79be">CDecoder::CMacroBlock::m_valuePos</a></div><div class="ttdeci">UINT32 m_valuePos</div><div class="ttdoc">current position in m_value </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00078">Decoder.h:78</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a19247bd5e6073252c45abf9d33b44ee0"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a19247bd5e6073252c45abf9d33b44ee0">CDecoder::CMacroBlock::m_header</a></div><div class="ttdeci">ROIBlockHeader m_header</div><div class="ttdoc">block header </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00075">Decoder.h:75</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a4a4b0f49967a8fc938295fdcc5093e66"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a4a4b0f49967a8fc938295fdcc5093e66">CDecoder::CMacroBlock::m_decoder</a></div><div class="ttdeci">CDecoder * m_decoder</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00087">Decoder.h:87</a></div></div> </div><!-- fragment --> </div> </div> <h2 class="groupheader">Member Function Documentation</h2> <a id="a72899e368b29833bd485c4858b5ad7ef"></a> <h2 class="memtitle"><span class="permalink"><a href="#a72899e368b29833bd485c4858b5ad7ef">◆ </a></span>BitplaneDecode()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CDecoder::CMacroBlock::BitplaneDecode </td> <td>(</td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Decodes already read input data into this macro block. Several macro blocks can be decoded in parallel. Call <a class="el" href="classCDecoder.html#a63cfb5880877780be5e9e10a33dcedf0" title="throws IOException ">CDecoder::ReadMacroBlock</a> before this method. </p> <p class="definition">Definition at line <a class="el" href="Decoder_8cpp_source.html#l00619">619</a> of file <a class="el" href="Decoder_8cpp_source.html">Decoder.cpp</a>.</p> <div class="fragment"><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  UINT32 bufferSize = <a class="code" href="classCDecoder_1_1CMacroBlock.html#a19247bd5e6073252c45abf9d33b44ee0">m_header</a>.<a class="code" href="unionROIBlockHeader.html#a15ceb2e488c3767cc1ab774323c02ded">rbh</a>.<a class="code" href="structROIBlockHeader_1_1RBH.html#af0c3de8c247b06116a9d84d2f9515762">bufferSize</a>; ASSERT(bufferSize <= <a class="code" href="PGFtypes_8h.html#aa362edf6db9662acf6ef958a6db19c35">BufferSize</a>);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span> </div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  UINT32 nPlanes;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  UINT32 codePos = 0, codeLen, sigLen, sigPos, signLen, signPos;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <a class="code" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> planeMask;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="comment">// clear significance vector</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keywordflow">for</span> (UINT32 k=0; k < bufferSize; k++) {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">m_sigFlagVector</a>[k] = <span class="keyword">false</span>;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">m_sigFlagVector</a>[bufferSize] = <span class="keyword">true</span>; <span class="comment">// sentinel</span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="comment">// clear output buffer</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">for</span> (UINT32 k=0; k < <a class="code" href="PGFtypes_8h.html#aa362edf6db9662acf6ef958a6db19c35">BufferSize</a>; k++) {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">m_value</a>[k] = 0;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="comment">// read number of bit planes</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="comment">// <nPlanes></span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  nPlanes = <a class="code" href="BitStream_8h.html#a9ce8e37cd9f9d07d4a91094472a0fc5a">GetValueBlock</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, 0, <a class="code" href="PGFtypes_8h.html#a0acbc7f581c1eceef6a70713308987d5">MaxBitPlanesLog</a>); </div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  codePos += <a class="code" href="PGFtypes_8h.html#a0acbc7f581c1eceef6a70713308987d5">MaxBitPlanesLog</a>;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="comment">// loop through all bit planes</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keywordflow">if</span> (nPlanes == 0) nPlanes = <a class="code" href="PGFtypes_8h.html#ae0625b6a0d1a8187599a680c6b559860">MaxBitPlanes</a> + 1;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  ASSERT(0 < nPlanes && nPlanes <= <a class="code" href="PGFtypes_8h.html#ae0625b6a0d1a8187599a680c6b559860">MaxBitPlanes</a> + 1);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  planeMask = 1 << (nPlanes - 1);</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span> </div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> plane = nPlanes - 1; plane >= 0; plane--) {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="comment">// read RL code</span></div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordflow">if</span> (<a class="code" href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, codePos)) {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="comment">// RL coding of sigBits is used</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="comment">// <1><codeLen><codedSigAndSignBits>_<refBits></span></div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  codePos++;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="comment">// read codeLen</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  codeLen = <a class="code" href="BitStream_8h.html#a9ce8e37cd9f9d07d4a91094472a0fc5a">GetValueBlock</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, codePos, <a class="code" href="PGFtypes_8h.html#ac0d66809e03f0e5939ed8de744700079">RLblockSizeLen</a>); ASSERT(codeLen <= <a class="code" href="Decoder_8cpp.html#add8bd7fd3fbb318e2f76b4ae33cf6020">MaxCodeLen</a>);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="comment">// position of encoded sigBits and signBits</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  sigPos = codePos + <a class="code" href="PGFtypes_8h.html#ac0d66809e03f0e5939ed8de744700079">RLblockSizeLen</a>; ASSERT(sigPos < <a class="code" href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a>); </div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="comment">// refinement bits</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  codePos = <a class="code" href="BitStream_8h.html#a02bb2289d37f806f66c6ba6fd51977a4">AlignWordPos</a>(sigPos + codeLen); ASSERT(codePos < <a class="code" href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a>); </div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span> </div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="comment">// run-length decode significant bits and signs from m_codeBuffer and </span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="comment">// read refinement bits from m_codeBuffer and compose bit plane</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  sigLen = <a class="code" href="classCDecoder_1_1CMacroBlock.html#aa6e8f0dedcdeb9e592de7dde07b5025e">ComposeBitplaneRLD</a>(bufferSize, planeMask, sigPos, &<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>[codePos >> <a class="code" href="PGFplatform_8h.html#a5e75d7d14aaea5860c612758ef77b687">WordWidthLog</a>]);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="comment">// no RL coding is used for sigBits and signBits together</span></div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <span class="comment">// <0><sigLen></span></div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  codePos++;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="comment">// read sigLen</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  sigLen = <a class="code" href="BitStream_8h.html#a9ce8e37cd9f9d07d4a91094472a0fc5a">GetValueBlock</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, codePos, <a class="code" href="PGFtypes_8h.html#ac0d66809e03f0e5939ed8de744700079">RLblockSizeLen</a>); ASSERT(sigLen <= <a class="code" href="Decoder_8cpp.html#add8bd7fd3fbb318e2f76b4ae33cf6020">MaxCodeLen</a>);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  codePos += <a class="code" href="PGFtypes_8h.html#ac0d66809e03f0e5939ed8de744700079">RLblockSizeLen</a>; ASSERT(codePos < <a class="code" href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a>);</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="comment">// read RL code for signBits</span></div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">if</span> (<a class="code" href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, codePos)) {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="comment">// RL coding is used just for signBits</span></div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="comment">// <1><codeLen><codedSignBits>_<sigBits>_<refBits></span></div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  codePos++;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="comment">// read codeLen</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  codeLen = <a class="code" href="BitStream_8h.html#a9ce8e37cd9f9d07d4a91094472a0fc5a">GetValueBlock</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, codePos, <a class="code" href="PGFtypes_8h.html#ac0d66809e03f0e5939ed8de744700079">RLblockSizeLen</a>); ASSERT(codeLen <= <a class="code" href="Decoder_8cpp.html#add8bd7fd3fbb318e2f76b4ae33cf6020">MaxCodeLen</a>);</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="comment">// sign bits</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  signPos = codePos + <a class="code" href="PGFtypes_8h.html#ac0d66809e03f0e5939ed8de744700079">RLblockSizeLen</a>; ASSERT(signPos < <a class="code" href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a>);</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  </div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="comment">// significant bits</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  sigPos = <a class="code" href="BitStream_8h.html#a02bb2289d37f806f66c6ba6fd51977a4">AlignWordPos</a>(signPos + codeLen); ASSERT(sigPos < <a class="code" href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a>);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="comment">// refinement bits</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  codePos = <a class="code" href="BitStream_8h.html#a02bb2289d37f806f66c6ba6fd51977a4">AlignWordPos</a>(sigPos + sigLen); ASSERT(codePos < <a class="code" href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a>);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="comment">// read significant and refinement bitset from m_codeBuffer</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  sigLen = <a class="code" href="classCDecoder_1_1CMacroBlock.html#aa6e8f0dedcdeb9e592de7dde07b5025e">ComposeBitplaneRLD</a>(bufferSize, planeMask, &<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>[sigPos >> <a class="code" href="PGFplatform_8h.html#a5e75d7d14aaea5860c612758ef77b687">WordWidthLog</a>], &<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>[codePos >> <a class="code" href="PGFplatform_8h.html#a5e75d7d14aaea5860c612758ef77b687">WordWidthLog</a>], signPos);</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  </div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="comment">// RL coding of signBits was not efficient and therefore not used</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="comment">// <0><signLen>_<signBits>_<sigBits>_<refBits></span></div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  codePos++;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="comment">// read signLen</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  signLen = <a class="code" href="BitStream_8h.html#a9ce8e37cd9f9d07d4a91094472a0fc5a">GetValueBlock</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, codePos, <a class="code" href="PGFtypes_8h.html#ac0d66809e03f0e5939ed8de744700079">RLblockSizeLen</a>); ASSERT(signLen <= <a class="code" href="Decoder_8cpp.html#add8bd7fd3fbb318e2f76b4ae33cf6020">MaxCodeLen</a>);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  </div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="comment">// sign bits</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  signPos = <a class="code" href="BitStream_8h.html#a02bb2289d37f806f66c6ba6fd51977a4">AlignWordPos</a>(codePos + <a class="code" href="PGFtypes_8h.html#ac0d66809e03f0e5939ed8de744700079">RLblockSizeLen</a>); ASSERT(signPos < <a class="code" href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a>);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="comment">// significant bits</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  sigPos = <a class="code" href="BitStream_8h.html#a02bb2289d37f806f66c6ba6fd51977a4">AlignWordPos</a>(signPos + signLen); ASSERT(sigPos < <a class="code" href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a>);</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="comment">// refinement bits</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  codePos = <a class="code" href="BitStream_8h.html#a02bb2289d37f806f66c6ba6fd51977a4">AlignWordPos</a>(sigPos + sigLen); ASSERT(codePos < <a class="code" href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a>);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> </div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="comment">// read significant and refinement bitset from m_codeBuffer</span></div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  sigLen = <a class="code" href="classCDecoder_1_1CMacroBlock.html#a580e46028e0104de8d6afab733c8b679">ComposeBitplane</a>(bufferSize, planeMask, &<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>[sigPos >> <a class="code" href="PGFplatform_8h.html#a5e75d7d14aaea5860c612758ef77b687">WordWidthLog</a>], &<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>[codePos >> <a class="code" href="PGFplatform_8h.html#a5e75d7d14aaea5860c612758ef77b687">WordWidthLog</a>], &<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>[signPos >> <a class="code" href="PGFplatform_8h.html#a5e75d7d14aaea5860c612758ef77b687">WordWidthLog</a>]);</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  }</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  }</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="comment">// start of next chunk</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  codePos = <a class="code" href="BitStream_8h.html#a02bb2289d37f806f66c6ba6fd51977a4">AlignWordPos</a>(codePos + bufferSize - sigLen); ASSERT(codePos < <a class="code" href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a>); </div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  </div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="comment">// next plane</span></div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  planeMask >>= 1;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a38f42e9e2d5ac8387db0122aecac79be">m_valuePos</a> = 0;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span> }</div><div class="ttc" id="BitStream_8h_html_a69b4aa39485781bde435f86fd4851c0e"><div class="ttname"><a href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a></div><div class="ttdeci">bool GetBit(UINT32 *stream, UINT32 pos)</div><div class="ttdef"><b>Definition:</b> <a href="BitStream_8h_source.html#l00065">BitStream.h:65</a></div></div> <div class="ttc" id="unionROIBlockHeader_html_a15ceb2e488c3767cc1ab774323c02ded"><div class="ttname"><a href="unionROIBlockHeader.html#a15ceb2e488c3767cc1ab774323c02ded">ROIBlockHeader::rbh</a></div><div class="ttdeci">struct ROIBlockHeader::RBH rbh</div><div class="ttdoc">ROI block header. </div></div> <div class="ttc" id="structROIBlockHeader_1_1RBH_html_af0c3de8c247b06116a9d84d2f9515762"><div class="ttname"><a href="structROIBlockHeader_1_1RBH.html#af0c3de8c247b06116a9d84d2f9515762">ROIBlockHeader::RBH::bufferSize</a></div><div class="ttdeci">UINT16 bufferSize</div><div class="ttdoc">number of uncoded UINT32 values in a block </div><div class="ttdef"><b>Definition:</b> <a href="PGFtypes_8h_source.html#l00167">PGFtypes.h:167</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a580e46028e0104de8d6afab733c8b679"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a580e46028e0104de8d6afab733c8b679">CDecoder::CMacroBlock::ComposeBitplane</a></div><div class="ttdeci">UINT32 ComposeBitplane(UINT32 bufferSize, DataT planeMask, UINT32 *sigBits, UINT32 *refBits, UINT32 *signBits)</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8cpp_source.html#l00734">Decoder.cpp:734</a></div></div> <div class="ttc" id="Decoder_8cpp_html_add8bd7fd3fbb318e2f76b4ae33cf6020"><div class="ttname"><a href="Decoder_8cpp.html#add8bd7fd3fbb318e2f76b4ae33cf6020">MaxCodeLen</a></div><div class="ttdeci">#define MaxCodeLen</div><div class="ttdoc">max length of RL encoded block </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8cpp_source.html#l00059">Decoder.cpp:59</a></div></div> <div class="ttc" id="BitStream_8h_html_a02bb2289d37f806f66c6ba6fd51977a4"><div class="ttname"><a href="BitStream_8h.html#a02bb2289d37f806f66c6ba6fd51977a4">AlignWordPos</a></div><div class="ttdeci">UINT32 AlignWordPos(UINT32 pos)</div><div class="ttdef"><b>Definition:</b> <a href="BitStream_8h_source.html#l00260">BitStream.h:260</a></div></div> <div class="ttc" id="PGFtypes_8h_html_acb1ee3f52ccfad782dcaa0abd79e5d05"><div class="ttname"><a href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a></div><div class="ttdeci">INT32 DataT</div><div class="ttdef"><b>Definition:</b> <a href="PGFtypes_8h_source.html#l00219">PGFtypes.h:219</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a38f42e9e2d5ac8387db0122aecac79be"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a38f42e9e2d5ac8387db0122aecac79be">CDecoder::CMacroBlock::m_valuePos</a></div><div class="ttdeci">UINT32 m_valuePos</div><div class="ttdoc">current position in m_value </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00078">Decoder.h:78</a></div></div> <div class="ttc" id="PGFtypes_8h_html_aa362edf6db9662acf6ef958a6db19c35"><div class="ttname"><a href="PGFtypes_8h.html#aa362edf6db9662acf6ef958a6db19c35">BufferSize</a></div><div class="ttdeci">#define BufferSize</div><div class="ttdoc">must be a multiple of WordWidth </div><div class="ttdef"><b>Definition:</b> <a href="PGFtypes_8h_source.html#l00077">PGFtypes.h:77</a></div></div> <div class="ttc" id="PGFtypes_8h_html_ac0d66809e03f0e5939ed8de744700079"><div class="ttname"><a href="PGFtypes_8h.html#ac0d66809e03f0e5939ed8de744700079">RLblockSizeLen</a></div><div class="ttdeci">#define RLblockSizeLen</div><div class="ttdoc">block size length (< 16): ld(BufferSize) < RLblockSizeLen <= 2*ld(BufferSize) </div><div class="ttdef"><b>Definition:</b> <a href="PGFtypes_8h_source.html#l00078">PGFtypes.h:78</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a7722de1000647fb5a894db2e2f348bdd"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">CDecoder::CMacroBlock::m_value</a></div><div class="ttdeci">DataT m_value[BufferSize]</div><div class="ttdoc">output buffer of values with index m_valuePos </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00076">Decoder.h:76</a></div></div> <div class="ttc" id="PGFplatform_8h_html_a5e75d7d14aaea5860c612758ef77b687"><div class="ttname"><a href="PGFplatform_8h.html#a5e75d7d14aaea5860c612758ef77b687">WordWidthLog</a></div><div class="ttdeci">#define WordWidthLog</div><div class="ttdoc">ld of WordWidth </div><div class="ttdef"><b>Definition:</b> <a href="PGFplatform_8h_source.html#l00074">PGFplatform.h:74</a></div></div> <div class="ttc" id="PGFtypes_8h_html_a0acbc7f581c1eceef6a70713308987d5"><div class="ttname"><a href="PGFtypes_8h.html#a0acbc7f581c1eceef6a70713308987d5">MaxBitPlanesLog</a></div><div class="ttdeci">#define MaxBitPlanesLog</div><div class="ttdoc">number of bits to code the maximum number of bit planes (in 32 or 16 bit mode) </div><div class="ttdef"><b>Definition:</b> <a href="PGFtypes_8h_source.html#l00086">PGFtypes.h:86</a></div></div> <div class="ttc" id="BitStream_8h_html_a9ce8e37cd9f9d07d4a91094472a0fc5a"><div class="ttname"><a href="BitStream_8h.html#a9ce8e37cd9f9d07d4a91094472a0fc5a">GetValueBlock</a></div><div class="ttdeci">UINT32 GetValueBlock(UINT32 *stream, UINT32 pos, UINT32 k)</div><div class="ttdef"><b>Definition:</b> <a href="BitStream_8h_source.html#l00128">BitStream.h:128</a></div></div> <div class="ttc" id="PGFtypes_8h_html_ae0625b6a0d1a8187599a680c6b559860"><div class="ttname"><a href="PGFtypes_8h.html#ae0625b6a0d1a8187599a680c6b559860">MaxBitPlanes</a></div><div class="ttdeci">#define MaxBitPlanes</div><div class="ttdoc">maximum number of bit planes of m_value: 32 minus sign bit </div><div class="ttdef"><b>Definition:</b> <a href="PGFtypes_8h_source.html#l00082">PGFtypes.h:82</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_aa6e8f0dedcdeb9e592de7dde07b5025e"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#aa6e8f0dedcdeb9e592de7dde07b5025e">CDecoder::CMacroBlock::ComposeBitplaneRLD</a></div><div class="ttdeci">UINT32 ComposeBitplaneRLD(UINT32 bufferSize, DataT planeMask, UINT32 sigPos, UINT32 *refBits)</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8cpp_source.html#l00797">Decoder.cpp:797</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a19247bd5e6073252c45abf9d33b44ee0"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a19247bd5e6073252c45abf9d33b44ee0">CDecoder::CMacroBlock::m_header</a></div><div class="ttdeci">ROIBlockHeader m_header</div><div class="ttdoc">block header </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00075">Decoder.h:75</a></div></div> <div class="ttc" id="Decoder_8cpp_html_abc1529b42b4ec49f6674b24b5b0d0a45"><div class="ttname"><a href="Decoder_8cpp.html#abc1529b42b4ec49f6674b24b5b0d0a45">CodeBufferBitLen</a></div><div class="ttdeci">#define CodeBufferBitLen</div><div class="ttdoc">max number of bits in m_codeBuffer </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8cpp_source.html#l00058">Decoder.cpp:58</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_af6931769654b397d6c3becae44e868b0"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">CDecoder::CMacroBlock::m_sigFlagVector</a></div><div class="ttdeci">bool m_sigFlagVector[BufferSize+1]</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00088">Decoder.h:88</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_ace0702d7f8281972b1db091248c3c80b"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">CDecoder::CMacroBlock::m_codeBuffer</a></div><div class="ttdeci">UINT32 m_codeBuffer[CodeBufferLen]</div><div class="ttdoc">input buffer for encoded bitstream </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00077">Decoder.h:77</a></div></div> </div><!-- fragment --> </div> </div> <a id="a580e46028e0104de8d6afab733c8b679"></a> <h2 class="memtitle"><span class="permalink"><a href="#a580e46028e0104de8d6afab733c8b679">◆ </a></span>ComposeBitplane()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">UINT32 CDecoder::CMacroBlock::ComposeBitplane </td> <td>(</td> <td class="paramtype">UINT32 </td> <td class="paramname"><em>bufferSize</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> </td> <td class="paramname"><em>planeMask</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">UINT32 * </td> <td class="paramname"><em>sigBits</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">UINT32 * </td> <td class="paramname"><em>refBits</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">UINT32 * </td> <td class="paramname"><em>signBits</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">private</span></span> </td> </tr> </table> </div><div class="memdoc"> <p class="definition">Definition at line <a class="el" href="Decoder_8cpp_source.html#l00734">734</a> of file <a class="el" href="Decoder_8cpp_source.html">Decoder.cpp</a>.</p> <div class="fragment"><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  {</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  ASSERT(sigBits);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  ASSERT(refBits);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  ASSERT(signBits);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  UINT32 valPos = 0, signPos = 0, refPos = 0;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  UINT32 sigPos = 0, sigEnd;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  UINT32 zerocnt;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">while</span> (valPos < bufferSize) {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <span class="comment">// search next 1 in m_sigFlagVector using searching with sentinel</span></div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  sigEnd = valPos;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">while</span>(!<a class="code" href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">m_sigFlagVector</a>[sigEnd]) { sigEnd++; }</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  sigEnd -= valPos;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  sigEnd += sigPos;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span> </div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="comment">// search 1's in sigBits[sigPos..sigEnd)</span></div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="comment">// these 1's are significant bits</span></div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">while</span> (sigPos < sigEnd) {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="comment">// search 0's</span></div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  zerocnt = <a class="code" href="BitStream_8h.html#ae36276982f7302d827c1345dd6440a8c">SeekBitRange</a>(sigBits, sigPos, sigEnd - sigPos);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  sigPos += zerocnt;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  valPos += zerocnt;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keywordflow">if</span> (sigPos < sigEnd) {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <span class="comment">// write bit to m_value</span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a4bf1b6bc026f95ef4d93fbdfaf69f724">SetBitAtPos</a>(valPos, planeMask);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span> </div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="comment">// copy sign bit</span></div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a7fd4539d524903d148ceb4de940d3194">SetSign</a>(valPos, <a class="code" href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a>(signBits, signPos++)); </div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span> </div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="comment">// update significance flag vector</span></div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">m_sigFlagVector</a>[valPos++] = <span class="keyword">true</span>;</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  sigPos++; </div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  }</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  }</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <span class="comment">// refinement bit</span></div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="keywordflow">if</span> (valPos < bufferSize) {</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="comment">// write one refinement bit</span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <span class="keywordflow">if</span> (<a class="code" href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a>(refBits, refPos)) {</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a4bf1b6bc026f95ef4d93fbdfaf69f724">SetBitAtPos</a>(valPos, planeMask);</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  }</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  refPos++;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  valPos++;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  }</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  }</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  ASSERT(sigPos <= bufferSize);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  ASSERT(refPos <= bufferSize);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  ASSERT(signPos <= bufferSize);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  ASSERT(valPos == bufferSize);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span> </div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">return</span> sigPos;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span> }</div><div class="ttc" id="BitStream_8h_html_a69b4aa39485781bde435f86fd4851c0e"><div class="ttname"><a href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a></div><div class="ttdeci">bool GetBit(UINT32 *stream, UINT32 pos)</div><div class="ttdef"><b>Definition:</b> <a href="BitStream_8h_source.html#l00065">BitStream.h:65</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a4bf1b6bc026f95ef4d93fbdfaf69f724"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a4bf1b6bc026f95ef4d93fbdfaf69f724">CDecoder::CMacroBlock::SetBitAtPos</a></div><div class="ttdeci">void SetBitAtPos(UINT32 pos, DataT planeMask)</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00084">Decoder.h:84</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a7fd4539d524903d148ceb4de940d3194"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a7fd4539d524903d148ceb4de940d3194">CDecoder::CMacroBlock::SetSign</a></div><div class="ttdeci">void SetSign(UINT32 pos, bool sign)</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00085">Decoder.h:85</a></div></div> <div class="ttc" id="BitStream_8h_html_ae36276982f7302d827c1345dd6440a8c"><div class="ttname"><a href="BitStream_8h.html#ae36276982f7302d827c1345dd6440a8c">SeekBitRange</a></div><div class="ttdeci">UINT32 SeekBitRange(UINT32 *stream, UINT32 pos, UINT32 len)</div><div class="ttdef"><b>Definition:</b> <a href="BitStream_8h_source.html#l00206">BitStream.h:206</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_af6931769654b397d6c3becae44e868b0"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">CDecoder::CMacroBlock::m_sigFlagVector</a></div><div class="ttdeci">bool m_sigFlagVector[BufferSize+1]</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00088">Decoder.h:88</a></div></div> </div><!-- fragment --> </div> </div> <a id="aa6e8f0dedcdeb9e592de7dde07b5025e"></a> <h2 class="memtitle"><span class="permalink"><a href="#aa6e8f0dedcdeb9e592de7dde07b5025e">◆ </a></span>ComposeBitplaneRLD() <span class="overload">[1/2]</span></h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">UINT32 CDecoder::CMacroBlock::ComposeBitplaneRLD </td> <td>(</td> <td class="paramtype">UINT32 </td> <td class="paramname"><em>bufferSize</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> </td> <td class="paramname"><em>planeMask</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">UINT32 </td> <td class="paramname"><em>sigPos</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">UINT32 * </td> <td class="paramname"><em>refBits</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">private</span></span> </td> </tr> </table> </div><div class="memdoc"> <p class="definition">Definition at line <a class="el" href="Decoder_8cpp_source.html#l00797">797</a> of file <a class="el" href="Decoder_8cpp_source.html">Decoder.cpp</a>.</p> <div class="fragment"><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  {</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  ASSERT(refBits);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span> </div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  UINT32 valPos = 0, refPos = 0;</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  UINT32 sigPos = 0, sigEnd;</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  UINT32 k = 3;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  UINT32 runlen = 1 << k; <span class="comment">// = 2^k</span></div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  UINT32 count = 0, rest = 0;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="keywordtype">bool</span> set1 = <span class="keyword">false</span>;</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">while</span> (valPos < bufferSize) {</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="comment">// search next 1 in m_sigFlagVector using searching with sentinel</span></div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  sigEnd = valPos;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">while</span>(!<a class="code" href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">m_sigFlagVector</a>[sigEnd]) { sigEnd++; }</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  sigEnd -= valPos;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  sigEnd += sigPos;</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span> </div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keywordflow">while</span> (sigPos < sigEnd) {</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="keywordflow">if</span> (rest || set1) {</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="comment">// rest of last run</span></div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  sigPos += rest;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  valPos += rest;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  rest = 0;</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="comment">// decode significant bits</span></div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <span class="keywordflow">if</span> (<a class="code" href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, codePos++)) {</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <span class="comment">// extract counter and generate zero run of length count</span></div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">if</span> (k > 0) {</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="comment">// extract counter</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  count = <a class="code" href="BitStream_8h.html#a9ce8e37cd9f9d07d4a91094472a0fc5a">GetValueBlock</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, codePos, k); </div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  codePos += k;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keywordflow">if</span> (count > 0) {</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  sigPos += count;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  valPos += count;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  }</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span> </div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="comment">// adapt k (half run-length interval)</span></div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  k--;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  runlen >>= 1;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  }</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span> </div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  set1 = <span class="keyword">true</span>;</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span> </div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="comment">// generate zero run of length 2^k</span></div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  sigPos += runlen;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  valPos += runlen;</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span> </div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="comment">// adapt k (double run-length interval)</span></div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">if</span> (k < <a class="code" href="PGFplatform_8h.html#abeb69f096b599bae58cbc58ba48250a5">WordWidth</a>) {</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  k++;</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  runlen <<= 1;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  }</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  }</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  }</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span> </div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordflow">if</span> (sigPos < sigEnd) {</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordflow">if</span> (set1) {</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  set1 = <span class="keyword">false</span>;</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> </div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="comment">// write 1 bit</span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a4bf1b6bc026f95ef4d93fbdfaf69f724">SetBitAtPos</a>(valPos, planeMask);</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span> </div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="comment">// set sign bit</span></div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a7fd4539d524903d148ceb4de940d3194">SetSign</a>(valPos, <a class="code" href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, codePos++)); </div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> </div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="comment">// update significance flag vector</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">m_sigFlagVector</a>[valPos++] = <span class="keyword">true</span>;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  sigPos++;</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  }</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  rest = sigPos - sigEnd;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  sigPos = sigEnd;</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  valPos -= rest;</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  }</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span> </div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span> </div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <span class="comment">// refinement bit</span></div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keywordflow">if</span> (valPos < bufferSize) {</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="comment">// write one refinement bit</span></div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  <span class="keywordflow">if</span> (<a class="code" href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a>(refBits, refPos)) {</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a4bf1b6bc026f95ef4d93fbdfaf69f724">SetBitAtPos</a>(valPos, planeMask);</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  }</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  refPos++;</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  valPos++;</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  }</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  ASSERT(sigPos <= bufferSize);</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  ASSERT(refPos <= bufferSize);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  ASSERT(valPos == bufferSize);</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span> </div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="keywordflow">return</span> sigPos;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span> }</div><div class="ttc" id="BitStream_8h_html_a69b4aa39485781bde435f86fd4851c0e"><div class="ttname"><a href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a></div><div class="ttdeci">bool GetBit(UINT32 *stream, UINT32 pos)</div><div class="ttdef"><b>Definition:</b> <a href="BitStream_8h_source.html#l00065">BitStream.h:65</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a4bf1b6bc026f95ef4d93fbdfaf69f724"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a4bf1b6bc026f95ef4d93fbdfaf69f724">CDecoder::CMacroBlock::SetBitAtPos</a></div><div class="ttdeci">void SetBitAtPos(UINT32 pos, DataT planeMask)</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00084">Decoder.h:84</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a7fd4539d524903d148ceb4de940d3194"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a7fd4539d524903d148ceb4de940d3194">CDecoder::CMacroBlock::SetSign</a></div><div class="ttdeci">void SetSign(UINT32 pos, bool sign)</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00085">Decoder.h:85</a></div></div> <div class="ttc" id="BitStream_8h_html_a9ce8e37cd9f9d07d4a91094472a0fc5a"><div class="ttname"><a href="BitStream_8h.html#a9ce8e37cd9f9d07d4a91094472a0fc5a">GetValueBlock</a></div><div class="ttdeci">UINT32 GetValueBlock(UINT32 *stream, UINT32 pos, UINT32 k)</div><div class="ttdef"><b>Definition:</b> <a href="BitStream_8h_source.html#l00128">BitStream.h:128</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_af6931769654b397d6c3becae44e868b0"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">CDecoder::CMacroBlock::m_sigFlagVector</a></div><div class="ttdeci">bool m_sigFlagVector[BufferSize+1]</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00088">Decoder.h:88</a></div></div> <div class="ttc" id="PGFplatform_8h_html_abeb69f096b599bae58cbc58ba48250a5"><div class="ttname"><a href="PGFplatform_8h.html#abeb69f096b599bae58cbc58ba48250a5">WordWidth</a></div><div class="ttdeci">#define WordWidth</div><div class="ttdoc">WordBytes*8. </div><div class="ttdef"><b>Definition:</b> <a href="PGFplatform_8h_source.html#l00073">PGFplatform.h:73</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_ace0702d7f8281972b1db091248c3c80b"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">CDecoder::CMacroBlock::m_codeBuffer</a></div><div class="ttdeci">UINT32 m_codeBuffer[CodeBufferLen]</div><div class="ttdoc">input buffer for encoded bitstream </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00077">Decoder.h:77</a></div></div> </div><!-- fragment --> </div> </div> <a id="af7de96f745479ca3956f671a7f794489"></a> <h2 class="memtitle"><span class="permalink"><a href="#af7de96f745479ca3956f671a7f794489">◆ </a></span>ComposeBitplaneRLD() <span class="overload">[2/2]</span></h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">UINT32 CDecoder::CMacroBlock::ComposeBitplaneRLD </td> <td>(</td> <td class="paramtype">UINT32 </td> <td class="paramname"><em>bufferSize</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> </td> <td class="paramname"><em>planeMask</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">UINT32 * </td> <td class="paramname"><em>sigBits</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">UINT32 * </td> <td class="paramname"><em>refBits</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">UINT32 </td> <td class="paramname"><em>signPos</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">private</span></span> </td> </tr> </table> </div><div class="memdoc"> <p class="definition">Definition at line <a class="el" href="Decoder_8cpp_source.html#l00900">900</a> of file <a class="el" href="Decoder_8cpp_source.html">Decoder.cpp</a>.</p> <div class="fragment"><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  {</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  ASSERT(sigBits);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  ASSERT(refBits);</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> </div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  UINT32 valPos = 0, refPos = 0;</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  UINT32 sigPos = 0, sigEnd;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  UINT32 zerocnt, count = 0;</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  UINT32 k = 0;</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  UINT32 runlen = 1 << k; <span class="comment">// = 2^k</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="keywordtype">bool</span> signBit = <span class="keyword">false</span>;</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  <span class="keywordtype">bool</span> zeroAfterRun = <span class="keyword">false</span>;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">while</span> (valPos < bufferSize) {</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  <span class="comment">// search next 1 in m_sigFlagVector using searching with sentinel</span></div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  sigEnd = valPos;</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="keywordflow">while</span>(!<a class="code" href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">m_sigFlagVector</a>[sigEnd]) { sigEnd++; }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  sigEnd -= valPos;</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  sigEnd += sigPos;</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span> </div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="comment">// search 1's in sigBits[sigPos..sigEnd)</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="comment">// these 1's are significant bits</span></div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="keywordflow">while</span> (sigPos < sigEnd) {</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  <span class="comment">// search 0's</span></div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  zerocnt = <a class="code" href="BitStream_8h.html#ae36276982f7302d827c1345dd6440a8c">SeekBitRange</a>(sigBits, sigPos, sigEnd - sigPos);</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  sigPos += zerocnt;</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  valPos += zerocnt;</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="keywordflow">if</span> (sigPos < sigEnd) {</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  <span class="comment">// write bit to m_value</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a4bf1b6bc026f95ef4d93fbdfaf69f724">SetBitAtPos</a>(valPos, planeMask);</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span> </div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <span class="comment">// check sign bit</span></div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  <span class="keywordflow">if</span> (count == 0) {</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="comment">// all 1's have been set</span></div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <span class="keywordflow">if</span> (zeroAfterRun) {</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="comment">// finish the run with a 0</span></div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  signBit = <span class="keyword">false</span>;</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  zeroAfterRun = <span class="keyword">false</span>;</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="comment">// decode next sign bit</span></div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="keywordflow">if</span> (<a class="code" href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, signPos++)) {</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="comment">// generate 1's run of length 2^k</span></div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  count = runlen - 1;</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  signBit = <span class="keyword">true</span>;</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  </div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <span class="comment">// adapt k (double run-length interval)</span></div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <span class="keywordflow">if</span> (k < <a class="code" href="PGFplatform_8h.html#abeb69f096b599bae58cbc58ba48250a5">WordWidth</a>) {</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  k++; </div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  runlen <<= 1;</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  }</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <span class="comment">// extract counter and generate 1's run of length count</span></div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keywordflow">if</span> (k > 0) {</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="comment">// extract counter</span></div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  count = <a class="code" href="BitStream_8h.html#a9ce8e37cd9f9d07d4a91094472a0fc5a">GetValueBlock</a>(<a class="code" href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">m_codeBuffer</a>, signPos, k); </div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  signPos += k;</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span> </div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  <span class="comment">// adapt k (half run-length interval)</span></div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  k--; </div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  runlen >>= 1;</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  }</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="keywordflow">if</span> (count > 0) {</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  count--;</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  signBit = <span class="keyword">true</span>;</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  zeroAfterRun = <span class="keyword">true</span>;</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  signBit = <span class="keyword">false</span>;</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  }</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  }</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  }</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  ASSERT(count > 0);</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  ASSERT(signBit);</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  count--;</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  }</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span> </div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  <span class="comment">// copy sign bit</span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a7fd4539d524903d148ceb4de940d3194">SetSign</a>(valPos, signBit); </div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span> </div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <span class="comment">// update significance flag vector</span></div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">m_sigFlagVector</a>[valPos++] = <span class="keyword">true</span>;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  sigPos++; </div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  }</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  }</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span> </div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  <span class="comment">// refinement bit</span></div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">if</span> (valPos < bufferSize) {</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  <span class="comment">// write one refinement bit</span></div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <span class="keywordflow">if</span> (<a class="code" href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a>(refBits, refPos)) {</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <a class="code" href="classCDecoder_1_1CMacroBlock.html#a4bf1b6bc026f95ef4d93fbdfaf69f724">SetBitAtPos</a>(valPos, planeMask);</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  }</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  refPos++;</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  valPos++;</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  }</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  ASSERT(sigPos <= bufferSize);</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  ASSERT(refPos <= bufferSize);</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  ASSERT(valPos == bufferSize);</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span> </div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  <span class="keywordflow">return</span> sigPos;</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span> }</div><div class="ttc" id="BitStream_8h_html_a69b4aa39485781bde435f86fd4851c0e"><div class="ttname"><a href="BitStream_8h.html#a69b4aa39485781bde435f86fd4851c0e">GetBit</a></div><div class="ttdeci">bool GetBit(UINT32 *stream, UINT32 pos)</div><div class="ttdef"><b>Definition:</b> <a href="BitStream_8h_source.html#l00065">BitStream.h:65</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a4bf1b6bc026f95ef4d93fbdfaf69f724"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a4bf1b6bc026f95ef4d93fbdfaf69f724">CDecoder::CMacroBlock::SetBitAtPos</a></div><div class="ttdeci">void SetBitAtPos(UINT32 pos, DataT planeMask)</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00084">Decoder.h:84</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a7fd4539d524903d148ceb4de940d3194"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a7fd4539d524903d148ceb4de940d3194">CDecoder::CMacroBlock::SetSign</a></div><div class="ttdeci">void SetSign(UINT32 pos, bool sign)</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00085">Decoder.h:85</a></div></div> <div class="ttc" id="BitStream_8h_html_ae36276982f7302d827c1345dd6440a8c"><div class="ttname"><a href="BitStream_8h.html#ae36276982f7302d827c1345dd6440a8c">SeekBitRange</a></div><div class="ttdeci">UINT32 SeekBitRange(UINT32 *stream, UINT32 pos, UINT32 len)</div><div class="ttdef"><b>Definition:</b> <a href="BitStream_8h_source.html#l00206">BitStream.h:206</a></div></div> <div class="ttc" id="BitStream_8h_html_a9ce8e37cd9f9d07d4a91094472a0fc5a"><div class="ttname"><a href="BitStream_8h.html#a9ce8e37cd9f9d07d4a91094472a0fc5a">GetValueBlock</a></div><div class="ttdeci">UINT32 GetValueBlock(UINT32 *stream, UINT32 pos, UINT32 k)</div><div class="ttdef"><b>Definition:</b> <a href="BitStream_8h_source.html#l00128">BitStream.h:128</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_af6931769654b397d6c3becae44e868b0"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#af6931769654b397d6c3becae44e868b0">CDecoder::CMacroBlock::m_sigFlagVector</a></div><div class="ttdeci">bool m_sigFlagVector[BufferSize+1]</div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00088">Decoder.h:88</a></div></div> <div class="ttc" id="PGFplatform_8h_html_abeb69f096b599bae58cbc58ba48250a5"><div class="ttname"><a href="PGFplatform_8h.html#abeb69f096b599bae58cbc58ba48250a5">WordWidth</a></div><div class="ttdeci">#define WordWidth</div><div class="ttdoc">WordBytes*8. </div><div class="ttdef"><b>Definition:</b> <a href="PGFplatform_8h_source.html#l00073">PGFplatform.h:73</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_ace0702d7f8281972b1db091248c3c80b"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#ace0702d7f8281972b1db091248c3c80b">CDecoder::CMacroBlock::m_codeBuffer</a></div><div class="ttdeci">UINT32 m_codeBuffer[CodeBufferLen]</div><div class="ttdoc">input buffer for encoded bitstream </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00077">Decoder.h:77</a></div></div> </div><!-- fragment --> </div> </div> <a id="a0425cb162ca41e04f6ae0886a62b3cc9"></a> <h2 class="memtitle"><span class="permalink"><a href="#a0425cb162ca41e04f6ae0886a62b3cc9">◆ </a></span>IsCompletelyRead()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">bool CDecoder::CMacroBlock::IsCompletelyRead </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Returns true if this macro block has been completely read. </p><dl class="section return"><dt>Returns</dt><dd>true if current value position is at block end </dd></dl> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00067">67</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> <div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> { <span class="keywordflow">return</span> <a class="code" href="classCDecoder_1_1CMacroBlock.html#a38f42e9e2d5ac8387db0122aecac79be">m_valuePos</a> >= <a class="code" href="classCDecoder_1_1CMacroBlock.html#a19247bd5e6073252c45abf9d33b44ee0">m_header</a>.<a class="code" href="unionROIBlockHeader.html#a15ceb2e488c3767cc1ab774323c02ded">rbh</a>.<a class="code" href="structROIBlockHeader_1_1RBH.html#af0c3de8c247b06116a9d84d2f9515762">bufferSize</a>; }</div><div class="ttc" id="unionROIBlockHeader_html_a15ceb2e488c3767cc1ab774323c02ded"><div class="ttname"><a href="unionROIBlockHeader.html#a15ceb2e488c3767cc1ab774323c02ded">ROIBlockHeader::rbh</a></div><div class="ttdeci">struct ROIBlockHeader::RBH rbh</div><div class="ttdoc">ROI block header. </div></div> <div class="ttc" id="structROIBlockHeader_1_1RBH_html_af0c3de8c247b06116a9d84d2f9515762"><div class="ttname"><a href="structROIBlockHeader_1_1RBH.html#af0c3de8c247b06116a9d84d2f9515762">ROIBlockHeader::RBH::bufferSize</a></div><div class="ttdeci">UINT16 bufferSize</div><div class="ttdoc">number of uncoded UINT32 values in a block </div><div class="ttdef"><b>Definition:</b> <a href="PGFtypes_8h_source.html#l00167">PGFtypes.h:167</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a38f42e9e2d5ac8387db0122aecac79be"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a38f42e9e2d5ac8387db0122aecac79be">CDecoder::CMacroBlock::m_valuePos</a></div><div class="ttdeci">UINT32 m_valuePos</div><div class="ttdoc">current position in m_value </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00078">Decoder.h:78</a></div></div> <div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a19247bd5e6073252c45abf9d33b44ee0"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a19247bd5e6073252c45abf9d33b44ee0">CDecoder::CMacroBlock::m_header</a></div><div class="ttdeci">ROIBlockHeader m_header</div><div class="ttdoc">block header </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00075">Decoder.h:75</a></div></div> </div><!-- fragment --> </div> </div> <a id="a4bf1b6bc026f95ef4d93fbdfaf69f724"></a> <h2 class="memtitle"><span class="permalink"><a href="#a4bf1b6bc026f95ef4d93fbdfaf69f724">◆ </a></span>SetBitAtPos()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">void CDecoder::CMacroBlock::SetBitAtPos </td> <td>(</td> <td class="paramtype">UINT32 </td> <td class="paramname"><em>pos</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> </td> <td class="paramname"><em>planeMask</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">private</span></span> </td> </tr> </table> </div><div class="memdoc"> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00084">84</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> <div class="fragment"><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> { (<a class="code" href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">m_value</a>[pos] >= 0) ? <a class="code" href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">m_value</a>[pos] |= planeMask : <a class="code" href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">m_value</a>[pos] -= planeMask; }</div><div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a7722de1000647fb5a894db2e2f348bdd"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">CDecoder::CMacroBlock::m_value</a></div><div class="ttdeci">DataT m_value[BufferSize]</div><div class="ttdoc">output buffer of values with index m_valuePos </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00076">Decoder.h:76</a></div></div> </div><!-- fragment --> </div> </div> <a id="a7fd4539d524903d148ceb4de940d3194"></a> <h2 class="memtitle"><span class="permalink"><a href="#a7fd4539d524903d148ceb4de940d3194">◆ </a></span>SetSign()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">void CDecoder::CMacroBlock::SetSign </td> <td>(</td> <td class="paramtype">UINT32 </td> <td class="paramname"><em>pos</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool </td> <td class="paramname"><em>sign</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">private</span></span> </td> </tr> </table> </div><div class="memdoc"> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00085">85</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> <div class="fragment"><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> { <a class="code" href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">m_value</a>[pos] = -<a class="code" href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">m_value</a>[pos]*sign + <a class="code" href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">m_value</a>[pos]*(!sign); }</div><div class="ttc" id="classCDecoder_1_1CMacroBlock_html_a7722de1000647fb5a894db2e2f348bdd"><div class="ttname"><a href="classCDecoder_1_1CMacroBlock.html#a7722de1000647fb5a894db2e2f348bdd">CDecoder::CMacroBlock::m_value</a></div><div class="ttdeci">DataT m_value[BufferSize]</div><div class="ttdoc">output buffer of values with index m_valuePos </div><div class="ttdef"><b>Definition:</b> <a href="Decoder_8h_source.html#l00076">Decoder.h:76</a></div></div> </div><!-- fragment --> </div> </div> <h2 class="groupheader">Member Data Documentation</h2> <a id="ace0702d7f8281972b1db091248c3c80b"></a> <h2 class="memtitle"><span class="permalink"><a href="#ace0702d7f8281972b1db091248c3c80b">◆ </a></span>m_codeBuffer</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">UINT32 CDecoder::CMacroBlock::m_codeBuffer[<a class="el" href="Encoder_8h.html#a05a74e73e6c734fcad194efbca053ed5">CodeBufferLen</a>]</td> </tr> </table> </div><div class="memdoc"> <p>input buffer for encoded bitstream </p> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00077">77</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> </div> </div> <a id="a4a4b0f49967a8fc938295fdcc5093e66"></a> <h2 class="memtitle"><span class="permalink"><a href="#a4a4b0f49967a8fc938295fdcc5093e66">◆ </a></span>m_decoder</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname"><a class="el" href="classCDecoder.html">CDecoder</a>* CDecoder::CMacroBlock::m_decoder</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">private</span></span> </td> </tr> </table> </div><div class="memdoc"> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00087">87</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> </div> </div> <a id="a19247bd5e6073252c45abf9d33b44ee0"></a> <h2 class="memtitle"><span class="permalink"><a href="#a19247bd5e6073252c45abf9d33b44ee0">◆ </a></span>m_header</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="unionROIBlockHeader.html">ROIBlockHeader</a> CDecoder::CMacroBlock::m_header</td> </tr> </table> </div><div class="memdoc"> <p>block header </p> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00075">75</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> </div> </div> <a id="af6931769654b397d6c3becae44e868b0"></a> <h2 class="memtitle"><span class="permalink"><a href="#af6931769654b397d6c3becae44e868b0">◆ </a></span>m_sigFlagVector</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">bool CDecoder::CMacroBlock::m_sigFlagVector[<a class="el" href="PGFtypes_8h.html#aa362edf6db9662acf6ef958a6db19c35">BufferSize</a>+1]</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">private</span></span> </td> </tr> </table> </div><div class="memdoc"> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00088">88</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> </div> </div> <a id="a7722de1000647fb5a894db2e2f348bdd"></a> <h2 class="memtitle"><span class="permalink"><a href="#a7722de1000647fb5a894db2e2f348bdd">◆ </a></span>m_value</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="PGFtypes_8h.html#acb1ee3f52ccfad782dcaa0abd79e5d05">DataT</a> CDecoder::CMacroBlock::m_value[<a class="el" href="PGFtypes_8h.html#aa362edf6db9662acf6ef958a6db19c35">BufferSize</a>]</td> </tr> </table> </div><div class="memdoc"> <p>output buffer of values with index m_valuePos </p> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00076">76</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> </div> </div> <a id="a38f42e9e2d5ac8387db0122aecac79be"></a> <h2 class="memtitle"><span class="permalink"><a href="#a38f42e9e2d5ac8387db0122aecac79be">◆ </a></span>m_valuePos</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">UINT32 CDecoder::CMacroBlock::m_valuePos</td> </tr> </table> </div><div class="memdoc"> <p>current position in m_value </p> <p class="definition">Definition at line <a class="el" href="Decoder_8h_source.html#l00078">78</a> of file <a class="el" href="Decoder_8h_source.html">Decoder.h</a>.</p> </div> </div> <hr/>The documentation for this class was generated from the following files:<ul> <li><a class="el" href="Decoder_8h_source.html">Decoder.h</a></li> <li><a class="el" href="Decoder_8cpp_source.html">Decoder.cpp</a></li> </ul> </div><!-- contents --> </div><!-- doc-content --> <!-- start footer part --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> <li class="navelem"><a class="el" href="classCDecoder.html">CDecoder</a></li><li class="navelem"><a class="el" href="classCDecoder_1_1CMacroBlock.html">CMacroBlock</a></li> <li class="footer">Generated on Mon Dec 31 2018 19:09:18 for libpgf by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li> </ul> </div> </body> </html>