You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.7 KiB
C++
105 lines
2.7 KiB
C++
/*
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
|
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
* AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
|
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
* PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
#ifndef VOCODER_PLUGIN_API_H
|
|
#define VOCODER_PLUGIN_API_H
|
|
|
|
#include <cinttypes>
|
|
|
|
extern "C" {
|
|
|
|
struct mbe_parameters
|
|
{
|
|
float w0;
|
|
int L;
|
|
int K;
|
|
int Vl[57];
|
|
float Ml[57];
|
|
float log2Ml[57];
|
|
float PHIl[57];
|
|
float PSIl[57];
|
|
float gamma;
|
|
int un;
|
|
int repeat;
|
|
};
|
|
|
|
typedef struct mbe_parameters mbe_parms;
|
|
|
|
struct mbelibParms
|
|
{
|
|
mbe_parms *m_cur_mp;
|
|
mbe_parms *m_prev_mp;
|
|
mbe_parms *m_prev_mp_enhanced;
|
|
|
|
mbelibParms()
|
|
{
|
|
m_cur_mp = (mbe_parms *) malloc(sizeof(mbe_parms));
|
|
m_prev_mp = (mbe_parms *) malloc(sizeof(mbe_parms));
|
|
m_prev_mp_enhanced = (mbe_parms *) malloc(sizeof(mbe_parms));
|
|
}
|
|
|
|
~mbelibParms()
|
|
{
|
|
free(m_prev_mp_enhanced);
|
|
free(m_prev_mp);
|
|
free(m_cur_mp);
|
|
}
|
|
};
|
|
}
|
|
|
|
class VocoderPlugin
|
|
{
|
|
public:
|
|
VocoderPlugin();
|
|
~VocoderPlugin();
|
|
void decode_2400x1200(int16_t *pcm, uint8_t *codec);
|
|
void decode_2450x1150(int16_t *pcm, uint8_t *codec);
|
|
void decode_2450(int16_t *pcm, uint8_t *codec);
|
|
void encode_2400x1200(int16_t *pcm, uint8_t *codec);
|
|
void encode_2450x1150(int16_t *pcm, uint8_t *codec);
|
|
void encode_2450(int16_t *pcm, uint8_t *codec);
|
|
|
|
private:
|
|
imbe_vocoder vocoder;
|
|
mbe_parms cur_mp;
|
|
mbe_parms prev_mp;
|
|
mbelibParms *m_mbelibParms;
|
|
//int m_errs;
|
|
int m_errs2;
|
|
char m_err_str[64];
|
|
|
|
float m_audio_out_temp_buf[160]; //!< output of decoder
|
|
float *m_audio_out_temp_buf_p;
|
|
float m_aout_max_buf[200];
|
|
float *m_aout_max_buf_p;
|
|
int m_aout_max_buf_idx;
|
|
short m_audio_out_buf[2*48000]; //!< final result - 1s of L+R S16LE samples
|
|
short *m_audio_out_buf_p;
|
|
int m_audio_out_nb_samples;
|
|
int m_audio_out_buf_size;
|
|
const int *w, *x, *y, *z;
|
|
char ambe_d[49];
|
|
|
|
void initMbeParms();
|
|
void process_2400x1200(unsigned char *d);
|
|
void process_2450x1150(unsigned char *d);
|
|
void process_2450(unsigned char *d);
|
|
void processData(char ambe_data[49]);
|
|
short *getAudio(int& nbSamples);
|
|
void resetAudio();
|
|
void processAudio();
|
|
};
|
|
|
|
#endif // VOCODER_PLUGIN_API_H
|