sbt.c
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:10k
源码类别:

Symbian

开发平台:

C/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. //#define REDUCTION
  36. //#define EIGHT_BIT
  37. #include "statname.h"
  38. void fdct32(float *, float *);
  39. void fdct32_dual(float *, float *);
  40. void fdct32_dual_mono(float *, float *);
  41. void fdct16(float *, float *);
  42. void fdct16_dual(float *, float *);
  43. void fdct16_dual_mono(float *, float *);
  44. void fdct8(float *, float *);
  45. void fdct8_dual(float *, float *);
  46. void fdct8_dual_mono(float *, float *);
  47. void window(float *vbuf, int vb_ptr, unsigned char *pcm);
  48. void window_dual(float *vbuf, int vb_ptr, unsigned char *pcm);
  49. void window16(float *vbuf, int vb_ptr, unsigned char *pcm);
  50. void window16_dual(float *vbuf, int vb_ptr, unsigned char *pcm);
  51. void window8(float *vbuf, int vb_ptr, unsigned char *pcm);
  52. void window8_dual(float *vbuf, int vb_ptr, unsigned char *pcm);
  53. /*============================================================*/
  54. /*============== Layer I/II ==================================*/
  55. /*============================================================*/
  56. void sbt_mono(float *sample, unsigned char *pcm, 
  57.               int n, float vbuf[][512], int vb_ptr_arg[])
  58. {
  59. int i, vb_ptr;
  60. vb_ptr = vb_ptr_arg[0];
  61. for(i=0;i<n;i++) {
  62.   fdct32(sample, vbuf[0]+vb_ptr);
  63.   window(vbuf[0], vb_ptr, pcm);
  64.   sample += 64;
  65.   vb_ptr = (vb_ptr-32) & 511;
  66.   pcm += 32*sizeof(short);
  67. }
  68. vb_ptr_arg[0] = vb_ptr;
  69. }
  70. /*------------------------------------------------------------*/
  71. void sbt_dual(float *sample, unsigned char *pcm, 
  72.               int n, float vbuf[][512], int vb_ptr_arg[])
  73. {
  74. int i, vb_ptr;
  75. vb_ptr = vb_ptr_arg[0];
  76. for(i=0;i<n;i++) {
  77.   fdct32_dual(sample, vbuf[0]+vb_ptr);
  78.   fdct32_dual(sample+1, vbuf[1]+vb_ptr);
  79.   window_dual(vbuf[0], vb_ptr, pcm);
  80.   window_dual(vbuf[1], vb_ptr, pcm+sizeof(short));
  81.   sample += 64;
  82.   vb_ptr = (vb_ptr-32) & 511;
  83.   pcm += 64*sizeof(short);
  84. }
  85. vb_ptr_arg[0] = vb_ptr;
  86. }
  87. /*------------------------------------------------------------*/
  88. /* convert dual to mono */
  89. void sbt_dual_mono(float *sample, unsigned char *pcm, 
  90.                    int n, float vbuf[][512], int vb_ptr_arg[])
  91. {
  92. int i, vb_ptr;
  93. vb_ptr = vb_ptr_arg[0];
  94. for(i=0;i<n;i++) {
  95.   fdct32_dual_mono(sample, vbuf[0]+vb_ptr);
  96.   window(vbuf[0], vb_ptr, pcm);
  97.   sample += 64;
  98.   vb_ptr = (vb_ptr-32) & 511;
  99.   pcm += 32*sizeof(short);
  100. }
  101. vb_ptr_arg[0] = vb_ptr;
  102. }
  103. /*------------------------------------------------------------*/
  104. /*------------------------------------------------------------*/
  105. #ifdef REDUCTION
  106. /*------------------------------------------------------------*/
  107. /* convert dual to left */
  108. void sbt_dual_left(float *sample, unsigned char *pcm, 
  109.                    int n, float vbuf[][512], int vb_ptr_arg[])
  110. {
  111. int i, vb_ptr;
  112. vb_ptr = vb_ptr_arg[0];
  113. for(i=0;i<n;i++) {
  114.   fdct32_dual(sample, vbuf[0]+vb_ptr);
  115.   window(vbuf[0], vb_ptr, pcm);
  116.   sample += 64;
  117.   vb_ptr = (vb_ptr-32) & 511;
  118.   pcm += 32*sizeof(short);
  119. }
  120. vb_ptr_arg[0] = vb_ptr;
  121. }
  122. /*------------------------------------------------------------*/
  123. /* convert dual to right */
  124. void sbt_dual_right(float *sample, unsigned char *pcm, 
  125.                     int n, float vbuf[][512], int vb_ptr_arg[])
  126. {
  127. int i, vb_ptr;
  128. vb_ptr = vb_ptr_arg[0];
  129. sample++;   /* point to right chan */
  130. for(i=0;i<n;i++) {
  131.   fdct32_dual(sample, vbuf[0]+vb_ptr);
  132.   window(vbuf[0], vb_ptr, pcm);
  133.   sample += 64;
  134.   vb_ptr = (vb_ptr-32) & 511;
  135.   pcm += 32*sizeof(short);
  136. }
  137. vb_ptr_arg[0] = vb_ptr;
  138. }
  139. /*------------------------------------------------------------*/
  140. /*---------------- 16 pt sbt's  -------------------------------*/
  141. /*------------------------------------------------------------*/
  142. void sbt16_mono(float *sample, unsigned char *pcm, 
  143.                 int n, float vbuf[][512], int vb_ptr_arg[])
  144. {
  145. int i, vb_ptr;
  146. vb_ptr = vb_ptr_arg[0];
  147. for(i=0;i<n;i++) {
  148.   fdct16(sample, vbuf[0]+vb_ptr);
  149.   window16(vbuf[0], vb_ptr, pcm);
  150.   sample += 64;
  151.   vb_ptr = (vb_ptr-16) & 255;
  152.   pcm += 16*sizeof(short);
  153. }
  154. vb_ptr_arg[0] = vb_ptr;
  155. }
  156. /*------------------------------------------------------------*/
  157. void sbt16_dual(float *sample, unsigned char *pcm, 
  158.                 int n, float vbuf[][512], int vb_ptr_arg[])
  159. {
  160. int i, vb_ptr;
  161. vb_ptr = vb_ptr_arg[0];
  162. for(i=0;i<n;i++) {
  163.   fdct16_dual(sample, vbuf[0]+vb_ptr);
  164.   fdct16_dual(sample+1, vbuf[1]+vb_ptr);
  165.   window16_dual(vbuf[0], vb_ptr, pcm);
  166.   window16_dual(vbuf[1], vb_ptr, pcm+sizeof(short));
  167.   sample += 64;
  168.   vb_ptr = (vb_ptr-16) & 255;
  169.   pcm += 32*sizeof(short);
  170. }
  171. vb_ptr_arg[0] = vb_ptr;
  172. }
  173. /*------------------------------------------------------------*/
  174. void sbt16_dual_mono(float *sample, unsigned char *pcm, 
  175.                      int n, float vbuf[][512], int vb_ptr_arg[])
  176. {
  177. int i, vb_ptr;
  178. vb_ptr = vb_ptr_arg[0];
  179. for(i=0;i<n;i++) {
  180.   fdct16_dual_mono(sample, vbuf[0]+vb_ptr);
  181.   window16(vbuf[0], vb_ptr, pcm);
  182.   sample += 64;
  183.   vb_ptr = (vb_ptr-16) & 255;
  184.   pcm += 16*sizeof(short);
  185. }
  186. vb_ptr_arg[0] = vb_ptr;
  187. }
  188. /*------------------------------------------------------------*/
  189. void sbt16_dual_left(float *sample, unsigned char *pcm, 
  190.                      int n, float vbuf[][512], int vb_ptr_arg[])
  191. {
  192. int i, vb_ptr;
  193. vb_ptr = vb_ptr_arg[0];
  194. for(i=0;i<n;i++) {
  195.   fdct16_dual(sample, vbuf[0]+vb_ptr);
  196.   window16(vbuf[0], vb_ptr, pcm);
  197.   sample += 64;
  198.   vb_ptr = (vb_ptr-16) & 255;
  199.   pcm += 16*sizeof(short);
  200. }
  201. vb_ptr_arg[0] = vb_ptr;
  202. }
  203. /*------------------------------------------------------------*/
  204. void sbt16_dual_right(float *sample, unsigned char *pcm, 
  205.                       int n, float vbuf[][512], int vb_ptr_arg[])
  206. {
  207. int i, vb_ptr;
  208. vb_ptr = vb_ptr_arg[0];
  209. sample++;
  210. for(i=0;i<n;i++) {
  211.   fdct16_dual(sample, vbuf[0]+vb_ptr);
  212.   window16(vbuf[0], vb_ptr, pcm);
  213.   sample += 64;
  214.   vb_ptr = (vb_ptr-16) & 255;
  215.   pcm += 16*sizeof(short);
  216. }
  217. vb_ptr_arg[0] = vb_ptr;
  218. }
  219. /*------------------------------------------------------------*/
  220. /*---------------- 8 pt sbt's  -------------------------------*/
  221. /*------------------------------------------------------------*/
  222. void sbt8_mono(float *sample, unsigned char *pcm, 
  223.                int n, float vbuf[][512], int vb_ptr_arg[])
  224. {
  225. int i, vb_ptr;
  226. vb_ptr = vb_ptr_arg[0];
  227. for(i=0;i<n;i++) {
  228.   fdct8(sample, vbuf[0]+vb_ptr);
  229.   window8(vbuf[0], vb_ptr, pcm);
  230.   sample += 64;
  231.   vb_ptr = (vb_ptr-8) & 127;
  232.   pcm += 8*sizeof(short);
  233. }
  234. vb_ptr_arg[0] = vb_ptr;
  235. }
  236. /*------------------------------------------------------------*/
  237. void sbt8_dual(float *sample, unsigned char *pcm, 
  238.                int n, float vbuf[][512], int vb_ptr_arg[])
  239. {
  240. int i, vb_ptr;
  241. vb_ptr = vb_ptr_arg[0];
  242. for(i=0;i<n;i++) {
  243.   fdct8_dual(sample, vbuf[0]+vb_ptr);
  244.   fdct8_dual(sample+1, vbuf[1]+vb_ptr);
  245.   window8_dual(vbuf[0], vb_ptr, pcm);
  246.   window8_dual(vbuf[1], vb_ptr, pcm+sizeof(short));
  247.   sample += 64;
  248.   vb_ptr = (vb_ptr-8) & 127;
  249.   pcm += 16*sizeof(short);
  250. }
  251. vb_ptr_arg[0] = vb_ptr;
  252. }
  253. /*------------------------------------------------------------*/
  254. void sbt8_dual_mono(float *sample, unsigned char *pcm, 
  255.                     int n, float vbuf[][512], int vb_ptr_arg[])
  256. {
  257. int i, vb_ptr;
  258. vb_ptr = vb_ptr_arg[0];
  259. for(i=0;i<n;i++) {
  260.   fdct8_dual_mono(sample, vbuf[0]+vb_ptr);
  261.   window8(vbuf[0], vb_ptr, pcm);
  262.   sample += 64;
  263.   vb_ptr = (vb_ptr-8) & 127;
  264.   pcm += 8*sizeof(short);
  265. }
  266. vb_ptr_arg[0] = vb_ptr;
  267. }
  268. /*------------------------------------------------------------*/
  269. void sbt8_dual_left(float *sample, unsigned char *pcm, 
  270.                     int n, float vbuf[][512], int vb_ptr_arg[])
  271. {
  272. int i, vb_ptr;
  273. vb_ptr = vb_ptr_arg[0];
  274. for(i=0;i<n;i++) {
  275.   fdct8_dual(sample, vbuf[0]+vb_ptr);
  276.   window8(vbuf[0], vb_ptr, pcm);
  277.   sample += 64;
  278.   vb_ptr = (vb_ptr-8) & 127;
  279.   pcm += 8*sizeof(short);
  280. }
  281. vb_ptr_arg[0] = vb_ptr;
  282. }
  283. /*------------------------------------------------------------*/
  284. void sbt8_dual_right(float *sample, unsigned char *pcm, 
  285.                      int n, float vbuf[][512], int vb_ptr_arg[])
  286. {
  287. int i, vb_ptr;
  288. vb_ptr = vb_ptr_arg[0];
  289. sample++;
  290. for(i=0;i<n;i++) {
  291.   fdct8_dual(sample, vbuf[0]+vb_ptr);
  292.   window8(vbuf[0], vb_ptr, pcm);
  293.   sample += 64;
  294.   vb_ptr = (vb_ptr-8) & 127;
  295.   pcm += 8*sizeof(short);
  296. }
  297. vb_ptr_arg[0] = vb_ptr;
  298. }
  299. /*------------------------------------------------------------*/
  300. /*------------------------------------------------------------*/
  301. // end reduction 16 bit
  302. #endif
  303. /*------------------------------------------------------------*/
  304. #ifdef EIGHT_BIT
  305. #include "csbtb.c"   /* 8 bit output */
  306. #endif
  307. /*------------------------------------------------------------*/