Commit 8c31f18b authored by Kenan Gillet's avatar Kenan Gillet Committed by Vitor Sessak

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
parent 0e60e190
...@@ -24,6 +24,222 @@ ...@@ -24,6 +24,222 @@
#include <stdint.h> #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]; typedef uint16_t qcelp_vector[2];
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment