mirror of https://gerrit.osmocom.org/gapk
[3/4] HR support: Add actual wrapper code to call reference code
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
This commit is contained in:
parent
aa55d30d20
commit
f7d6f3c828
|
@ -19,37 +19,93 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <gsmhr/gsmhr.h>
|
||||
|
||||
#include "refsrc/typedefs.h"
|
||||
#include "refsrc/homing.h"
|
||||
#include "refsrc/sp_dec.h"
|
||||
#include "refsrc/sp_enc.h"
|
||||
|
||||
|
||||
#define EXPORT __attribute__((visibility("default")))
|
||||
|
||||
|
||||
struct gsmhr {
|
||||
int stub;
|
||||
int dec_reset_flg;
|
||||
};
|
||||
|
||||
EXPORT struct gsmhr *
|
||||
gsmhr_init(void)
|
||||
{
|
||||
return NULL;
|
||||
struct gsmhr *state;
|
||||
|
||||
state = calloc(1, sizeof(struct gsmhr));
|
||||
if (!state)
|
||||
return NULL;
|
||||
|
||||
state->dec_reset_flg = 1;
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
EXPORT void
|
||||
gsmhr_exit(struct gsmhr *state)
|
||||
{
|
||||
return;
|
||||
free(state);
|
||||
}
|
||||
|
||||
EXPORT int
|
||||
gsmhr_encode(struct gsmhr *state, int16_t *hr_params, const int16_t *pcm)
|
||||
{
|
||||
int enc_reset_flg;
|
||||
Shortword pcm_b[F_LEN];
|
||||
|
||||
memcpy(pcm_b, pcm, F_LEN*sizeof(int16_t));
|
||||
|
||||
enc_reset_flg = encoderHomingFrameTest(pcm_b);
|
||||
|
||||
speechEncoder(pcm_b, hr_params);
|
||||
|
||||
if (enc_reset_flg)
|
||||
resetEnc();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT int
|
||||
gsmhr_decode(struct gsmhr *state, int16_t *pcm, const int16_t *hr_params)
|
||||
{
|
||||
#define WHOLE_FRAME 18
|
||||
#define TO_FIRST_SUBFRAME 9
|
||||
|
||||
int dec_reset_flg;
|
||||
Shortword hr_params_b[22];
|
||||
|
||||
memcpy(hr_params_b, hr_params, 22*sizeof(int16_t));
|
||||
|
||||
if (state->dec_reset_flg)
|
||||
dec_reset_flg = decoderHomingFrameTest(hr_params_b, TO_FIRST_SUBFRAME);
|
||||
else
|
||||
dec_reset_flg = 0;
|
||||
|
||||
if (dec_reset_flg && state->dec_reset_flg) {
|
||||
int i;
|
||||
for (i=0; i<F_LEN; i++)
|
||||
pcm[i] = EHF_MASK;
|
||||
} else {
|
||||
speechDecoder(hr_params_b, pcm);
|
||||
}
|
||||
|
||||
if (!state->dec_reset_flg)
|
||||
dec_reset_flg = decoderHomingFrameTest(hr_params_b, WHOLE_FRAME);
|
||||
|
||||
if (dec_reset_flg)
|
||||
resetDec();
|
||||
|
||||
state->dec_reset_flg = dec_reset_flg;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue