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/ )

Reply via email to