|
Packit |
c32a2d |
/*
|
|
Packit |
c32a2d |
synth_8bit.h: Wrappers over optimized synth_xtoy for converting signed short to 8bit.
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
|
|
Packit |
c32a2d |
see COPYING and AUTHORS files in distribution or http://mpg123.org
|
|
Packit |
c32a2d |
initially written by Michael Hipp, code generalized to the wrapper by Thomas Orgis
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
Only variable is the BLOCK size to choose 1to1, 2to1 or 4to1.
|
|
Packit |
c32a2d |
Oh, and the names: BASE_SYNTH_NAME, SYNTH_NAME, MONO_NAME, MONO2STEREO_NAME
|
|
Packit |
c32a2d |
(p.ex. opt_synth_1to1(fr), synth_1to1_8bit, synth_1to1_8bit_mono, ...).
|
|
Packit |
c32a2d |
*/
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int SYNTH_NAME(real *bandPtr, int channel, mpg123_handle *fr, int final)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
short samples_tmp[BLOCK];
|
|
Packit |
c32a2d |
short *tmp1 = samples_tmp + channel;
|
|
Packit |
c32a2d |
int i,ret;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
unsigned char *samples = fr->buffer.data;
|
|
Packit |
c32a2d |
int pnt = fr->buffer.fill;
|
|
Packit |
c32a2d |
fr->buffer.data = (unsigned char*) samples_tmp;
|
|
Packit |
c32a2d |
fr->buffer.fill = 0;
|
|
Packit |
c32a2d |
ret = BASE_SYNTH_NAME(bandPtr, channel, fr , 0);
|
|
Packit |
c32a2d |
fr->buffer.data = samples;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
samples += channel + pnt;
|
|
Packit |
c32a2d |
for(i=0;i<(BLOCK/2);i++)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
*samples = fr->conv16to8[*tmp1>>AUSHIFT];
|
|
Packit |
c32a2d |
samples += 2;
|
|
Packit |
c32a2d |
tmp1 += 2;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
fr->buffer.fill = pnt + (final ? BLOCK : 0 );
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
return ret;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int MONO_NAME(real *bandPtr, mpg123_handle *fr)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
short samples_tmp[BLOCK];
|
|
Packit |
c32a2d |
short *tmp1 = samples_tmp;
|
|
Packit |
c32a2d |
int i,ret;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
unsigned char *samples = fr->buffer.data;
|
|
Packit |
c32a2d |
int pnt = fr->buffer.fill;
|
|
Packit |
c32a2d |
fr->buffer.data = (unsigned char*) samples_tmp;
|
|
Packit |
c32a2d |
fr->buffer.fill = 0;
|
|
Packit |
c32a2d |
ret = BASE_SYNTH_NAME(bandPtr, 0, fr, 0);
|
|
Packit |
c32a2d |
fr->buffer.data = samples;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
samples += pnt;
|
|
Packit |
c32a2d |
for(i=0;i<(BLOCK/2);i++)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
*samples++ = fr->conv16to8[*tmp1>>AUSHIFT];
|
|
Packit |
c32a2d |
tmp1+=2;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
fr->buffer.fill = pnt + BLOCK/2;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
return ret;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int MONO2STEREO_NAME(real *bandPtr, mpg123_handle *fr)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
short samples_tmp[BLOCK];
|
|
Packit |
c32a2d |
short *tmp1 = samples_tmp;
|
|
Packit |
c32a2d |
int i,ret;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
unsigned char *samples = fr->buffer.data;
|
|
Packit |
c32a2d |
int pnt = fr->buffer.fill;
|
|
Packit |
c32a2d |
fr->buffer.data = (unsigned char*) samples_tmp;
|
|
Packit |
c32a2d |
fr->buffer.fill = 0;
|
|
Packit |
c32a2d |
ret = BASE_SYNTH_NAME(bandPtr, 0, fr, 0);
|
|
Packit |
c32a2d |
fr->buffer.data = samples;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
samples += pnt;
|
|
Packit |
c32a2d |
for(i=0;i<(BLOCK/2);i++)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
*samples++ = fr->conv16to8[*tmp1>>AUSHIFT];
|
|
Packit |
c32a2d |
*samples++ = fr->conv16to8[*tmp1>>AUSHIFT];
|
|
Packit |
c32a2d |
tmp1 += 2;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
fr->buffer.fill = pnt + BLOCK;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
return ret;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|