annotate libtwamr/enc_lag6.c @ 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 0349de7c45b7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
363
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * R99 Version 3.3.0
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * REL-4 Version 4.1.0
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 * File : enc_lag6.c
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 * Purpose : Encoding of fractional pitch lag with 1/6 resolution.
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 /*
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 * MODULE INCLUDE FILE AND VERSION ID
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 #include "namespace.h"
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 #include "enc_lag6.h"
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 /*
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 * INCLUDE FILES
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 #include "typedef.h"
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 #include "basic_op.h"
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 #include "no_count.h"
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 /*
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 * LOCAL VARIABLES AND TABLES
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 /*
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 * PUBLIC PROGRAM CODE
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 ********************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 /*************************************************************************
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 * FUNCTION: Enc_lag6
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 * PURPOSE: Encoding of fractional pitch lag with 1/6 resolution.
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 * DESCRIPTION:
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 * First and third subframes:
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 * --------------------------
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 * The pitch range is divided as follows:
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 * 17 3/6 to 94 3/6 resolution 1/6
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 * 95 to 143 resolution 1
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 * The period is encoded with 9 bits.
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 * For the range with fractions:
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 * index = (T-17)*6 + frac - 3;
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 * where T=[17..94] and frac=[-2,-1,0,1,2,3]
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 * and for the integer only range
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 * index = (T - 95) + 463; where T=[95..143]
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 * Second and fourth subframes:
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 * ----------------------------
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 * For the 2nd and 4th subframes a resolution of 1/6 is always used,
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 * and the search range is relative to the lag in previous subframe.
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 * If t0 is the lag in the previous subframe then
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 * t_min=t0-5 and t_max=t0+4 and the range is given by
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 * (t_min-1) 3/6 to (t_max) 3/6
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 * The period in the 2nd (and 4th) subframe is encoded with 6 bits:
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 * index = (T-(t_min-1))*6 + frac - 3;
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 * where T=[t_min-1..t_max] and frac=[-2,-1,0,1,2,3]
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 * Note that only 61 values are used. If the decoder receives 61, 62,
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 * or 63 as the relative pitch index, it means that a transmission
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 * error occurred and the pitch from previous subframe should be used.
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 *
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 *************************************************************************/
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 Word16 Enc_lag6 ( /* o : Return index of encoding */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 Word16 T0, /* i : Pitch delay */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 Word16 T0_frac, /* i : Fractional pitch delay */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 Word16 T0_min, /* i : minimum of search range */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 Word16 delta_flag /* i : Flag for 1st (or 3rd) subframe */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 )
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 {
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 Word16 index, i;
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 test ();
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 if (delta_flag == 0) /* if 1st or 3rd subframe */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 {
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 /* encode pitch delay (with fraction) */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 test ();
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 if (sub (T0, 94) <= 0)
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 {
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 /* index = T0*6 - 105 + T0_frac */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 i = add (add (T0, T0), T0);
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 index = add (sub (add (i, i), 105), T0_frac);
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 }
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 else
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 {
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 index = add (T0, 368);
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 }
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 }
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 else
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 /* if second or fourth subframe */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 {
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 /* index = 6*(T0-T0_min) + 3 + T0_frac */
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 i = sub (T0, T0_min);
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 i = add (add (i, i), i);
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 index = add (add (add (i, i), 3), T0_frac);
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 }
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 return index;
0349de7c45b7 libtwamr: integrate enc_lag[36].c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 }