annotate libtwamr/tw_amr.h @ 585:3c6bf0d26ee7 default tip

TW-TS-005 reader: fix maximum line length bug TW-TS-005 section 4.1 states: The maximum allowed length of each line is 80 characters, not including the OS-specific newline encoding. The implementation of this line length limit in the TW-TS-005 hex file reader function in the present suite was wrong, such that lines of the full maximum length could not be read. Fix it. Note that this bug affects comment lines too, not just actual RTP payloads. Neither Annex A nor Annex B features an RTP payload format that goes to the maximum of 40 bytes, but if a comment line goes to the maximum allowed length of 80 characters not including the terminating newline, the bug will be triggered, necessitating the present fix.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 25 Feb 2025 07:49:28 +0000
parents fa0652115168
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
252
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This header file is the external public interface to libtwamr;
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * it should be installed in the same system include directory
307
6b33f3ba4289 libtwamr: go for single-chunk-state approach
Mychaela Falconia <falcon@freecalypso.org>
parents: 252
diff changeset
4 * as <tw_gsmfr.h> and <gsm_efr.h> for more classic GSM codecs.
252
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #ifndef __THEMWI_AMR_H
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #define __THEMWI_AMR_H
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdint.h>
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 /* AMR definitions that matter for the public interface */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #define AMR_MAX_PRM 57 /* max. num. of params */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #define AMR_IETF_MAX_PL 32 /* max bytes in RFC 4867 frame */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #define AMR_IETF_HDR_LEN 6 /* .amr file header bytes */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 #define AMR_COD_WORDS 250 /* # of words in 3GPP test seq format */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 enum RXFrameType {
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 RX_SPEECH_GOOD = 0,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 RX_SPEECH_DEGRADED,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 RX_ONSET,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 RX_SPEECH_BAD,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 RX_SID_FIRST,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 RX_SID_UPDATE,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 RX_SID_BAD,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 RX_NO_DATA,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 RX_N_FRAMETYPES /* number of frame types */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 };
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 enum TXFrameType {
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 TX_SPEECH_GOOD = 0,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 TX_SID_FIRST,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 TX_SID_UPDATE,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 TX_NO_DATA,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 TX_SPEECH_DEGRADED,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 TX_SPEECH_BAD,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 TX_SID_BAD,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 TX_ONSET,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 TX_N_FRAMETYPES /* number of frame types */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 };
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 enum Mode {
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 MR475 = 0,
421
09534cdc59ec libtwamr/tw_amr.h: rm trailing spaces from enum Mode list
Mychaela Falconia <falcon@freecalypso.org>
parents: 414
diff changeset
45 MR515,
252
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 MR59,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 MR67,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 MR74,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 MR795,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 MR102,
421
09534cdc59ec libtwamr/tw_amr.h: rm trailing spaces from enum Mode list
Mychaela Falconia <falcon@freecalypso.org>
parents: 414
diff changeset
51 MR122,
252
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 MRDTX
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 };
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 #define AMR_FT_NODATA 15
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 /* libtwamr encoder and decoder state */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 struct amr_encoder_state; /* opaque to external users */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 struct amr_decoder_state; /* ditto */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61
414
028ed5114e52 libtwamr: implement run-time VAD selection scheme
Mychaela Falconia <falcon@freecalypso.org>
parents: 354
diff changeset
62 struct amr_encoder_state *amr_encoder_create(int dtx, int use_vad2);
252
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 struct amr_decoder_state *amr_decoder_create(void);
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 /* reset state to initial */
414
028ed5114e52 libtwamr: implement run-time VAD selection scheme
Mychaela Falconia <falcon@freecalypso.org>
parents: 354
diff changeset
66 void amr_encoder_reset(struct amr_encoder_state *st, int dtx, int use_vad2);
252
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 void amr_decoder_reset(struct amr_decoder_state *st);
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 /* interface structure for passing frames of codec parameters */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 struct amr_param_frame {
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 uint8_t type;
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 uint8_t mode;
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 int16_t param[AMR_MAX_PRM];
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 };
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 /* encoder and decoder main functions */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78
307
6b33f3ba4289 libtwamr: go for single-chunk-state approach
Mychaela Falconia <falcon@freecalypso.org>
parents: 252
diff changeset
79 void amr_encode_frame(struct amr_encoder_state *st, enum Mode mode,
6b33f3ba4289 libtwamr: go for single-chunk-state approach
Mychaela Falconia <falcon@freecalypso.org>
parents: 252
diff changeset
80 const int16_t *pcm, struct amr_param_frame *frame);
252
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 void amr_decode_frame(struct amr_decoder_state *st,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 const struct amr_param_frame *frame, int16_t *pcm);
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 /* stateless utility functions: format conversions */
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86
428
ffd87f972f86 libtwamr: implement TXFrameType to RXFrameType conversion
Mychaela Falconia <falcon@freecalypso.org>
parents: 421
diff changeset
87 int amr_txtype_to_rxtype(enum TXFrameType tx_type, enum RXFrameType *rx_type);
252
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 unsigned amr_frame_to_ietf(const struct amr_param_frame *frame, uint8_t *bytes);
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 int amr_frame_from_ietf(const uint8_t *bytes, struct amr_param_frame *frame);
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 int amr_ietf_grok_first_octet(uint8_t fo);
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 void amr_frame_to_tseq(const struct amr_param_frame *frame, uint16_t *cod);
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 int amr_frame_from_tseq(const uint16_t *cod, int use_rxtype,
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 struct amr_param_frame *frame);
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96
464
fa0652115168 libtwamr: add amr_dhf_subst_efr2()
Mychaela Falconia <falcon@freecalypso.org>
parents: 442
diff changeset
97 /* stateless function and const data for DHF detection */
354
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
98
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
99 int amr_check_dhf(const struct amr_param_frame *frame, int first_sub_only);
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
100
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
101 extern const int16_t amr_dhf_mr475[AMR_MAX_PRM];
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
102 extern const int16_t amr_dhf_mr515[AMR_MAX_PRM];
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
103 extern const int16_t amr_dhf_mr59[AMR_MAX_PRM];
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
104 extern const int16_t amr_dhf_mr67[AMR_MAX_PRM];
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
105 extern const int16_t amr_dhf_mr74[AMR_MAX_PRM];
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
106 extern const int16_t amr_dhf_mr795[AMR_MAX_PRM];
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
107 extern const int16_t amr_dhf_mr102[AMR_MAX_PRM];
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
108 extern const int16_t amr_dhf_mr122[AMR_MAX_PRM];
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
109 extern const int16_t amr_dhf_gsmefr[AMR_MAX_PRM];
e4ce7972737f libtwamr: add DHF tables
Mychaela Falconia <falcon@freecalypso.org>
parents: 307
diff changeset
110
464
fa0652115168 libtwamr: add amr_dhf_subst_efr2()
Mychaela Falconia <falcon@freecalypso.org>
parents: 442
diff changeset
111 /* DHF transformation on encoder output, for AMR-EFR emulation */
fa0652115168 libtwamr: add amr_dhf_subst_efr2()
Mychaela Falconia <falcon@freecalypso.org>
parents: 442
diff changeset
112
fa0652115168 libtwamr: add amr_dhf_subst_efr2()
Mychaela Falconia <falcon@freecalypso.org>
parents: 442
diff changeset
113 void amr_dhf_subst_efr(struct amr_param_frame *frame);
fa0652115168 libtwamr: add amr_dhf_subst_efr2()
Mychaela Falconia <falcon@freecalypso.org>
parents: 442
diff changeset
114 void amr_dhf_subst_efr2(struct amr_param_frame *frame, const int16_t *pcm);
fa0652115168 libtwamr: add amr_dhf_subst_efr2()
Mychaela Falconia <falcon@freecalypso.org>
parents: 442
diff changeset
115
442
6fa27df6903b libtwamr: add file header public const datum
Mychaela Falconia <falcon@freecalypso.org>
parents: 428
diff changeset
116 /* public const datum: RFC 4867 file header */
6fa27df6903b libtwamr: add file header public const datum
Mychaela Falconia <falcon@freecalypso.org>
parents: 428
diff changeset
117
6fa27df6903b libtwamr: add file header public const datum
Mychaela Falconia <falcon@freecalypso.org>
parents: 428
diff changeset
118 extern const uint8_t amr_file_header_magic[AMR_IETF_HDR_LEN];
6fa27df6903b libtwamr: add file header public const datum
Mychaela Falconia <falcon@freecalypso.org>
parents: 428
diff changeset
119
252
57b4053559ff libtwamr: beginning of project
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 #endif /* include guard */