29#if !defined(_GSM0610_LOCAL_H_)
30#define _GSM0610_LOCAL_H_
32#define GSM0610_FRAME_LEN 160
34#define GSM0610_MAGIC 0xD
36#include "spandsp/private/gsm0610.h"
38static __inline__ int16_t gsm_add(int16_t a, int16_t b)
40#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
55 sum = (int32_t) a + (int32_t) b;
61static __inline__ int32_t gsm_l_add(int32_t a, int32_t b)
63#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
67 " movl $0x7fffffff,%0;\n"
83 A = (uint32_t) -(a + 1) + (uint32_t) -(b + 1);
84 return (A >= INT32_MAX) ? INT32_MIN : -(int32_t) A - 2;
90 A = (uint32_t) a + (uint32_t) b;
91 return (A > INT32_MAX) ? INT32_MAX : A;
96static __inline__ int16_t gsm_sub(int16_t a, int16_t b)
100 diff = (int32_t) a - (int32_t) b;
101 return saturate(diff);
105static __inline__ int16_t gsm_mult(int16_t a, int16_t b)
107 if (a == INT16_MIN && b == INT16_MIN)
110 return (int16_t) (((int32_t) a * (int32_t) b) >> 15);
114static __inline__ int32_t gsm_l_mult(int16_t a, int16_t b)
116 assert (a != INT16_MIN || b != INT16_MIN);
117 return ((int32_t) a * (int32_t) b) << 1;
121static __inline__ int16_t gsm_mult_r(int16_t a, int16_t b)
125 if (b == INT16_MIN && a == INT16_MIN)
128 prod = (int32_t) a * (int32_t) b + 16384;
130 return (int16_t) (prod & 0xFFFF);
134static __inline__ int16_t gsm_abs(int16_t a)
136 return (a == INT16_MIN) ? INT16_MAX : (int16_t) abs(a);
140static __inline__ int16_t gsm_asr(int16_t a,
int n)
143 return (int16_t) (-(a < 0));
149 return (int16_t) (a << -n);
151 return (int16_t) (a >> n);
155static __inline__ int16_t gsm_asl(int16_t a,
int n)
161 return (int16_t) (-(a < 0));
164 return gsm_asr(a, -n);
166 return (int16_t) (a << n);
170extern void gsm0610_long_term_predictor(gsm0610_state_t *s,
178extern void gsm0610_lpc_analysis(gsm0610_state_t *s,
182extern void gsm0610_preprocess(gsm0610_state_t *s,
186extern void gsm0610_short_term_analysis_filter(gsm0610_state_t *s,
190extern void gsm0610_long_term_synthesis_filtering(gsm0610_state_t *s,
196extern void gsm0610_rpe_decoding(gsm0610_state_t *s,
202extern void gsm0610_rpe_encoding(gsm0610_state_t *s,
208extern void gsm0610_short_term_synthesis_filter(gsm0610_state_t *s,
213extern int16_t gsm0610_norm(int32_t a);