FreeCalypso > hg > gsm-codec-lib
annotate libgsmhr1/tw_gsmhr.h @ 584:fc7a59deb3c3 default tip
hrutil: new program gsmhr-tfo-xfrm
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 14 Feb 2025 01:34:48 +0000 |
parents | 993cb9273f89 |
children |
rev | line source |
---|---|
489
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This header file is the external public interface to libgsmhr1: |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * Themyscira Wireless implementation of GSM HRv1 speech codec |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * based on the original ETSI code of GSM 06.06. |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * This header file should be installed in some system include directory |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * such that it can be included by C sources as <tw_gsmhr.h>. |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #ifndef __THEMWI_GSMHR_H |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #define __THEMWI_GSMHR_H |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <stdint.h> |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #define GSMHR_NUM_PARAMS 18 /* actual codec parameters */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #define GSMHR_NUM_PARAMS_ENC 20 /* output from the encoder */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 #define GSMHR_NUM_PARAMS_DEC 22 /* input to the decoder */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 #define GSMHR_FRAME_LEN_RPF 14 /* raw packed format */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 #define GSMHR_FRAME_LEN_5993 15 /* RFC 5993 and TW-TS-002 */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 |
571
c6d0b1a7281e
libgsmhr1: API definition for TFO transform
Mychaela Falconia <falcon@freecalypso.org>
parents:
512
diff
changeset
|
22 /* stateful encoder, decoder and TFO engines */ |
489
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 struct gsmhr_encoder_state; /* opaque to external users */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 struct gsmhr_decoder_state; /* ditto */ |
571
c6d0b1a7281e
libgsmhr1: API definition for TFO transform
Mychaela Falconia <falcon@freecalypso.org>
parents:
512
diff
changeset
|
26 struct gsmhr_rxfe_state; |
489
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 struct gsmhr_encoder_state *gsmhr_encoder_create(int dtx); |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 struct gsmhr_decoder_state *gsmhr_decoder_create(void); |
571
c6d0b1a7281e
libgsmhr1: API definition for TFO transform
Mychaela Falconia <falcon@freecalypso.org>
parents:
512
diff
changeset
|
30 struct gsmhr_rxfe_state *gsmhr_rxfe_create(void); |
573
fa81605d83a2
libgsmhr1/tw_gsmhr.h: fix comment
Mychaela Falconia <falcon@freecalypso.org>
parents:
571
diff
changeset
|
31 /* use standard free() call to free these instances afterward */ |
489
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 /* reset state to initial */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 void gsmhr_encoder_reset(struct gsmhr_encoder_state *st, int dtx); |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 void gsmhr_decoder_reset(struct gsmhr_decoder_state *st); |
571
c6d0b1a7281e
libgsmhr1: API definition for TFO transform
Mychaela Falconia <falcon@freecalypso.org>
parents:
512
diff
changeset
|
36 void gsmhr_rxfe_reset(struct gsmhr_rxfe_state *st); |
489
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 /* encoder and decoder main functions */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 void gsmhr_encode_frame(struct gsmhr_encoder_state *st, const int16_t *pcm, |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 int16_t *param); |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 void gsmhr_decode_frame(struct gsmhr_decoder_state *st, const int16_t *param, |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 int16_t *pcm); |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 |
571
c6d0b1a7281e
libgsmhr1: API definition for TFO transform
Mychaela Falconia <falcon@freecalypso.org>
parents:
512
diff
changeset
|
44 /* TFO transform */ |
c6d0b1a7281e
libgsmhr1: API definition for TFO transform
Mychaela Falconia <falcon@freecalypso.org>
parents:
512
diff
changeset
|
45 void gsmhr_tfo_xfrm(struct gsmhr_rxfe_state *st, int dtxd, const int16_t *ul, |
c6d0b1a7281e
libgsmhr1: API definition for TFO transform
Mychaela Falconia <falcon@freecalypso.org>
parents:
512
diff
changeset
|
46 int16_t *dl); |
c6d0b1a7281e
libgsmhr1: API definition for TFO transform
Mychaela Falconia <falcon@freecalypso.org>
parents:
512
diff
changeset
|
47 |
489
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 /* stateless format conversion functions */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 void gsmhr_pack_ts101318(const int16_t *param, uint8_t *payload); |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 void gsmhr_unpack_ts101318(const uint8_t *payload, int16_t *param); |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 void gsmhr_encoder_twts002_out(const int16_t *param, uint8_t *payload); |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 int gsmhr_decoder_twts002_in(const uint8_t *payload, int16_t *param); |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 |
492
cc3a831712a4
libgsmhr1: implement arbitrary RTP input
Mychaela Falconia <falcon@freecalypso.org>
parents:
489
diff
changeset
|
56 int gsmhr_rtp_in_preen(const uint8_t *rtp_in, unsigned rtp_in_len, |
cc3a831712a4
libgsmhr1: implement arbitrary RTP input
Mychaela Falconia <falcon@freecalypso.org>
parents:
489
diff
changeset
|
57 uint8_t *canon_pl); |
510
5bf71b091323
libgsmhr1: add direct conversion from RTP input to decoder params
Mychaela Falconia <falcon@freecalypso.org>
parents:
496
diff
changeset
|
58 int gsmhr_rtp_in_direct(const uint8_t *rtp_in, unsigned rtp_in_len, |
5bf71b091323
libgsmhr1: add direct conversion from RTP input to decoder params
Mychaela Falconia <falcon@freecalypso.org>
parents:
496
diff
changeset
|
59 int16_t *param); |
492
cc3a831712a4
libgsmhr1: implement arbitrary RTP input
Mychaela Falconia <falcon@freecalypso.org>
parents:
489
diff
changeset
|
60 |
512
4f0ab833bec0
libgsmhr1: add parameter validation function
Mychaela Falconia <falcon@freecalypso.org>
parents:
510
diff
changeset
|
61 /* reading parameter arrays from files: validation functions */ |
4f0ab833bec0
libgsmhr1: add parameter validation function
Mychaela Falconia <falcon@freecalypso.org>
parents:
510
diff
changeset
|
62 |
4f0ab833bec0
libgsmhr1: add parameter validation function
Mychaela Falconia <falcon@freecalypso.org>
parents:
510
diff
changeset
|
63 int gsmhr_check_common_params(const int16_t *params); |
4f0ab833bec0
libgsmhr1: add parameter validation function
Mychaela Falconia <falcon@freecalypso.org>
parents:
510
diff
changeset
|
64 int gsmhr_check_encoder_params(const int16_t *params); |
4f0ab833bec0
libgsmhr1: add parameter validation function
Mychaela Falconia <falcon@freecalypso.org>
parents:
510
diff
changeset
|
65 int gsmhr_check_decoder_params(const int16_t *params); |
4f0ab833bec0
libgsmhr1: add parameter validation function
Mychaela Falconia <falcon@freecalypso.org>
parents:
510
diff
changeset
|
66 |
489
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 /* perfect SID detection and regeneration */ |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 int gsmhr_ts101318_is_perfect_sid(const uint8_t *payload); |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 void gsmhr_ts101318_set_sid_codeword(uint8_t *payload); |
574
993cb9273f89
libgsmhr1: add function that sets SID codeword at param level
Mychaela Falconia <falcon@freecalypso.org>
parents:
573
diff
changeset
|
71 void gsmhr_set_sid_cw_params(int16_t *params); |
489
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 |
496
af70bf42eb1b
libgsmhr1: implement DHF const array
Mychaela Falconia <falcon@freecalypso.org>
parents:
492
diff
changeset
|
73 /* public const data items */ |
489
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 |
496
af70bf42eb1b
libgsmhr1: implement DHF const array
Mychaela Falconia <falcon@freecalypso.org>
parents:
492
diff
changeset
|
75 extern const int16_t gsmhr_dhf_params[GSMHR_NUM_PARAMS]; |
af70bf42eb1b
libgsmhr1: implement DHF const array
Mychaela Falconia <falcon@freecalypso.org>
parents:
492
diff
changeset
|
76 extern const uint8_t gsmhr_dhf_ts101318[GSMHR_FRAME_LEN_RPF]; |
489
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 |
f036e1de5b05
libgsmhr1: starting with API definition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 #endif /* include guard */ |