Blame src/libmpg123/synth_8bit.h

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