📄 ima__adpcm_8cpp-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>audio/IMA_ADPCM.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.4.4 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div><div class="nav"><a class="el" href="dir_000000.html">audio</a></div><h1>IMA_ADPCM.cpp</h1><a href="IMA__ADPCM_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="common_8h.html">common.h</a>"</span><a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="IMA__ADPCM_8h.html">IMA_ADPCM.h</a>"</span><a name="l00027"></a>00027 <a name="l00028"></a>00028 <a name="l00029"></a><a class="code" href="IMA__ADPCM_8cpp.html#a0">00029</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__integers.html#ga1">uint16</a> <a class="code" href="IMA__ADPCM_8cpp.html#a0">IMA_ADPCMStepTable</a>[89] =<a name="l00030"></a>00030 {<a name="l00031"></a>00031 7, 8, 9, 10, 11, 12, 13, 14,<a name="l00032"></a>00032 16, 17, 19, 21, 23, 25, 28, 31,<a name="l00033"></a>00033 34, 37, 41, 45, 50, 55, 60, 66,<a name="l00034"></a>00034 73, 80, 88, 97, 107, 118, 130, 143,<a name="l00035"></a>00035 157, 173, 190, 209, 230, 253, 279, 307,<a name="l00036"></a>00036 337, 371, 408, 449, 494, 544, 598, 658,<a name="l00037"></a>00037 724, 796, 876, 963, 1060, 1166, 1282, 1411,<a name="l00038"></a>00038 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024,<a name="l00039"></a>00039 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484,<a name="l00040"></a>00040 7132, 7845, 8630, 9493,10442,11487,12635,13899,<a name="l00041"></a>00041 15289,16818,18500,20350,22385,24623,27086,29794,<a name="l00042"></a>00042 32767<a name="l00043"></a>00043 };<a name="l00044"></a>00044 <a name="l00045"></a>00045 <a name="l00046"></a><a class="code" href="IMA__ADPCM_8cpp.html#a1">00046</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="IMA__ADPCM_8cpp.html#a1">IMA_ADPCMIndexTable</a>[8] =<a name="l00047"></a>00047 {<a name="l00048"></a>00048 -1, -1, -1, -1, 2, 4, 6, 8,<a name="l00049"></a>00049 };<a name="l00050"></a>00050 <a name="l00051"></a>00051 <a name="l00052"></a><a class="code" href="classIMA__ADPCM.html#a0">00052</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <span class="keywordtype">void</span> <a class="code" href="classIMA__ADPCM.html#a0">IMA_ADPCM::EncodeInit</a>(<a class="code" href="group__integers.html#ga4">int16</a> sample1,<a class="code" href="group__integers.html#ga4">int16</a> sample2)<a name="l00053"></a>00053 {<a name="l00054"></a>00054 <a class="code" href="classIMA__ADPCM.html#o0">PredictedValue</a> = sample1;<a name="l00055"></a>00055 <span class="keywordtype">int</span> delta = sample2-sample1;<a name="l00056"></a>00056 <span class="keywordflow">if</span>(delta<0)<a name="l00057"></a>00057 delta = - delta;<a name="l00058"></a>00058 <span class="keywordflow">if</span>(delta>32767)<a name="l00059"></a>00059 delta = 32767;<a name="l00060"></a>00060 <span class="keywordtype">int</span> stepIndex = 0;<a name="l00061"></a>00061 <span class="keywordflow">while</span>(<a class="code" href="IMA__ADPCM_8cpp.html#a0">IMA_ADPCMStepTable</a>[stepIndex]<(<a class="code" href="group__integers.html#ga6">uint</a>)delta)<a name="l00062"></a>00062 stepIndex++;<a name="l00063"></a>00063 <a class="code" href="classIMA__ADPCM.html#o1">StepIndex</a> = stepIndex;<a name="l00064"></a>00064 }<a name="l00065"></a>00065 <a name="l00066"></a>00066 <a name="l00067"></a><a class="code" href="classIMA__ADPCM.html#a1">00067</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="group__integers.html#ga6">uint</a> <a class="code" href="classIMA__ADPCM.html#a1">IMA_ADPCM::Encode</a>(<a class="code" href="group__integers.html#ga4">int16</a> pcm16)<a name="l00068"></a>00068 {<a name="l00069"></a>00069 <span class="keywordtype">int</span> predicedValue = <a class="code" href="classIMA__ADPCM.html#o0">PredictedValue</a>;<a name="l00070"></a>00070 <span class="keywordtype">int</span> stepIndex = <a class="code" href="classIMA__ADPCM.html#o1">StepIndex</a>;<a name="l00071"></a>00071 <a name="l00072"></a>00072 <span class="keywordtype">int</span> delta = pcm16-predicedValue;<a name="l00073"></a>00073 <a class="code" href="group__integers.html#ga6">uint</a> value;<a name="l00074"></a>00074 <span class="keywordflow">if</span>(delta>=0)<a name="l00075"></a>00075 value = 0;<a name="l00076"></a>00076 <span class="keywordflow">else</span><a name="l00077"></a>00077 {<a name="l00078"></a>00078 value = 8;<a name="l00079"></a>00079 delta = -delta;<a name="l00080"></a>00080 }<a name="l00081"></a>00081 <a name="l00082"></a>00082 <span class="keywordtype">int</span> step = <a class="code" href="IMA__ADPCM_8cpp.html#a0">IMA_ADPCMStepTable</a>[stepIndex];<a name="l00083"></a>00083 <span class="keywordtype">int</span> diff = step>>3;<a name="l00084"></a>00084 <span class="keywordflow">if</span>(delta>step)<a name="l00085"></a>00085 {<a name="l00086"></a>00086 value |= 4;<a name="l00087"></a>00087 delta -= step;<a name="l00088"></a>00088 diff += step;<a name="l00089"></a>00089 }<a name="l00090"></a>00090 step >>= 1;<a name="l00091"></a>00091 <span class="keywordflow">if</span>(delta>step)<a name="l00092"></a>00092 {<a name="l00093"></a>00093 value |= 2;<a name="l00094"></a>00094 delta -= step;<a name="l00095"></a>00095 diff += step;<a name="l00096"></a>00096 }<a name="l00097"></a>00097 step >>= 1;<a name="l00098"></a>00098 <span class="keywordflow">if</span>(delta>step)<a name="l00099"></a>00099 {<a name="l00100"></a>00100 value |= 1;<a name="l00101"></a>00101 diff += step;<a name="l00102"></a>00102 }<a name="l00103"></a>00103 <a name="l00104"></a>00104 <span class="keywordflow">if</span>(value&8)<a name="l00105"></a>00105 predicedValue -= diff;<a name="l00106"></a>00106 <span class="keywordflow">else</span><a name="l00107"></a>00107 predicedValue += diff;<a name="l00108"></a>00108 <span class="keywordflow">if</span>(predicedValue<-0x8000)<a name="l00109"></a>00109 predicedValue = -0x8000;<a name="l00110"></a>00110 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(predicedValue>0x7fff)<a name="l00111"></a>00111 predicedValue = 0x7fff;<a name="l00112"></a>00112 <a class="code" href="classIMA__ADPCM.html#o0">PredictedValue</a> = predicedValue;<a name="l00113"></a>00113 <a name="l00114"></a>00114 stepIndex += <a class="code" href="IMA__ADPCM_8cpp.html#a1">IMA_ADPCMIndexTable</a>[value&7];<a name="l00115"></a>00115 <span class="keywordflow">if</span>(stepIndex<0)<a name="l00116"></a>00116 stepIndex = 0;<a name="l00117"></a>00117 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(stepIndex>88)<a name="l00118"></a>00118 stepIndex = 88;<a name="l00119"></a>00119 <a class="code" href="classIMA__ADPCM.html#o1">StepIndex</a> = stepIndex;<a name="l00120"></a>00120 <a name="l00121"></a>00121 <span class="keywordflow">return</span> value;<a name="l00122"></a>00122 }<a name="l00123"></a>00123 <a name="l00124"></a>00124
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -