FreeCalypso > hg > gsm-codec-lib
comparison libgsmefr/dec_lag6.c @ 65:cb080ec1817e
libgsmefr: dec_lag6.c compiles
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sat, 26 Nov 2022 02:50:06 +0000 |
| parents | 49dd1ac8e75b |
| children | f387ee919f2c |
comparison
equal
deleted
inserted
replaced
| 64:1cc2968f883f | 65:cb080ec1817e |
|---|---|
| 14 * that a transmission error occurred. In this case, the pitch lag from | 14 * that a transmission error occurred. In this case, the pitch lag from |
| 15 * previous subframe is used. | 15 * previous subframe is used. |
| 16 * | 16 * |
| 17 *************************************************************************/ | 17 *************************************************************************/ |
| 18 | 18 |
| 19 #include "gsm_efr.h" | |
| 19 #include "typedef.h" | 20 #include "typedef.h" |
| 21 #include "namespace.h" | |
| 20 #include "basic_op.h" | 22 #include "basic_op.h" |
| 21 #include "count.h" | 23 #include "no_count.h" |
| 24 #include "codec.h" | |
| 25 #include "cnst.h" | |
| 26 #include "dec_state.h" | |
| 22 | 27 |
| 23 /* Old integer lag */ | 28 Word16 Dec_lag6 ( /* output: return integer pitch lag */ |
| 24 | 29 struct EFR_decoder_state *st, |
| 25 Word16 old_T0; | |
| 26 | |
| 27 Word16 | |
| 28 Dec_lag6 ( /* output: return integer pitch lag */ | |
| 29 Word16 index, /* input : received pitch index */ | 30 Word16 index, /* input : received pitch index */ |
| 30 Word16 pit_min, /* input : minimum pitch lag */ | 31 Word16 pit_min, /* input : minimum pitch lag */ |
| 31 Word16 pit_max, /* input : maximum pitch lag */ | 32 Word16 pit_max, /* input : maximum pitch lag */ |
| 32 Word16 i_subfr, /* input : subframe flag */ | 33 Word16 i_subfr, /* input : subframe flag */ |
| 33 Word16 L_frame_by2,/* input : speech frame size divided by 2 */ | 34 Word16 L_frame_by2,/* input : speech frame size divided by 2 */ |
| 34 Word16 *T0_frac, /* output: fractional part of pitch lag */ | 35 Word16 *T0_frac, /* output: fractional part of pitch lag */ |
| 35 Word16 bfi /* input : bad frame indicator */ | 36 Word16 bfi, /* input : bad frame indicator */ |
| 37 Word16 *T0_min, | |
| 38 Word16 *T0_max | |
| 36 ) | 39 ) |
| 37 { | 40 { |
| 38 Word16 pit_flag; | 41 Word16 pit_flag; |
| 39 Word16 T0, i; | 42 Word16 T0, i; |
| 40 static Word16 T0_min, T0_max; | |
| 41 | 43 |
| 42 pit_flag = i_subfr; move16 (); /* flag for 1st or 3rd subframe */ | 44 pit_flag = i_subfr; move16 (); /* flag for 1st or 3rd subframe */ |
| 43 test (); | 45 test (); |
| 44 if (sub (i_subfr, L_frame_by2) == 0) | 46 if (sub (i_subfr, L_frame_by2) == 0) |
| 45 { | 47 { |
| 68 } | 70 } |
| 69 } | 71 } |
| 70 else | 72 else |
| 71 /* bfi == 1 */ | 73 /* bfi == 1 */ |
| 72 { | 74 { |
| 73 T0 = old_T0; move16 (); | 75 T0 = st->old_T0; |
| 74 *T0_frac = 0; move16 (); | 76 *T0_frac = 0; |
| 75 } | 77 } |
| 76 | 78 |
| 77 /* find T0_min and T0_max for 2nd (or 4th) subframe */ | 79 /* find T0_min and T0_max for 2nd (or 4th) subframe */ |
| 78 | 80 |
| 79 T0_min = sub (T0, 5); | 81 *T0_min = sub (T0, 5); |
| 80 test (); | 82 if (sub (*T0_min, pit_min) < 0) |
| 81 if (sub (T0_min, pit_min) < 0) | |
| 82 { | 83 { |
| 83 T0_min = pit_min; move16 (); | 84 *T0_min = pit_min; |
| 84 } | 85 } |
| 85 T0_max = add (T0_min, 9); | 86 *T0_max = add (*T0_min, 9); |
| 86 test (); | 87 if (sub (*T0_max, pit_max) > 0) |
| 87 if (sub (T0_max, pit_max) > 0) | |
| 88 { | 88 { |
| 89 T0_max = pit_max; move16 (); | 89 *T0_max = pit_max; |
| 90 T0_min = sub (T0_max, 9); | 90 *T0_min = sub (*T0_max, 9); |
| 91 } | 91 } |
| 92 } | 92 } |
| 93 else | 93 else |
| 94 /* second or fourth subframe */ | 94 /* second or fourth subframe */ |
| 95 { | 95 { |
| 97 /* if bfi == 0 decode pitch */ | 97 /* if bfi == 0 decode pitch */ |
| 98 if ((bfi == 0) && (sub (index, 61) < 0)) | 98 if ((bfi == 0) && (sub (index, 61) < 0)) |
| 99 { | 99 { |
| 100 /* i = (index+5)/6 - 1 */ | 100 /* i = (index+5)/6 - 1 */ |
| 101 i = sub (mult (add (index, 5), 5462), 1); | 101 i = sub (mult (add (index, 5), 5462), 1); |
| 102 T0 = add (i, T0_min); | 102 T0 = add (i, *T0_min); |
| 103 i = add (add (i, i), i); | 103 i = add (add (i, i), i); |
| 104 *T0_frac = sub (sub (index, 3), add (i, i)); | 104 *T0_frac = sub (sub (index, 3), add (i, i)); |
| 105 move16 (); | |
| 106 } | 105 } |
| 107 else | 106 else |
| 108 /* bfi == 1 OR index >= 61 */ | 107 /* bfi == 1 OR index >= 61 */ |
| 109 { | 108 { |
| 110 T0 = old_T0; move16 (); | 109 T0 = st->old_T0; |
| 111 *T0_frac = 0; move16 (); | 110 *T0_frac = 0; |
| 112 } | 111 } |
| 113 } | 112 } |
| 114 | 113 |
| 115 old_T0 = T0; move16 (); | 114 st->old_T0 = T0; |
| 116 | 115 |
| 117 return T0; | 116 return T0; |
| 118 } | 117 } |
