#ifndef MPG123_SYNTH_H
#define MPG123_SYNTH_H

/* This is included inside frame.h, which is included in mpg123lib_intern.h,
   at the appropriate place.
   Explicit header inclusions here would cause circular dependencies. */

/* The handle needs these types for selecting the decoding routine at runtime.
   Not just for optimization, mainly for XtoY, mono/stereo. */
typedef int (*func_synth)(real *,int, mpg123_handle *,int );
typedef int (*func_synth_mono)(real *, mpg123_handle *);
typedef int (*func_synth_stereo)(real *, real *, mpg123_handle *);
enum synth_channel  { c_plain=0, c_stereo, c_m2s, c_mono, c_limit };
enum synth_resample
{
	 r_none=-1
	,r_1to1=0
#	ifndef NO_DOWNSAMPLE
	,r_2to1
	,r_4to1
#	endif
#	ifndef NO_NTOM
	,r_ntom
#	endif
	,r_limit
};
enum synth_format
{
	 f_none=-1
#	ifndef NO_16BIT
	,f_16
#	endif
#	ifndef NO_8BIT
	,f_8
#	endif
#	ifndef NO_REAL
	,f_real
#	endif
#	ifndef NO_32BIT
	,f_32
#	endif
	,f_limit
};
struct synth_s
{
	func_synth              plain[r_limit][f_limit];
	func_synth_stereo      stereo[r_limit][f_limit];
	func_synth_mono   mono2stereo[r_limit][f_limit];
	func_synth_mono          mono[r_limit][f_limit];
};

#endif