⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g726_8cpp-source.html

📁 这个是关于G.726算法的源程序
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00701"></a>00701     <span class="keywordflow">else</span><a name="l00702"></a>00702         UGA2 = 0;<a name="l00703"></a>00703     A2T = (<a class="code" href="group__integers.html#ga4">int16</a>)(A2+UGA2-(A2&gt;&gt;7));<a name="l00704"></a>00704         <a name="l00705"></a>00705     <a class="code" href="group__g726__section4m.html#ga2">CHECK_TC</a>(A2T,16);<a name="l00706"></a>00706     }<a name="l00707"></a>00707 <a name="l00708"></a>00708 <a name="l00712"></a><a class="code" href="group__g726__section4.html#ga31">00712</a> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__g726__section4.html#ga31">UPB</a>(<a class="code" href="group__integers.html#ga6">uint</a> RATE,<span class="keywordtype">int</span> Un,<span class="keywordtype">int</span> Bn,<a class="code" href="group__integers.html#ga6">uint</a> DQ,<span class="keywordtype">int</span>&amp; BnP)<a name="l00713"></a>00713     {<a name="l00714"></a>00714     <a class="code" href="group__g726__section4m.html#ga2">CHECK_TC</a>(Un,1);<a name="l00715"></a>00715     <a class="code" href="group__g726__section4m.html#ga2">CHECK_TC</a>(Bn,16);<a name="l00716"></a>00716     <a class="code" href="group__g726__section4m.html#ga0">CHECK_SM</a>(DQ,16);<a name="l00717"></a>00717     <span class="keywordtype">int</span> UGBn;<a name="l00718"></a>00718     <span class="keywordflow">if</span>(DQ&amp;32767)<a name="l00719"></a>00719         UGBn = Un ? -128 : 128;<a name="l00720"></a>00720     <span class="keywordflow">else</span><a name="l00721"></a>00721         UGBn = 0;<a name="l00722"></a>00722     <span class="keywordtype">int</span> ULBn = (RATE==5) ? Bn&gt;&gt;9 : Bn&gt;&gt;8;<a name="l00723"></a>00723     BnP = (<a class="code" href="group__integers.html#ga4">int16</a>)(Bn+UGBn-ULBn);<a name="l00724"></a>00724     <a class="code" href="group__g726__section4m.html#ga2">CHECK_TC</a>(BnP,16);<a name="l00725"></a>00725     }<a name="l00726"></a>00726 <a name="l00727"></a>00727 <a name="l00731"></a><a class="code" href="group__g726__section4.html#ga32">00731</a> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__g726__section4.html#ga32">XOR</a>(<a class="code" href="group__integers.html#ga6">uint</a> DQn,<a class="code" href="group__integers.html#ga6">uint</a> DQ,<span class="keywordtype">int</span>&amp; Un)<a name="l00732"></a>00732     {<a name="l00733"></a>00733     <a class="code" href="group__g726__section4m.html#ga3">CHECK_FL</a>(DQn,11);<a name="l00734"></a>00734     <a class="code" href="group__g726__section4m.html#ga0">CHECK_SM</a>(DQ,16);<a name="l00735"></a>00735     Un = -(int)((DQn&gt;&gt;10)^(DQ&gt;&gt;15));<a name="l00736"></a>00736     <a class="code" href="group__g726__section4m.html#ga2">CHECK_TC</a>(Un,1);<a name="l00737"></a>00737     }<a name="l00738"></a>00738 <a name="l00739"></a>00739 <a name="l00743"></a><a class="code" href="group__g726__section4.html#ga33">00743</a> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__g726__section4.html#ga33">TONE</a>(<span class="keywordtype">int</span> A2P,<a class="code" href="group__integers.html#ga6">uint</a>&amp; TDP)<a name="l00744"></a>00744     {<a name="l00745"></a>00745     <a class="code" href="group__g726__section4m.html#ga2">CHECK_TC</a>(A2P,16);<a name="l00746"></a>00746     TDP = A2P&lt;(53760-65536);<a name="l00747"></a>00747     <a class="code" href="group__g726__section4m.html#ga4">CHECK_UNSIGNED</a>(TDP,1);<a name="l00748"></a>00748     }<a name="l00749"></a>00749 <a name="l00750"></a>00750 <a name="l00754"></a><a class="code" href="group__g726__section4.html#ga34">00754</a> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__g726__section4.html#ga34">TRANS</a>(<a class="code" href="group__integers.html#ga6">uint</a> TD,<a class="code" href="group__integers.html#ga6">uint</a> YL,<a class="code" href="group__integers.html#ga6">uint</a> DQ,<a class="code" href="group__integers.html#ga6">uint</a>&amp; TR)<a name="l00755"></a>00755     {<a name="l00756"></a>00756     <a class="code" href="group__g726__section4m.html#ga4">CHECK_UNSIGNED</a>(TD,1);<a name="l00757"></a>00757     <a class="code" href="group__g726__section4m.html#ga1">CHECK_UM</a>(YL,19);<a name="l00758"></a>00758     <a class="code" href="group__g726__section4m.html#ga0">CHECK_SM</a>(DQ,16);<a name="l00759"></a>00759     <a class="code" href="group__integers.html#ga6">uint</a> DQMAG = DQ&amp;32767;<a name="l00760"></a>00760     <a class="code" href="group__integers.html#ga6">uint</a> YLINT = YL&gt;&gt;15;<a name="l00761"></a>00761     <a class="code" href="group__integers.html#ga6">uint</a> YLFRAC = (YL&gt;&gt;10) &amp; 31;<a name="l00762"></a>00762     <a class="code" href="group__integers.html#ga6">uint</a> THR1 = (32+YLFRAC)&lt;&lt;YLINT;<a name="l00763"></a>00763     <a class="code" href="group__integers.html#ga6">uint</a> THR2;<a name="l00764"></a>00764     <span class="keywordflow">if</span>(YLINT&gt;9)<a name="l00765"></a>00765         THR2 = 31&lt;&lt;10;<a name="l00766"></a>00766     <span class="keywordflow">else</span><a name="l00767"></a>00767         THR2 = THR1;<a name="l00768"></a>00768     <a class="code" href="group__integers.html#ga6">uint</a> DQTHR = (THR2+(THR2&gt;&gt;1)) &gt;&gt; 1;<a name="l00769"></a>00769     TR = DQMAG&gt;DQTHR &amp;&amp; TD;<a name="l00770"></a>00770     <a class="code" href="group__g726__section4m.html#ga4">CHECK_UNSIGNED</a>(TR,1);<a name="l00771"></a>00771     }<a name="l00772"></a>00772 <a name="l00773"></a>00773 <a name="l00777"></a><a class="code" href="group__g726__section4.html#ga35">00777</a> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__g726__section4.html#ga35">COMPRESS</a>(<span class="keywordtype">int</span> SR,<a class="code" href="group__integers.html#ga6">uint</a> LAW,<a class="code" href="group__integers.html#ga6">uint</a>&amp; SP)<a name="l00778"></a>00778     {<a name="l00779"></a>00779     <a class="code" href="group__g726__section4m.html#ga2">CHECK_TC</a>(SR,16);<a name="l00780"></a>00780     <a class="code" href="group__g726__section4m.html#ga4">CHECK_UNSIGNED</a>(LAW,1);<a name="l00781"></a>00781     <span class="keywordtype">int</span> x = SR;<a name="l00782"></a>00782 <a name="l00783"></a>00783 <span class="preprocessor">#ifdef IMPLEMENT_G191_BUGS</span><a name="l00784"></a>00784 <span class="preprocessor"></span>    <span class="comment">// reproduce bugs in G191 reference implementation...</span><a name="l00785"></a>00785     <span class="keywordflow">if</span>(x==-0x8000)<a name="l00786"></a>00786         x=-1; <a name="l00787"></a>00787     <span class="keywordflow">else</span><a name="l00788"></a>00788         <span class="keywordflow">if</span>(!LAW &amp;&amp; x&lt;0) x--;<a name="l00789"></a>00789 <span class="preprocessor">#endif</span><a name="l00790"></a>00790 <span class="preprocessor"></span><a name="l00791"></a>00791     <span class="comment">// Clamp to 14 bits...</span><a name="l00792"></a>00792     <span class="keywordflow">if</span>(x&gt;=(1&lt;&lt;13))<a name="l00793"></a>00793         x = (1&lt;&lt;13)-1;<a name="l00794"></a>00794     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(x&lt;-(1&lt;&lt;13))<a name="l00795"></a>00795         x = -(1&lt;&lt;13);<a name="l00796"></a>00796 <a name="l00797"></a>00797     <span class="keywordflow">if</span>(LAW)<a name="l00798"></a>00798         SP = <a class="code" href="classG711.html#e0">G711::ALawEncode</a>(x&lt;&lt;2);<a name="l00799"></a>00799     <span class="keywordflow">else</span><a name="l00800"></a>00800         SP = <a class="code" href="classG711.html#e2">G711::ULawEncode</a>(x&lt;&lt;2);<a name="l00801"></a>00801 <a name="l00802"></a>00802     <a class="code" href="group__g726__section4m.html#ga4">CHECK_UNSIGNED</a>(SP,8);<a name="l00803"></a>00803     }<a name="l00804"></a>00804 <a name="l00805"></a>00805 <a name="l00809"></a><a class="code" href="group__g726__section4.html#ga36">00809</a> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__g726__section4.html#ga36">SYNC</a>(<a class="code" href="group__integers.html#ga6">uint</a> RATE,<a class="code" href="group__integers.html#ga6">uint</a> I,<a class="code" href="group__integers.html#ga6">uint</a> SP,<span class="keywordtype">int</span> DLNX,<span class="keywordtype">int</span> DSX,<a class="code" href="group__integers.html#ga6">uint</a> LAW,<a class="code" href="group__integers.html#ga6">uint</a>&amp; SD)<a name="l00810"></a>00810     {<a name="l00811"></a>00811     <a class="code" href="group__g726__section4m.html#ga4">CHECK_UNSIGNED</a>(SP,8);<a name="l00812"></a>00812     <a class="code" href="group__g726__section4m.html#ga2">CHECK_TC</a>(DLNX,12);<a name="l00813"></a>00813     <a class="code" href="group__g726__section4m.html#ga2">CHECK_TC</a>(DSX,1);<a name="l00814"></a>00814     <a class="code" href="group__g726__section4m.html#ga4">CHECK_UNSIGNED</a>(LAW,1);<a name="l00815"></a>00815 <a name="l00816"></a>00816     <a class="code" href="group__integers.html#ga6">uint</a> ID;<a name="l00817"></a>00817     <a class="code" href="group__integers.html#ga6">uint</a> IM;<a name="l00818"></a>00818     <a class="code" href="group__g726__section4.html#ga2">QUAN</a>(RATE,DLNX,DSX,ID);<a name="l00819"></a>00819     <a class="code" href="group__integers.html#ga6">uint</a> signMask = 1&lt;&lt;(RATE-1);<a name="l00820"></a>00820     ID = ID^signMask;<a name="l00821"></a>00821     IM = I^signMask;<a name="l00822"></a>00822 <a name="l00823"></a>00823     <a class="code" href="group__integers.html#ga6">uint</a> s;<a name="l00824"></a>00824     <span class="keywordflow">if</span>(LAW)<a name="l00825"></a>00825         {<a name="l00826"></a>00826         s = SP^0x55;<a name="l00827"></a>00827         <span class="keywordflow">if</span>(!(s&amp;0x80))<a name="l00828"></a>00828             s = s^0x7f;<a name="l00829"></a>00829         }<a name="l00830"></a>00830     <span class="keywordflow">else</span><a name="l00831"></a>00831         {<a name="l00832"></a>00832         s = SP;<a name="l00833"></a>00833         <span class="keywordflow">if</span>(s&amp;0x80)<a name="l00834"></a>00834             s = s^0x7f;<a name="l00835"></a>00835         }<a name="l00836"></a>00836     <span class="comment">// s = ALAW/uLAW code converted to range 0x00..0xff</span><a name="l00837"></a>00837     <span class="comment">// where 0x00 is most-negative and 0xff is most-positive</span><a name="l00838"></a>00838 <a name="l00839"></a>00839     <span class="keywordflow">if</span>(ID&lt;IM)<a name="l00840"></a>00840         {<a name="l00841"></a>00841         <span class="keywordflow">if</span>(s&lt;0xff)<a name="l00842"></a>00842             ++s;<a name="l00843"></a>00843         }<a name="l00844"></a>00844     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ID&gt;IM)<a name="l00845"></a>00845         {<a name="l00846"></a>00846         <span class="keywordflow">if</span>(s&gt;0x00)<a name="l00847"></a>00847             {<a name="l00848"></a>00848             --s;<a name="l00849"></a>00849             <span class="keywordflow">if</span>(s==0x7f &amp;&amp; !LAW) --s; <span class="comment">// TABLE 20/G.726 says uLaw 0xFF decrements to 0x7e and not 0x7f (!?)</span><a name="l00850"></a>00850             }<a name="l00851"></a>00851         }<a

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -