mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-02 21:12:12 +00:00
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:
parent
0e60e19019
commit
8c31f18bf9
@ -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];
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user