| 1 | // SPDX-License-Identifier: Apache-2.0 |
| 2 | // ---------------------------------------------------------------------------- |
| 3 | // Copyright 2011-2021 Arm Limited |
| 4 | // |
| 5 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| 6 | // use this file except in compliance with the License. You may obtain a copy |
| 7 | // of the License at: |
| 8 | // |
| 9 | // http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | // |
| 11 | // Unless required by applicable law or agreed to in writing, software |
| 12 | // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| 13 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| 14 | // License for the specific language governing permissions and limitations |
| 15 | // under the License. |
| 16 | // ---------------------------------------------------------------------------- |
| 17 | |
| 18 | /** |
| 19 | * @brief Data tables for quantization transfer. |
| 20 | */ |
| 21 | |
| 22 | #include "astcenc_internal.h" |
| 23 | |
| 24 | #define _ 0 // Using _ to indicate an entry that will not be used. |
| 25 | |
| 26 | const quant_and_transfer_table quant_and_xfer_tables[12] { |
| 27 | // QUANT2, range 0..1 |
| 28 | { |
| 29 | {0, 64}, |
| 30 | {0, 1}, |
| 31 | {0, 64}, |
| 32 | {0x4000,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
| 33 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
| 34 | 0x4000} |
| 35 | }, |
| 36 | // QUANT_3, range 0..2 |
| 37 | { |
| 38 | {0, 32, 64}, |
| 39 | {0, 1, 2}, |
| 40 | {0, 32, 64}, |
| 41 | {0x2000,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
| 42 | _,_,0x4000,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, |
| 43 | _,_,_,_,0x4020} |
| 44 | }, |
| 45 | // QUANT_4, range 0..3 |
| 46 | { |
| 47 | {0, 21, 43, 64}, |
| 48 | {0, 1, 2, 3}, |
| 49 | {0, 21, 43, 64}, |
| 50 | {0x1500,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,0x2b00,_,_,_,_, |
| 51 | _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,0x4015,_,_,_,_,_,_,_,_,_,_,_,_, |
| 52 | _,_,_,_,_,_,_,_,0x402b} |
| 53 | }, |
| 54 | //QUANT_5, range 0..4 |
| 55 | { |
| 56 | {0, 16, 32, 48, 64}, |
| 57 | {0, 1, 2, 3, 4}, |
| 58 | {0, 16, 32, 48, 64}, |
| 59 | {0x1000,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,0x2000,_,_,_,_,_,_,_,_,_, |
| 60 | _,_,_,_,_,_,0x3010,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,0x4020,_,_,_, |
| 61 | _,_,_,_,_,_,_,_,_,_,_,_,0x4030} |
| 62 | }, |
| 63 | // QUANT_6, range 0..5 |
| 64 | { |
| 65 | {0, 12, 25, 39, 52, 64}, |
| 66 | {0, 2, 4, 5, 3, 1}, |
| 67 | {0, 64, 12, 52, 25, 39}, |
| 68 | {0x0c00,_,_,_,_,_,_,_,_,_,_,_,0x1900,_,_,_,_,_,_,_,_,_,_,_,_, |
| 69 | 0x270c,_,_,_,_,_,_,_,_,_,_,_,_,_,0x3419,_,_,_,_,_,_,_,_,_,_, |
| 70 | _,_,0x4027,_,_,_,_,_,_,_,_,_,_,_,0x4034} |
| 71 | }, |
| 72 | // QUANT_8, range 0..7 |
| 73 | { |
| 74 | {0, 9, 18, 27, 37, 46, 55, 64}, |
| 75 | {0, 1, 2, 3, 4, 5, 6, 7}, |
| 76 | {0, 9, 18, 27, 37, 46, 55, 64}, |
| 77 | {0x0900,_,_,_,_,_,_,_,_,0x1200,_,_,_,_,_,_,_,_,0x1b09,_,_, |
| 78 | _,_,_,_,_,_,0x2512,_,_,_,_,_,_,_,_,_,0x2e1b,_,_,_,_,_,_,_,_, |
| 79 | 0x3725,_,_,_,_,_,_,_,_,0x402e,_,_,_,_,_,_,_,_,0x4037} |
| 80 | }, |
| 81 | // QUANT_10, range 0..9 |
| 82 | { |
| 83 | {0, 7, 14, 21, 28, 36, 43, 50, 57, 64}, |
| 84 | {0, 2, 4, 6, 8, 9, 7, 5, 3, 1}, |
| 85 | {0, 64, 7, 57, 14, 50, 21, 43, 28, 36}, |
| 86 | {0x0700,_,_,_,_,_,_,0x0e00,_,_,_,_,_,_,0x1507,_,_,_,_,_,_, |
| 87 | 0x1c0e,_,_,_,_,_,_,0x2415,_,_,_,_,_,_,_,0x2b1c,_,_,_,_,_, |
| 88 | _,0x3224,_,_,_,_,_,_,0x392b,_,_,_,_,_,_,0x4032,_,_,_,_,_, |
| 89 | _,0x4039} |
| 90 | }, |
| 91 | // QUANT_12, range 0..11 |
| 92 | { |
| 93 | {0, 5, 11, 17, 23, 28, 36, 41, 47, 53, 59, 64}, |
| 94 | {0, 4, 8, 2, 6, 10, 11, 7, 3, 9, 5, 1}, |
| 95 | {0, 64, 17, 47, 5, 59, 23, 41, 11, 53, 28, 36}, |
| 96 | {0x0500,_,_,_,_,0x0b00,_,_,_,_,_,0x1105,_,_,_,_,_, |
| 97 | 0x170b,_,_,_,_,_,0x1c11,_,_,_,_,0x2417,_,_,_,_,_,_,_, |
| 98 | 0x291c,_,_,_,_,0x2f24,_,_,_,_,_,0x3529,_,_,_,_,_, |
| 99 | 0x3b2f,_,_,_,_,_,0x4035,_,_,_,_,0x403b} |
| 100 | }, |
| 101 | // QUANT_16, range 0..15 |
| 102 | { |
| 103 | {0, 4, 8, 12, 17, 21, 25, 29, 35, 39, 43, 47, 52, 56, 60, 64}, |
| 104 | {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, |
| 105 | {0, 4, 8, 12, 17, 21, 25, 29, 35, 39, 43, 47, 52, 56, 60, 64}, |
| 106 | {0x0400,_,_,_,0x0800,_,_,_,0x0c04,_,_,_,0x1108,_,_,_,_, |
| 107 | 0x150c,_,_,_,0x1911,_,_,_,0x1d15,_,_,_,0x2319,_,_,_,_, |
| 108 | _,0x271d,_,_,_,0x2b23,_,_,_,0x2f27,_,_,_,0x342b,_,_,_, |
| 109 | _,0x382f,_,_,_,0x3c34,_,_,_,0x4038,_,_,_,0x403c} |
| 110 | }, |
| 111 | // QUANT_20, range 0..19 |
| 112 | { |
| 113 | {0, 3, 6, 9, 13, 16, 19, 23, 26, 29, 35, 38, 41, 45, 48, 51, 55, 58, 61, 64}, |
| 114 | {0, 4, 8, 12, 16, 2, 6, 10, 14, 18, 19, 15, 11, 7, 3, 17, 13, 9, 5, 1}, |
| 115 | {0, 64, 16, 48, 3, 61, 19, 45, 6, 58, 23, 41, 9, 55, 26, 38, 13, 51, 29, 35}, |
| 116 | {0x0300,_,_,0x0600,_,_,0x0903,_,_,0x0d06,_,_,_, |
| 117 | 0x1009,_,_,0x130d,_,_,0x1710,_,_,_,0x1a13,_,_, |
| 118 | 0x1d17,_,_,0x231a,_,_,_,_,_,0x261d,_,_,0x2923,_,_, |
| 119 | 0x2d26,_,_,_,0x3029,_,_,0x332d,_,_,0x3730,_,_,_, |
| 120 | 0x3a33,_,_,0x3d37,_,_,0x403a,_,_,0x403d} |
| 121 | }, |
| 122 | // QUANT_24, range 0..23 |
| 123 | { |
| 124 | {0, 2, 5, 8, 11, 13, 16, 19, 22, 24, 27, 30, 34, 37, 40, 42, 45, 48, 51, 53, 56, 59, 62, 64}, |
| 125 | {0, 8, 16, 2, 10, 18, 4, 12, 20, 6, 14, 22, 23, 15, 7, 21, 13, 5, 19, 11, 3, 17, 9, 1}, |
| 126 | {0, 64, 8, 56, 16, 48, 24, 40, 2, 62, 11, 53, 19, 45, 27, 37, 5, 59, 13, 51, 22, 42, 30, 34}, |
| 127 | {0x0200,_,0x0500,_,_,0x0802,_,_,0x0b05,_,_,0x0d08, |
| 128 | _,0x100b,_,_,0x130d,_,_,0x1610,_,_,0x1813,_, |
| 129 | 0x1b16,_,_,0x1e18,_,_,0x221b,_,_,_,0x251e,_,_, |
| 130 | 0x2822,_,_,0x2a25,_,0x2d28,_,_,0x302a,_,_,0x332d, |
| 131 | _,_,0x3530,_,0x3833,_,_,0x3b35,_,_,0x3e38,_,_, |
| 132 | 0x403b,_,0x403e} |
| 133 | }, |
| 134 | // QUANT_32, range 0..31 |
| 135 | { |
| 136 | {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64}, |
| 137 | {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, |
| 138 | {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64}, |
| 139 | {0x0200,_,0x0400,_,0x0602,_,0x0804,_,0x0a06,_, |
| 140 | 0x0c08,_,0x0e0a,_,0x100c,_,0x120e,_,0x1410,_, |
| 141 | 0x1612,_,0x1814,_,0x1a16,_,0x1c18,_,0x1e1a,_, |
| 142 | 0x221c,_,_,_,0x241e,_,0x2622,_,0x2824,_,0x2a26,_, |
| 143 | 0x2c28,_,0x2e2a,_,0x302c,_,0x322e,_,0x3430,_, |
| 144 | 0x3632,_,0x3834,_,0x3a36,_,0x3c38,_,0x3e3a,_, |
| 145 | 0x403c,_,0x403e} |
| 146 | } |
| 147 | }; |
| 148 | |