📄 g726_8cpp-source.html
字号:
<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>>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>& 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&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>>9 : Bn>>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>& 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>>10)^(DQ>>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>& 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<(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>& 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&32767;<a name="l00760"></a>00760 <a class="code" href="group__integers.html#ga6">uint</a> YLINT = YL>>15;<a name="l00761"></a>00761 <a class="code" href="group__integers.html#ga6">uint</a> YLFRAC = (YL>>10) & 31;<a name="l00762"></a>00762 <a class="code" href="group__integers.html#ga6">uint</a> THR1 = (32+YLFRAC)<<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>9)<a name="l00765"></a>00765 THR2 = 31<<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>>1)) >> 1;<a name="l00769"></a>00769 TR = DQMAG>DQTHR && 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>& 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 && x<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>=(1<<13))<a name="l00793"></a>00793 x = (1<<13)-1;<a name="l00794"></a>00794 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(x<-(1<<13))<a name="l00795"></a>00795 x = -(1<<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<<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<<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>& 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<<(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&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&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<IM)<a name="l00840"></a>00840 {<a name="l00841"></a>00841 <span class="keywordflow">if</span>(s<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>IM)<a name="l00845"></a>00845 {<a name="l00846"></a>00846 <span class="keywordflow">if</span>(s>0x00)<a name="l00847"></a>00847 {<a name="l00848"></a>00848 --s;<a name="l00849"></a>00849 <span class="keywordflow">if</span>(s==0x7f && !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 + -