| 38 | } |
| 39 | |
| 40 | static short* get_table() { |
| 41 | const int ksize = 2; |
| 42 | if (init_table) { |
| 43 | return &global_table[0]; |
| 44 | } else { |
| 45 | short* itab = global_table; |
| 46 | float _tab[8 * INTER_TAB_SIZE]; |
| 47 | int i, j, k1, k2; |
| 48 | init_inter_tab_1d(_tab, INTER_TAB_SIZE); |
| 49 | for (i = 0; i < INTER_TAB_SIZE; ++i) { |
| 50 | for (j = 0; j < INTER_TAB_SIZE; ++j, itab += ksize * ksize) { |
| 51 | int isum = 0; |
| 52 | for (k1 = 0; k1 < ksize; ++k1) { |
| 53 | float vy = _tab[i * ksize + k1]; |
| 54 | for (k2 = 0; k2 < ksize; ++k2) { |
| 55 | float v = vy * _tab[j * ksize + k2]; |
| 56 | isum += itab[k1 * ksize + k2] = |
| 57 | SATURATE_CAST_SHORT(v * INTER_REMAP_COEF_SCALE); |
| 58 | } |
| 59 | } |
| 60 | if (isum != INTER_REMAP_COEF_SCALE) { |
| 61 | int diff = isum - INTER_REMAP_COEF_SCALE; |
| 62 | int ksize2 = ksize / 2, Mk1 = ksize2, Mk2 = ksize2; |
| 63 | int mk1 = ksize2, mk2 = ksize2; |
| 64 | for (k1 = ksize2; k1 < ksize2 + 2; ++k1) |
| 65 | for (k2 = ksize2; k2 < ksize2 + 2; ++k2) { |
| 66 | if (itab[k1 * ksize + k2] < itab[mk1 * ksize + mk2]) { |
| 67 | mk1 = k1; |
| 68 | mk2 = k2; |
| 69 | } else if ( |
| 70 | itab[k1 * ksize + k2] > itab[Mk1 * ksize + Mk2]) { |
| 71 | Mk1 = k1; |
| 72 | Mk2 = k2; |
| 73 | } |
| 74 | } |
| 75 | if (diff < 0) |
| 76 | itab[Mk1 * ksize + Mk2] = |
| 77 | (short)(itab[Mk1 * ksize + Mk2] - diff); |
| 78 | else |
| 79 | itab[mk1 * ksize + mk2] = |
| 80 | (short)(itab[mk1 * ksize + mk2] - diff); |
| 81 | } |
| 82 | } |
| 83 | } |
| 84 | init_table = true; |
| 85 | return &global_table[0]; |
| 86 | } |
| 87 | } |
| 88 | int main() { |
| 89 | short* table = get_table(); |
| 90 | for (int i = 0; i < INTER_TAB_SIZE * INTER_TAB_SIZE; i++) { |
no test coverage detected