sbtl3.c
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:9k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #include "statname.h"
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif
  39. void fdct32(float *, float *);
  40. void fdct32_dual(float *, float *);
  41. void fdct32_dual_mono(float *, float *);
  42. void fdct16(float *, float *);
  43. void fdct16_dual(float *, float *);
  44. void fdct16_dual_mono(float *, float *);
  45. void fdct8(float *, float *);
  46. void fdct8_dual(float *, float *);
  47. void fdct8_dual_mono(float *, float *);
  48. void window(float *vbuf, int vb_ptr, unsigned char *pcm);
  49. void window_dual(float *vbuf, int vb_ptr, unsigned char *pcm);
  50. void window16(float *vbuf, int vb_ptr, unsigned char *pcm);
  51. void window16_dual(float *vbuf, int vb_ptr, unsigned char *pcm);
  52. void window8(float *vbuf, int vb_ptr, unsigned char *pcm);
  53. void window8_dual(float *vbuf, int vb_ptr, unsigned char *pcm);
  54. void windowB(float *vbuf, int vb_ptr, unsigned char *pcm);
  55. void windowB_dual(float *vbuf, int vb_ptr, unsigned char *pcm);
  56. void windowB16(float *vbuf, int vb_ptr, unsigned char *pcm);
  57. void windowB16_dual(float *vbuf, int vb_ptr, unsigned char *pcm);
  58. void windowB8(float *vbuf, int vb_ptr, unsigned char *pcm);
  59. void windowB8_dual(float *vbuf, int vb_ptr, unsigned char *pcm);
  60. void sbt_mono_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[]);
  61. void sbt_dual_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[]);
  62. #ifdef __cplusplus
  63. }
  64. #endif
  65. /*============================================================*/
  66. /*============ Layer III =====================================*/
  67. /*============================================================*/
  68. /*------------------------------------------------------------*/
  69. /*------- short (usually 16 bit) bit output ------------------*/
  70. /*------------------------------------------------------------*/
  71. void sbt_mono_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  72. {
  73. int i;
  74. int vb_ptr;
  75. vb_ptr = vb_ptr_arg[0];
  76. for(i=0;i<18;i++) {
  77.   fdct32(sample, vbuf[0]+vb_ptr);
  78.   window(vbuf[0], vb_ptr, pcm);
  79.   sample += 32;
  80.   vb_ptr = (vb_ptr-32) & 511;
  81.   pcm += 32*sizeof(short);
  82. }
  83. vb_ptr_arg[0] = vb_ptr;
  84. }
  85. /*------------------------------------------------------------*/
  86. void sbt_dual_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  87. {
  88. int i;
  89. int vb_ptr;
  90. pcm += ch*sizeof(short);
  91. vb_ptr = vb_ptr_arg[ch];
  92. for(i=0;i<18;i++) {
  93.   fdct32(sample, vbuf[ch]+vb_ptr);
  94.   window_dual(vbuf[ch], vb_ptr, pcm);
  95.   sample += 32;
  96.   vb_ptr = (vb_ptr-32) & 511;
  97.   pcm += 64*sizeof(short);
  98. }
  99. vb_ptr_arg[ch] = vb_ptr;
  100. }
  101. #ifdef REDUCTION
  102. /*------------------------------------------------------------*/
  103. /*------------------------------------------------------------*/
  104. /*---------------- 16 pt sbt's  -------------------------------*/
  105. /*------------------------------------------------------------*/
  106. void sbt16_mono_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  107. {
  108. int i;
  109. int vb_ptr;
  110. vb_ptr = vb_ptr_arg[0];
  111. for(i=0;i<18;i++) {
  112.   fdct16(sample, vbuf[0]+vb_ptr);
  113.   window16(vbuf[0], vb_ptr, pcm);
  114.   sample += 32;
  115.   vb_ptr = (vb_ptr-16) & 255;
  116.   pcm += 16*sizeof(short);
  117. }
  118. vb_ptr_arg[0] = vb_ptr;
  119. }
  120. /*------------------------------------------------------------*/
  121. void sbt16_dual_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  122. {
  123. int i;
  124. int vb_ptr;
  125. pcm += ch*sizeof(short);
  126. vb_ptr = vb_ptr_arg[ch];
  127. for(i=0;i<18;i++) {
  128.   fdct16(sample, vbuf[ch]+vb_ptr);
  129.   window16_dual(vbuf[ch], vb_ptr, pcm);
  130.   sample += 32;
  131.   vb_ptr = (vb_ptr-16) & 255;
  132.   pcm += 32*sizeof(short);
  133. }
  134. vb_ptr_arg[ch] = vb_ptr;
  135. }
  136. /*------------------------------------------------------------*/
  137. /*---------------- 8 pt sbt's  -------------------------------*/
  138. /*------------------------------------------------------------*/
  139. void sbt8_mono_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  140. {
  141. int i;
  142. int vb_ptr;
  143. vb_ptr = vb_ptr_arg[0];
  144. for(i=0;i<18;i++) {
  145.   fdct8(sample, vbuf[0]+vb_ptr);
  146.   window8(vbuf[0], vb_ptr, pcm);
  147.   sample += 32;
  148.   vb_ptr = (vb_ptr-8) & 127;
  149.   pcm += 8*sizeof(short);
  150. }
  151. vb_ptr_arg[0] = vb_ptr;
  152. }
  153. /*------------------------------------------------------------*/
  154. void sbt8_dual_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  155. {
  156. int i;
  157. int vb_ptr;
  158. pcm += ch*sizeof(short);
  159. vb_ptr = vb_ptr_arg[ch];
  160. for(i=0;i<18;i++) {
  161.   fdct8(sample, vbuf[ch]+vb_ptr);
  162.   window8_dual(vbuf[ch], vb_ptr, pcm);
  163.   sample += 32;
  164.   vb_ptr = (vb_ptr-8) & 127;
  165.   pcm += 16*sizeof(short);
  166. }
  167. vb_ptr_arg[ch] = vb_ptr;
  168. }
  169. #endif      // end reduction
  170. /*===========================================================*/
  171. /*===========================================================*/
  172. #ifdef EIGHT_BIT
  173. /*------------------------------------------------------------*/
  174. /*------- 8 bit output ---------------------------------------*/
  175. /*------------------------------------------------------------*/
  176. void sbtB_mono_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  177. {
  178. int i;
  179. int vb_ptr;
  180. vb_ptr = vb_ptr_arg[0];
  181. for(i=0;i<18;i++) {
  182.   fdct32(sample, vbuf[0]+vb_ptr);
  183.   windowB(vbuf[0], vb_ptr, pcm);
  184.   sample += 32;
  185.   vb_ptr = (vb_ptr-32) & 511;
  186.   pcm += 32;
  187. }
  188. vb_ptr_arg[0] = vb_ptr;
  189. }
  190. /*------------------------------------------------------------*/
  191. void sbtB_dual_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  192. {
  193. int i;
  194. int vb_ptr;
  195. pcm += ch;
  196. vb_ptr = vb_ptr_arg[ch];
  197. for(i=0;i<18;i++) {
  198.   fdct32(sample, vbuf[ch]+vb_ptr);
  199.   windowB_dual(vbuf[ch], vb_ptr, pcm);
  200.   sample += 32;
  201.   vb_ptr = (vb_ptr-32) & 511;
  202.   pcm += 64;
  203. }
  204. vb_ptr_arg[ch] = vb_ptr;
  205. }
  206. #ifdef EIGHT_BIT
  207. /*------------------------------------------------------------*/
  208. /*------------------------------------------------------------*/
  209. /*---------------- 16 pt sbtB's  -------------------------------*/
  210. /*------------------------------------------------------------*/
  211. void sbtB16_mono_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  212. {
  213. int i;
  214. int vb_ptr;
  215. vb_ptr = vb_ptr_arg[0];
  216. for(i=0;i<18;i++) {
  217.   fdct16(sample, vbuf[0]+vb_ptr);
  218.   windowB16(vbuf[0], vb_ptr, pcm);
  219.   sample += 32;
  220.   vb_ptr = (vb_ptr-16) & 255;
  221.   pcm += 16;
  222. }
  223. vb_ptr_arg[0] = vb_ptr;
  224. }
  225. /*------------------------------------------------------------*/
  226. void sbtB16_dual_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  227. {
  228. int i;
  229. int vb_ptr;
  230. pcm += ch;
  231. vb_ptr = vb_ptr_arg[ch];
  232. for(i=0;i<18;i++) {
  233.   fdct16(sample, vbuf[ch]+vb_ptr);
  234.   windowB16_dual(vbuf[ch], vb_ptr, pcm);
  235.   sample += 32;
  236.   vb_ptr = (vb_ptr-16) & 255;
  237.   pcm += 32;
  238. }
  239. vb_ptr_arg[ch] = vb_ptr;
  240. }
  241. /*------------------------------------------------------------*/
  242. /*---------------- 8 pt sbtB's  -------------------------------*/
  243. /*------------------------------------------------------------*/
  244. void sbtB8_mono_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  245. {
  246. int i;
  247. int vb_ptr;
  248. vb_ptr = vb_ptr_arg[0];
  249. for(i=0;i<18;i++) {
  250.   fdct8(sample, vbuf[0]+vb_ptr);
  251.   windowB8(vbuf[0], vb_ptr, pcm);
  252.   sample += 32;
  253.   vb_ptr = (vb_ptr-8) & 127;
  254.   pcm += 8;
  255. }
  256. vb_ptr_arg[0] = vb_ptr;
  257. }
  258. /*------------------------------------------------------------*/
  259. void sbtB8_dual_L3(float *sample, unsigned char *pcm, int ch, float vbuf[][512], int vb_ptr_arg[])
  260. {
  261. int i;
  262. int vb_ptr;
  263. pcm += ch;
  264. vb_ptr = vb_ptr_arg[ch];
  265. for(i=0;i<18;i++) {
  266.   fdct8(sample, vbuf[ch]+vb_ptr);
  267.   windowB8_dual(vbuf[ch], vb_ptr, pcm);
  268.   sample += 32;
  269.   vb_ptr = (vb_ptr-8) & 127;
  270.   pcm += 16;
  271. }
  272. vb_ptr_arg[ch] = vb_ptr;
  273. }
  274. /*------------------------------------------------------------*/
  275. #endif      // end reduction
  276. #endif      // end 8 BIT