Adjust the splitting threshold.
Previously, we would only split a band if it was allocated more than 32 bits. However, the N=4 codebook can only produce about 22.5 bits, and two N=2 bands combined can only produce 26 bits, including 8 bits for qtheta, so if we wait until we allocate 32, we're guaranteed to fall short. Several of the larger bands come pretty far from filling 32 bits as well, though their split versions will. Greg Maxwell also suggested adding an offset to the threshold to account for the inefficiency of using qtheta compared to another VQ dimension. This patch uses 1 bit as a placeholder, as it's a clear improvement, but we may adjust this later after collecting data on more possibilities over more files.
This commit is contained in:
parent
5cf41c9d1f
commit
4499263b44
4 changed files with 12 additions and 12 deletions
|
@ -637,6 +637,7 @@ static unsigned quant_band(int encode, const CELTMode *m, int i, celt_norm *X, c
|
||||||
celt_int32 *remaining_bits, int LM, celt_norm *lowband_out, const celt_ener *bandE, int level,
|
celt_int32 *remaining_bits, int LM, celt_norm *lowband_out, const celt_ener *bandE, int level,
|
||||||
celt_uint32 *seed, celt_word16 gain, celt_norm *lowband_scratch, int fill)
|
celt_uint32 *seed, celt_word16 gain, celt_norm *lowband_scratch, int fill)
|
||||||
{
|
{
|
||||||
|
const unsigned char *cache;
|
||||||
int q;
|
int q;
|
||||||
int curr_bits;
|
int curr_bits;
|
||||||
int stereo, split;
|
int stereo, split;
|
||||||
|
@ -739,8 +740,9 @@ static unsigned quant_band(int encode, const CELTMode *m, int i, celt_norm *X, c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we need more than 32 bits, try splitting the band in two. */
|
/* If we need 1 more bit than we can produce, split the band in two. */
|
||||||
if (!stereo && LM != -1 && b > 32<<BITRES && N>2)
|
cache = m->cache.bits + m->cache.index[(LM+1)*m->nbEBands+i];
|
||||||
|
if (!stereo && LM != -1 && b > cache[cache[0]]+9 && N>2)
|
||||||
{
|
{
|
||||||
if (LM>0 || (N&1)==0)
|
if (LM>0 || (N&1)==0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -172,19 +172,17 @@ void compute_pulse_cache(CELTMode *m, int LM)
|
||||||
int qb;
|
int qb;
|
||||||
int k;
|
int k;
|
||||||
LM0 = 0;
|
LM0 = 0;
|
||||||
/* Even-sized bands bigger than N=4 can be split one more
|
/* Even-sized bands bigger than N=2 can be split one more
|
||||||
time (N=4 also _can_ be split, but not without waste: the
|
time. */
|
||||||
result can only use 26 bits, but requires an allocation
|
if (N0 > 2 && !(N0&1))
|
||||||
of 32 to trigger the split). */
|
|
||||||
if (N0 > 4 && !(N0&1))
|
|
||||||
{
|
{
|
||||||
N0>>=1;
|
N0>>=1;
|
||||||
LM0--;
|
LM0--;
|
||||||
}
|
}
|
||||||
/* N0=1 and N0=2 bands can't be split down to N=2. */
|
/* N0=1 bands can't be split down to N<2. */
|
||||||
else if (N0 <= 2)
|
else if (N0 <= 1)
|
||||||
{
|
{
|
||||||
LM0=IMIN(i,3-N0);
|
LM0=IMIN(i,1);
|
||||||
N0<<=LM0;
|
N0<<=LM0;
|
||||||
}
|
}
|
||||||
/* Compute the cost for the lowest-level PVQ of a fully split
|
/* Compute the cost for the lowest-level PVQ of a fully split
|
||||||
|
|
|
@ -22,7 +22,7 @@ static const celt_int16 cache_index50[105] = {
|
||||||
static const unsigned char cache_bits50[392] = {
|
static const unsigned char cache_bits50[392] = {
|
||||||
40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 15, 23, 28, 31, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 47, 49, 50, 51, 52, 53, 54, 55, 55, 57, 58, 59, 60, 61, 62, 63, 63, 65, 66, 67, 68, 69, 70, 71, 71, 40, 20, 33, 41, 48, 53, 57, 61, 64, 66, 69, 71, 73, 75, 76, 78, 80, 82, 85, 87, 89, 91, 92, 94, 96, 98, 101, 103, 105, 107, 108, 110, 112, 114, 117, 119, 121, 123, 124, 126, 128, 40, 23, 39, 51, 60, 67, 73, 79, 83, 87, 91, 94, 97, 100, 102, 105, 107, 111, 115, 118, 121, 124, 126, 129, 131, 135, 139, 142, 145, 148, 150, 153, 155, 159, 163, 166, 169, 172, 174, 177, 179, 35, 28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145, 149, 153, 159, 165, 171, 176, 180, 185, 189, 192, 199, 205, 211, 216, 220, 225, 229, 232, 239, 245, 251, 21, 33, 58, 79, 97, 112, 125, 137, 148, 157, 166, 174, 182, 189, 195, 201, 207, 217, 227, 235, 243, 251, 17, 35, 63, 86, 106, 123, 139, 152, 165, 177, 187, 197, 206, 214, 222, 230, 237, 250, 25, 31, 55, 75, 91, 105, 117, 128, 138, 146, 154, 161, 168, 174, 180, 185, 190, 200, 208, 215, 222, 229, 235, 240, 245, 255, 16, 36, 65, 89, 110, 128, 144, 159, 173, 185, 196, 207, 217, 226, 234, 242, 250, 11, 41, 74, 103, 128, 151, 172, 191, 209, 225, 241, 255, 9, 43, 79, 110, 138, 163, 186, 207, 227, 246, 12, 39, 71, 99, 123, 144, 164, 182, 198, 214, 228, 241, 253, 9, 44, 81, 113, 142, 168, 192, 214, 235, 255, 7, 49, 90, 127, 160, 191, 220, 247, 6, 51, 95, 134, 170, 203, 234, 7, 47, 87, 123, 155, 184, 212, 237, 6, 52, 97, 137, 174, 208, 240, 5, 57, 106, 151, 192, 231, 5, 59, 111, 158, 202, 243, 5, 55, 103, 147, 187, 224, 5, 60, 113, 161, 206, 248, 4, 65, 122, 175, 224, 4, 67, 127, 182, 234, };
|
40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 15, 23, 28, 31, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 47, 49, 50, 51, 52, 53, 54, 55, 55, 57, 58, 59, 60, 61, 62, 63, 63, 65, 66, 67, 68, 69, 70, 71, 71, 40, 20, 33, 41, 48, 53, 57, 61, 64, 66, 69, 71, 73, 75, 76, 78, 80, 82, 85, 87, 89, 91, 92, 94, 96, 98, 101, 103, 105, 107, 108, 110, 112, 114, 117, 119, 121, 123, 124, 126, 128, 40, 23, 39, 51, 60, 67, 73, 79, 83, 87, 91, 94, 97, 100, 102, 105, 107, 111, 115, 118, 121, 124, 126, 129, 131, 135, 139, 142, 145, 148, 150, 153, 155, 159, 163, 166, 169, 172, 174, 177, 179, 35, 28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145, 149, 153, 159, 165, 171, 176, 180, 185, 189, 192, 199, 205, 211, 216, 220, 225, 229, 232, 239, 245, 251, 21, 33, 58, 79, 97, 112, 125, 137, 148, 157, 166, 174, 182, 189, 195, 201, 207, 217, 227, 235, 243, 251, 17, 35, 63, 86, 106, 123, 139, 152, 165, 177, 187, 197, 206, 214, 222, 230, 237, 250, 25, 31, 55, 75, 91, 105, 117, 128, 138, 146, 154, 161, 168, 174, 180, 185, 190, 200, 208, 215, 222, 229, 235, 240, 245, 255, 16, 36, 65, 89, 110, 128, 144, 159, 173, 185, 196, 207, 217, 226, 234, 242, 250, 11, 41, 74, 103, 128, 151, 172, 191, 209, 225, 241, 255, 9, 43, 79, 110, 138, 163, 186, 207, 227, 246, 12, 39, 71, 99, 123, 144, 164, 182, 198, 214, 228, 241, 253, 9, 44, 81, 113, 142, 168, 192, 214, 235, 255, 7, 49, 90, 127, 160, 191, 220, 247, 6, 51, 95, 134, 170, 203, 234, 7, 47, 87, 123, 155, 184, 212, 237, 6, 52, 97, 137, 174, 208, 240, 5, 57, 106, 151, 192, 231, 5, 59, 111, 158, 202, 243, 5, 55, 103, 147, 187, 224, 5, 60, 113, 161, 206, 248, 4, 65, 122, 175, 224, 4, 67, 127, 182, 234, };
|
||||||
static const unsigned char cache_caps50[168] = {
|
static const unsigned char cache_caps50[168] = {
|
||||||
18, 18, 18, 18, 18, 18, 18, 18, 28, 28, 28, 28, 55, 55, 55, 90, 90, 116, 148, 141, 139, 18, 18, 18, 18, 18, 18, 18, 18, 38, 38, 38, 38, 62, 62, 62, 98, 98, 123, 156, 146, 144, 14, 14, 14, 14, 14, 14, 14, 14, 27, 27, 27, 27, 58, 58, 58, 92, 92, 118, 151, 144, 141, 19, 19, 19, 19, 19, 19, 19, 19, 31, 31, 31, 31, 61, 61, 61, 96, 96, 122, 155, 147, 143, 13, 13, 13, 13, 13, 13, 13, 13, 29, 29, 29, 29, 59, 59, 59, 92, 92, 118, 152, 145, 142, 15, 15, 15, 15, 15, 15, 15, 15, 30, 30, 30, 30, 61, 61, 61, 94, 94, 120, 153, 147, 143, 14, 14, 14, 14, 14, 14, 14, 14, 29, 29, 29, 29, 59, 59, 59, 93, 93, 118, 152, 145, 142, 15, 15, 15, 15, 15, 15, 15, 15, 30, 30, 30, 30, 60, 60, 60, 94, 94, 119, 153, 146, 143, };
|
18, 18, 18, 18, 18, 18, 18, 18, 28, 28, 28, 28, 62, 62, 62, 90, 90, 116, 148, 141, 139, 18, 18, 18, 18, 18, 18, 18, 18, 38, 38, 38, 38, 67, 67, 67, 98, 98, 123, 156, 146, 144, 14, 14, 14, 14, 14, 14, 14, 14, 31, 31, 31, 31, 64, 64, 64, 92, 92, 118, 151, 144, 141, 19, 19, 19, 19, 19, 19, 19, 19, 33, 33, 33, 33, 67, 67, 67, 96, 96, 122, 155, 147, 143, 15, 15, 15, 15, 15, 15, 15, 15, 32, 32, 32, 32, 64, 64, 64, 92, 92, 118, 152, 145, 142, 16, 16, 16, 16, 16, 16, 16, 16, 33, 33, 33, 33, 66, 66, 66, 94, 94, 120, 153, 147, 143, 16, 16, 16, 16, 16, 16, 16, 16, 32, 32, 32, 32, 64, 64, 64, 93, 93, 118, 152, 145, 142, 16, 16, 16, 16, 16, 16, 16, 16, 33, 33, 33, 33, 65, 65, 65, 94, 94, 119, 153, 146, 143, };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef FFT_TWIDDLES48000_960
|
#ifndef FFT_TWIDDLES48000_960
|
||||||
|
|
|
@ -22,7 +22,7 @@ static const celt_int16 cache_index50[105] = {
|
||||||
static const unsigned char cache_bits50[392] = {
|
static const unsigned char cache_bits50[392] = {
|
||||||
40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 15, 23, 28, 31, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 47, 49, 50, 51, 52, 53, 54, 55, 55, 57, 58, 59, 60, 61, 62, 63, 63, 65, 66, 67, 68, 69, 70, 71, 71, 40, 20, 33, 41, 48, 53, 57, 61, 64, 66, 69, 71, 73, 75, 76, 78, 80, 82, 85, 87, 89, 91, 92, 94, 96, 98, 101, 103, 105, 107, 108, 110, 112, 114, 117, 119, 121, 123, 124, 126, 128, 40, 23, 39, 51, 60, 67, 73, 79, 83, 87, 91, 94, 97, 100, 102, 105, 107, 111, 115, 118, 121, 124, 126, 129, 131, 135, 139, 142, 145, 148, 150, 153, 155, 159, 163, 166, 169, 172, 174, 177, 179, 35, 28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145, 149, 153, 159, 165, 171, 176, 180, 185, 189, 192, 199, 205, 211, 216, 220, 225, 229, 232, 239, 245, 251, 21, 33, 58, 79, 97, 112, 125, 137, 148, 157, 166, 174, 182, 189, 195, 201, 207, 217, 227, 235, 243, 251, 17, 35, 63, 86, 106, 123, 139, 152, 165, 177, 187, 197, 206, 214, 222, 230, 237, 250, 25, 31, 55, 75, 91, 105, 117, 128, 138, 146, 154, 161, 168, 174, 180, 185, 190, 200, 208, 215, 222, 229, 235, 240, 245, 255, 16, 36, 65, 89, 110, 128, 144, 159, 173, 185, 196, 207, 217, 226, 234, 242, 250, 11, 41, 74, 103, 128, 151, 172, 191, 209, 225, 241, 255, 9, 43, 79, 110, 138, 163, 186, 207, 227, 246, 12, 39, 71, 99, 123, 144, 164, 182, 198, 214, 228, 241, 253, 9, 44, 81, 113, 142, 168, 192, 214, 235, 255, 7, 49, 90, 127, 160, 191, 220, 247, 6, 51, 95, 134, 170, 203, 234, 7, 47, 87, 123, 155, 184, 212, 237, 6, 52, 97, 137, 174, 208, 240, 5, 57, 106, 151, 192, 231, 5, 59, 111, 158, 202, 243, 5, 55, 103, 147, 187, 224, 5, 60, 113, 161, 206, 248, 4, 65, 122, 175, 224, 4, 67, 127, 182, 234, };
|
40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 15, 23, 28, 31, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 47, 49, 50, 51, 52, 53, 54, 55, 55, 57, 58, 59, 60, 61, 62, 63, 63, 65, 66, 67, 68, 69, 70, 71, 71, 40, 20, 33, 41, 48, 53, 57, 61, 64, 66, 69, 71, 73, 75, 76, 78, 80, 82, 85, 87, 89, 91, 92, 94, 96, 98, 101, 103, 105, 107, 108, 110, 112, 114, 117, 119, 121, 123, 124, 126, 128, 40, 23, 39, 51, 60, 67, 73, 79, 83, 87, 91, 94, 97, 100, 102, 105, 107, 111, 115, 118, 121, 124, 126, 129, 131, 135, 139, 142, 145, 148, 150, 153, 155, 159, 163, 166, 169, 172, 174, 177, 179, 35, 28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145, 149, 153, 159, 165, 171, 176, 180, 185, 189, 192, 199, 205, 211, 216, 220, 225, 229, 232, 239, 245, 251, 21, 33, 58, 79, 97, 112, 125, 137, 148, 157, 166, 174, 182, 189, 195, 201, 207, 217, 227, 235, 243, 251, 17, 35, 63, 86, 106, 123, 139, 152, 165, 177, 187, 197, 206, 214, 222, 230, 237, 250, 25, 31, 55, 75, 91, 105, 117, 128, 138, 146, 154, 161, 168, 174, 180, 185, 190, 200, 208, 215, 222, 229, 235, 240, 245, 255, 16, 36, 65, 89, 110, 128, 144, 159, 173, 185, 196, 207, 217, 226, 234, 242, 250, 11, 41, 74, 103, 128, 151, 172, 191, 209, 225, 241, 255, 9, 43, 79, 110, 138, 163, 186, 207, 227, 246, 12, 39, 71, 99, 123, 144, 164, 182, 198, 214, 228, 241, 253, 9, 44, 81, 113, 142, 168, 192, 214, 235, 255, 7, 49, 90, 127, 160, 191, 220, 247, 6, 51, 95, 134, 170, 203, 234, 7, 47, 87, 123, 155, 184, 212, 237, 6, 52, 97, 137, 174, 208, 240, 5, 57, 106, 151, 192, 231, 5, 59, 111, 158, 202, 243, 5, 55, 103, 147, 187, 224, 5, 60, 113, 161, 206, 248, 4, 65, 122, 175, 224, 4, 67, 127, 182, 234, };
|
||||||
static const unsigned char cache_caps50[168] = {
|
static const unsigned char cache_caps50[168] = {
|
||||||
18, 18, 18, 18, 18, 18, 18, 18, 28, 28, 28, 28, 55, 55, 55, 90, 90, 116, 148, 141, 139, 18, 18, 18, 18, 18, 18, 18, 18, 38, 38, 38, 38, 62, 62, 62, 98, 98, 123, 156, 146, 144, 14, 14, 14, 14, 14, 14, 14, 14, 27, 27, 27, 27, 58, 58, 58, 92, 92, 118, 151, 144, 141, 19, 19, 19, 19, 19, 19, 19, 19, 31, 31, 31, 31, 61, 61, 61, 96, 96, 122, 155, 147, 143, 13, 13, 13, 13, 13, 13, 13, 13, 29, 29, 29, 29, 59, 59, 59, 92, 92, 118, 152, 145, 142, 15, 15, 15, 15, 15, 15, 15, 15, 30, 30, 30, 30, 61, 61, 61, 94, 94, 120, 153, 147, 143, 14, 14, 14, 14, 14, 14, 14, 14, 29, 29, 29, 29, 59, 59, 59, 93, 93, 118, 152, 145, 142, 15, 15, 15, 15, 15, 15, 15, 15, 30, 30, 30, 30, 60, 60, 60, 94, 94, 119, 153, 146, 143, };
|
18, 18, 18, 18, 18, 18, 18, 18, 28, 28, 28, 28, 62, 62, 62, 90, 90, 116, 148, 141, 139, 18, 18, 18, 18, 18, 18, 18, 18, 38, 38, 38, 38, 67, 67, 67, 98, 98, 123, 156, 146, 144, 14, 14, 14, 14, 14, 14, 14, 14, 31, 31, 31, 31, 64, 64, 64, 92, 92, 118, 151, 144, 141, 19, 19, 19, 19, 19, 19, 19, 19, 33, 33, 33, 33, 67, 67, 67, 96, 96, 122, 155, 147, 143, 15, 15, 15, 15, 15, 15, 15, 15, 32, 32, 32, 32, 64, 64, 64, 92, 92, 118, 152, 145, 142, 16, 16, 16, 16, 16, 16, 16, 16, 33, 33, 33, 33, 66, 66, 66, 94, 94, 120, 153, 147, 143, 16, 16, 16, 16, 16, 16, 16, 16, 32, 32, 32, 32, 64, 64, 64, 93, 93, 118, 152, 145, 142, 16, 16, 16, 16, 16, 16, 16, 16, 33, 33, 33, 33, 65, 65, 65, 94, 94, 119, 153, 146, 143, };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef FFT_TWIDDLES48000_960
|
#ifndef FFT_TWIDDLES48000_960
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue