More OKed parts of QCELP data tables

patch by Kenan Gillet, kenan.gillet gmail com

Originally committed as revision 15752 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Kenan Gillet 2008-10-30 21:00:01 +00:00 committed by Vitor Sessak
parent 0e60e19019
commit 8c31f18bf9

View File

@ -24,6 +24,222 @@
#include <stdint.h>
/**
* pre-calculated table for hammsinc function
* Only half of the tables is needed because of symetry.
*
* TIA/EIA/IS-733 2.4.5.2-2/3
*/
static const float qcelp_hammsinc_table[4] = { -0.006822, 0.041249, -0.143459, 0.588863};
typedef struct {
uint8_t index; /*!< index into the QCELPContext structure */
uint8_t bitpos; /*!< position of the lowet bit in the value's byte */
uint8_t bitlen; /*!< number of bits to read */
} QCELPBitmap;
#define QCELP_OF(variable, bit, len) {offsetof(QCELPContext, variable), bit, len}
/**
* bitmap unpacking tables for RATE_FULL
*
* TIA/EIA/IS-733 Table 2.4.7.1-1
*/
static const QCELPBitmap qcelp_rate_full_bitmap[] = {
// start on bit
QCELP_OF(lspv [ 2], 0, 3), // 265
QCELP_OF(lspv [ 1], 0, 7), // 262
QCELP_OF(lspv [ 0], 0, 6), // 255
QCELP_OF(lspv [ 4], 0, 6), // 249
QCELP_OF(lspv [ 3], 0, 6), // 243
QCELP_OF(lspv [ 2], 3, 4), // 237
QCELP_OF(cbsign[ 0], 0, 1), // 233
QCELP_OF(cbgain[ 0], 0, 4), // 232
QCELP_OF(pfrac [ 0], 0, 1), // 228
QCELP_OF(plag [ 0], 0, 7), // 227
QCELP_OF(pgain [ 0], 0, 3), // 220
QCELP_OF(cindex[ 1], 0, 4), // 217
QCELP_OF(cbsign[ 1], 0, 1), // 213
QCELP_OF(cbgain[ 1], 0, 4), // 212
QCELP_OF(cindex[ 0], 0, 7), // 208
QCELP_OF(cbgain[ 3], 0, 1), // 201
QCELP_OF(cindex[ 2], 0, 7), // 200
QCELP_OF(cbsign[ 2], 0, 1), // 193
QCELP_OF(cbgain[ 2], 0, 4), // 192
QCELP_OF(cindex[ 1], 4, 3), // 188
QCELP_OF(plag [ 1], 0, 3), // 185
QCELP_OF(pgain [ 1], 0, 3), // 182
QCELP_OF(cindex[ 3], 0, 7), // 179
QCELP_OF(cbsign[ 3], 0, 1), // 172
QCELP_OF(cbgain[ 3], 1, 2), // 171
QCELP_OF(cindex[ 4], 0, 6), // 169
QCELP_OF(cbsign[ 4], 0, 1), // 163
QCELP_OF(cbgain[ 4], 0, 4), // 162
QCELP_OF(pfrac [ 1], 0, 1), // 158
QCELP_OF(plag [ 1], 3, 4), // 157
QCELP_OF(cbgain[ 6], 0, 3), // 153
QCELP_OF(cindex[ 5], 0, 7), // 150
QCELP_OF(cbsign[ 5], 0, 1), // 143
QCELP_OF(cbgain[ 5], 0, 4), // 142
QCELP_OF(cindex[ 4], 6, 1), // 138
QCELP_OF(cindex[ 7], 0, 3), // 137
QCELP_OF(cbsign[ 7], 0, 1), // 134
QCELP_OF(cbgain[ 7], 0, 3), // 133
QCELP_OF(cindex[ 6], 0, 7), // 130
QCELP_OF(cbsign[ 6], 0, 1), // 123
QCELP_OF(cbgain[ 6], 3, 1), // 122
QCELP_OF(cbgain[ 8], 0, 1), // 121
QCELP_OF(pfrac [ 2], 0, 1), // 120
QCELP_OF(plag [ 2], 0, 7), // 119
QCELP_OF(pgain [ 2], 0, 3), // 112
QCELP_OF(cindex[ 7], 3, 4), // 109
QCELP_OF(cbsign[ 9], 0, 1), // 105
QCELP_OF(cbgain[ 9], 0, 4), // 104
QCELP_OF(cindex[ 8], 0, 7), // 100
QCELP_OF(cbsign[ 8], 0, 1), // 93
QCELP_OF(cbgain[ 8], 1, 3), // 92
QCELP_OF(cindex[10], 0, 4), // 89
QCELP_OF(cbsign[10], 0, 1), // 85
QCELP_OF(cbgain[10], 0, 4), // 84
QCELP_OF(cindex[ 9], 0, 7), // 80
QCELP_OF(pgain [ 3], 0, 2), // 73
QCELP_OF(cindex[11], 0, 7), // 71
QCELP_OF(cbsign[11], 0, 1), // 64
QCELP_OF(cbgain[11], 0, 3), // 63
QCELP_OF(cindex[10], 4, 3), // 60
QCELP_OF(cindex[12], 0, 2), // 57
QCELP_OF(cbsign[12], 0, 1), // 55
QCELP_OF(cbgain[12], 0, 4), // 54
QCELP_OF(pfrac [ 3], 0, 1), // 50
QCELP_OF(plag [ 3], 0, 7), // 49
QCELP_OF(pgain [ 3], 2, 1), // 42
QCELP_OF(cindex[13], 0, 6), // 41
QCELP_OF(cbsign[13], 0, 1), // 35
QCELP_OF(cbgain[13], 0, 4), // 34
QCELP_OF(cindex[12], 2, 5), // 30
QCELP_OF(cbgain[15], 0, 3), // 25
QCELP_OF(cindex[14], 0, 7), // 22
QCELP_OF(cbsign[14], 0, 1), // 15
QCELP_OF(cbgain[14], 0, 4), // 14
QCELP_OF(cindex[13], 6, 1), // 10
QCELP_OF(reserved, 0, 2), // 9
QCELP_OF(cindex[15], 0, 7), // 7
QCELP_OF(cbsign[15], 0, 1) // 0
};
/**
* bitmap unpacking tables for RATE_HALF
*
* TIA/EIA/IS-733 Table 2.4.7.2-1
*/
static const QCELPBitmap qcelp_rate_half_bitmap[] = {
// start on bit
QCELP_OF(lspv [2], 0, 3), // 123
QCELP_OF(lspv [1], 0, 7), // 120
QCELP_OF(lspv [0], 0, 6), // 113
QCELP_OF(lspv [4], 0, 6), // 107
QCELP_OF(lspv [3], 0, 6), // 101
QCELP_OF(lspv [2], 3, 4), // 95
QCELP_OF(cbsign[0], 0, 1), // 91
QCELP_OF(cbgain[0], 0, 4), // 90
QCELP_OF(pfrac [0], 0, 1), // 86
QCELP_OF(plag [0], 0, 7), // 85
QCELP_OF(pgain [0], 0, 3), // 78
QCELP_OF(plag [1], 0, 6), // 75
QCELP_OF(pgain [1], 0, 3), // 69
QCELP_OF(cindex[0], 0, 7), // 66
QCELP_OF(pgain [2], 0, 2), // 59
QCELP_OF(cindex[1], 0, 7), // 57
QCELP_OF(cbsign[1], 0, 1), // 50
QCELP_OF(cbgain[1], 0, 4), // 49
QCELP_OF(pfrac [1], 0, 1), // 45
QCELP_OF(plag [1], 6, 1), // 44
QCELP_OF(cindex[2], 0, 2), // 43
QCELP_OF(cbsign[2], 0, 1), // 41
QCELP_OF(cbgain[2], 0, 4), // 40
QCELP_OF(pfrac [2], 0, 1), // 36
QCELP_OF(plag [2], 0, 7), // 35
QCELP_OF(pgain [2], 2, 1), // 28
QCELP_OF(pfrac [3], 0, 1), // 27
QCELP_OF(plag [3], 0, 7), // 26
QCELP_OF(pgain [3], 0, 3), // 19
QCELP_OF(cindex[2], 2, 5), // 16
QCELP_OF(cindex[3], 0, 7), // 11
QCELP_OF(cbsign[3], 0, 1), // 4
QCELP_OF(cbgain[3], 0, 4) // 3
};
/**
* bitmap unpacking tables for RATE_QUARTER
*
* TIA/EIA/IS-733 Table 2.4.7.3-1
*/
static const QCELPBitmap qcelp_rate_quarter_bitmap[] = {
// start on bit
QCELP_OF(lspv [2], 0, 3), // 53
QCELP_OF(lspv [1], 0, 7), // 50
QCELP_OF(lspv [0], 0, 6), // 43
QCELP_OF(lspv [4], 0, 6), // 37
QCELP_OF(lspv [3], 0, 6), // 31
QCELP_OF(lspv [2], 3, 4), // 25
QCELP_OF(cbgain[3], 0, 4), // 21
QCELP_OF(cbgain[2], 0, 4), // 17
QCELP_OF(cbgain[1], 0, 4), // 13
QCELP_OF(cbgain[0], 0, 4), // 9
QCELP_OF(reserved, 0, 2), // 5
QCELP_OF(cbgain[4], 0, 4) // 3
};
/**
* bitmap unpacking tables for RATE_OCTAVE
*
* trick: CBSEED is written into QCELPContext.cbsign[15],
* which is not used for RATE_OCTAVE.
* CBSEED is only used to ensure the occurrence of random bit
* patterns in the 16 first bits that are used as the seed.
*
* TIA/EIA/IS-733 Table 2.4.7.4-1
*/
static const QCELPBitmap qcelp_rate_octave_bitmap[] = {
// start on bit
QCELP_OF(cbsign[15], 3, 1), // 19
QCELP_OF(lspv [0], 0, 1), // 18
QCELP_OF(lspv [1], 0, 1), // 17
QCELP_OF(lspv [2], 0, 1), // 16
QCELP_OF(cbsign[15], 2, 1), // 15
QCELP_OF(lspv [3], 0, 1), // 14
QCELP_OF(lspv [4], 0, 1), // 13
QCELP_OF(lspv [5], 0, 1), // 12
QCELP_OF(cbsign[15], 1, 1), // 11
QCELP_OF(lspv [6], 0, 1), // 10
QCELP_OF(lspv [7], 0, 1), // 9
QCELP_OF(lspv [8], 0, 1), // 8
QCELP_OF(cbsign[15], 0, 1), // 7
QCELP_OF(lspv [9], 0, 1), // 6
QCELP_OF(cbgain [0], 0, 2), // 7
QCELP_OF(reserved, 0, 4) // 3
};
/**
* position of the bitmapping data for each packet type in
* the QCELPContext
*/
static const QCELPBitmap * const qcelp_unpacking_bitmaps_per_rate[5] = {
NULL, ///!< for SILENCE rate
qcelp_rate_octave_bitmap,
qcelp_rate_quarter_bitmap,
qcelp_rate_half_bitmap,
qcelp_rate_full_bitmap,
};
static const uint16_t qcelp_bits_per_rate[5] = {
0, ///!< for SILENCE rate
FF_ARRAY_ELEMS(qcelp_rate_octave_bitmap),
FF_ARRAY_ELEMS(qcelp_rate_quarter_bitmap),
FF_ARRAY_ELEMS(qcelp_rate_half_bitmap),
FF_ARRAY_ELEMS(qcelp_rate_full_bitmap),
};
typedef uint16_t qcelp_vector[2];
/**