I think we can make a very simple library setup stuff:
proposal:
int lame_open();
// allocates internal structures
int lame_set_param( int handle, LameParameter Parameter, int Value );
// assigns Lame's parameter a value
int lame_init_params( int handle );
// fills up rest of needed parameters by default values
usual lame_encode() stuff
void lame_close( int handle );
// frees all allocated internal structures
just enumerate all parameters LAME will use, we can allways append
new ones if needed. A 32 bit int should provide us enough internal
parameters ;)
typedef enum{
lp_bitrate,
lp_vbrmode,
lp_vbrquality,
lp_vbrmin,
lp_vbrmax,
lp_crc,
:
} LameParameter;
// different channel modes
#define CM_MONO 1
#define CM_LR_STEREO 2
#define CM_J_STEREO 3
#define CM_MS_STEREO 4
...
Example setup sequence:
handle = lame_open();
lame_set_param( handle, lp_bitrate, 128 );
lame_set_param( handle, lp_crc, FALSE );
lame_set_param( handle, lp_original, FALSE );
lame_set_param( handle, lp_channelmode, CM_J_STEREO );
lame_set_param( handle, lp_quality, 2 );
lame_set_param( handle, lp_lowpass, 5500 );
lame_set_param( handle, lp_lowpasswidth, 500 );
lame_set_param( handle, lp_highpass, 100 );
lame_set_param( handle, lp_resample, 11025 );
lame_set_param( handle, lp_voice, TRUE );
lame_init_params( handle );
<encoding>
lame_close( handle );
This way there is no need to parse any strings, we don't pass
any pointers, the setup routine would just be a big switch/case.
Ciao Robert
--
MP3 ENCODER mailing list ( http://geek.rcc.se/mp3encoder/ )