ReactOS  0.4.14-dev-815-ge410a12
synth_ntom.h
Go to the documentation of this file.
1 /*
2  synth_ntom.h: ntom-resampling synth functions
3 
4  This header is used multiple times to create different variants of this function.
5  Hint: MONO_NAME, MONO2STEREO_NAME, SYNTH_NAME and SAMPLE_T as well as WRITE_SAMPLE do vary.
6 
7  copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
8  see COPYING and AUTHORS files in distribution or http://mpg123.org
9  initially written by Michael Hipp, generalized by Thomas Orgis
10 
11  Well, this is very simple resampling... you may or may not like what you hear.
12  But it's cheap.
13  But still, we don't implement a non-autoincrement version of this one.
14 */
15 
16 /* Note: These mono functions would also work generically,
17  it's just that they need a runtime calculation for the conversion loop...
18  The fixed XtoY functions have the chance for loop unrolling... */
19 
20 int MONO_NAME(real *bandPtr, mpg123_handle *fr)
21 {
22  SAMPLE_T samples_tmp[8*64];
23  SAMPLE_T *tmp1 = samples_tmp;
24  size_t i;
25  int ret;
26 
27  size_t pnt = fr->buffer.fill;
28  unsigned char *samples = fr->buffer.data;
29  fr->buffer.data = (unsigned char*) samples_tmp;
30  fr->buffer.fill = 0;
31  ret = SYNTH_NAME(bandPtr, 0, fr, 1);
32  fr->buffer.data = samples;
33 
34  samples += pnt;
35  for(i=0;i<(fr->buffer.fill/(2*sizeof(SAMPLE_T)));i++)
36  {
37  *( (SAMPLE_T *)samples) = *tmp1;
38  samples += sizeof(SAMPLE_T);
39  tmp1 += 2;
40  }
41  fr->buffer.fill = pnt + (fr->buffer.fill/2);
42 
43  return ret;
44 }
45 
46 
48 {
49  size_t i;
50  int ret;
51  size_t pnt1 = fr->buffer.fill;
52  unsigned char *samples = fr->buffer.data + pnt1;
53 
54  ret = SYNTH_NAME(bandPtr, 0, fr, 1);
55 
56  for(i=0;i<((fr->buffer.fill-pnt1)/(2*sizeof(SAMPLE_T)));i++)
57  {
58  ((SAMPLE_T *)samples)[1] = ((SAMPLE_T *)samples)[0];
59  samples+=2*sizeof(SAMPLE_T);
60  }
61 
62  return ret;
63 }
64 
65 
66 int SYNTH_NAME(real *bandPtr,int channel, mpg123_handle *fr, int final)
67 {
68  static const int step = 2;
69  SAMPLE_T *samples = (SAMPLE_T *) (fr->buffer.data + fr->buffer.fill);
70 
71  real *b0, **buf; /* (*buf)[0x110]; */
72  int clip = 0;
73  int bo1;
74  int ntom;
75 #ifndef NO_EQUALIZER
76  if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
77 #endif
78  if(!channel)
79  {
80  fr->bo--;
81  fr->bo &= 0xf;
82  buf = fr->real_buffs[0];
83  ntom = fr->ntom_val[1] = fr->ntom_val[0];
84  }
85  else
86  {
87  samples++;
88  buf = fr->real_buffs[1];
89  ntom = fr->ntom_val[1];
90  }
91 
92  if(fr->bo & 0x1)
93  {
94  b0 = buf[0];
95  bo1 = fr->bo;
96  dct64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
97  }
98  else
99  {
100  b0 = buf[1];
101  bo1 = fr->bo+1;
102  dct64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
103  }
104 
105  {
106  register int j;
107  real *window = fr->decwin + 16 - bo1;
108 
109  for (j=16;j;j--,window+=0x10)
110  {
111  real sum;
112 
113  ntom += fr->ntom_step;
114  if(ntom < NTOM_MUL)
115  {
116  window += 16;
117  b0 += 16;
118  continue;
119  }
120 
121  sum = REAL_MUL_SYNTH(*window++, *b0++);
122  sum -= REAL_MUL_SYNTH(*window++, *b0++);
123  sum += REAL_MUL_SYNTH(*window++, *b0++);
124  sum -= REAL_MUL_SYNTH(*window++, *b0++);
125  sum += REAL_MUL_SYNTH(*window++, *b0++);
126  sum -= REAL_MUL_SYNTH(*window++, *b0++);
127  sum += REAL_MUL_SYNTH(*window++, *b0++);
128  sum -= REAL_MUL_SYNTH(*window++, *b0++);
129  sum += REAL_MUL_SYNTH(*window++, *b0++);
130  sum -= REAL_MUL_SYNTH(*window++, *b0++);
131  sum += REAL_MUL_SYNTH(*window++, *b0++);
132  sum -= REAL_MUL_SYNTH(*window++, *b0++);
133  sum += REAL_MUL_SYNTH(*window++, *b0++);
134  sum -= REAL_MUL_SYNTH(*window++, *b0++);
135  sum += REAL_MUL_SYNTH(*window++, *b0++);
136  sum -= REAL_MUL_SYNTH(*window++, *b0++);
137 
138  while(ntom >= NTOM_MUL)
139  {
140  WRITE_SAMPLE(samples,sum,clip);
141  samples += step;
142  ntom -= NTOM_MUL;
143  }
144  }
145 
146  ntom += fr->ntom_step;
147  if(ntom >= NTOM_MUL)
148  {
149  real sum;
150  sum = REAL_MUL_SYNTH(window[0x0], b0[0x0]);
151  sum += REAL_MUL_SYNTH(window[0x2], b0[0x2]);
152  sum += REAL_MUL_SYNTH(window[0x4], b0[0x4]);
153  sum += REAL_MUL_SYNTH(window[0x6], b0[0x6]);
154  sum += REAL_MUL_SYNTH(window[0x8], b0[0x8]);
155  sum += REAL_MUL_SYNTH(window[0xA], b0[0xA]);
156  sum += REAL_MUL_SYNTH(window[0xC], b0[0xC]);
157  sum += REAL_MUL_SYNTH(window[0xE], b0[0xE]);
158 
159  while(ntom >= NTOM_MUL)
160  {
161  WRITE_SAMPLE(samples,sum,clip);
162  samples += step;
163  ntom -= NTOM_MUL;
164  }
165  }
166 
167  b0-=0x10,window-=0x20;
168  window += bo1<<1;
169 
170  for (j=15;j;j--,b0-=0x20,window-=0x10)
171  {
172  real sum;
173 
174  ntom += fr->ntom_step;
175  if(ntom < NTOM_MUL)
176  {
177  window -= 16;
178  b0 += 16;
179  continue;
180  }
181 
182  sum = REAL_MUL_SYNTH(-*(--window), *b0++);
183  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
184  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
185  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
186  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
187  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
188  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
189  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
190  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
191  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
192  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
193  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
194  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
195  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
196  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
197  sum -= REAL_MUL_SYNTH(*(--window), *b0++);
198 
199  while(ntom >= NTOM_MUL)
200  {
201  WRITE_SAMPLE(samples,sum,clip);
202  samples += step;
203  ntom -= NTOM_MUL;
204  }
205  }
206  }
207 
208  fr->ntom_val[channel] = ntom;
209  if(final) fr->buffer.fill = ((unsigned char *) samples - fr->buffer.data - (channel ? sizeof(SAMPLE_T) : 0));
210 
211  return clip;
212 }
213 
real equalizer[2][32]
Definition: frame.h:126
GLsizei samples
Definition: glext.h:7006
GLint x0
Definition: linetemp.h:95
int MONO_NAME(real *bandPtr, mpg123_handle *fr)
Definition: synth_ntom.h:20
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3706
#define NTOM_MUL
Definition: decode.h:32
_Tp _STLP_CALL real(const complex< _Tp > &__z)
Definition: _complex.h:727
struct outbuffer buffer
Definition: frame.h:265
#define WRITE_SAMPLE(samples, sum, clip)
Definition: synth.c:25
#define SAMPLE_T
Definition: synth.c:24
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
int SYNTH_NAME(real *bandPtr, int channel, mpg123_handle *fr, int final)
Definition: synth_ntom.h:66
real * real_buffs[2][2]
Definition: frame.h:105
int MONO2STEREO_NAME(real *bandPtr, mpg123_handle *fr)
Definition: synth_ntom.h:47
static int sum(int x_, int y_)
Definition: ptr2_test.cpp:35
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define do_equalizer
Definition: intsym.h:164
int ret
unsigned long ntom_val[2]
Definition: frame.h:148
static IHTMLWindow2 * window
Definition: events.c:77
#define dct64
Definition: intsym.h:131
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
Definition: winddi.h:3706
unsigned long ntom_step
Definition: frame.h:149
#define REAL_MUL_SYNTH(x, y)