| """ | |
| Copyright (c) 2024, Alliance for Open Media. All rights reserved | |
| This source code is subject to the terms of the BSD 3-Clause Clear License | |
| and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear | |
| License was not distributed with this source code in the LICENSE file, you | |
| can obtain it at aomedia.org/license/software-license/bsd-3-c-c/. If the | |
| Alliance for Open Media Patent License 1.0 was not distributed with this | |
| source code in the PATENTS file, you can obtain it at | |
| aomedia.org/license/patent-license/. | |
| """ | |
| import numpy as np | |
| CDF_PROB_BITS = 15 | |
| CDF_INIT_TOP = 32768 | |
| CDF_PROB_TOP = 2**CDF_PROB_BITS | |
| AV1_PROB_COST_SHIFT = 9 | |
| MAX_CTX_DIM = 4 # maximum dimension in context tables | |
| AV1_PROB_COST = ( | |
| 512, | |
| 506, | |
| 501, | |
| 495, | |
| 489, | |
| 484, | |
| 478, | |
| 473, | |
| 467, | |
| 462, | |
| 456, | |
| 451, | |
| 446, | |
| 441, | |
| 435, | |
| 430, | |
| 425, | |
| 420, | |
| 415, | |
| 410, | |
| 405, | |
| 400, | |
| 395, | |
| 390, | |
| 385, | |
| 380, | |
| 375, | |
| 371, | |
| 366, | |
| 361, | |
| 356, | |
| 352, | |
| 347, | |
| 343, | |
| 338, | |
| 333, | |
| 329, | |
| 324, | |
| 320, | |
| 316, | |
| 311, | |
| 307, | |
| 302, | |
| 298, | |
| 294, | |
| 289, | |
| 285, | |
| 281, | |
| 277, | |
| 273, | |
| 268, | |
| 264, | |
| 260, | |
| 256, | |
| 252, | |
| 248, | |
| 244, | |
| 240, | |
| 236, | |
| 232, | |
| 228, | |
| 224, | |
| 220, | |
| 216, | |
| 212, | |
| 209, | |
| 205, | |
| 201, | |
| 197, | |
| 194, | |
| 190, | |
| 186, | |
| 182, | |
| 179, | |
| 175, | |
| 171, | |
| 168, | |
| 164, | |
| 161, | |
| 157, | |
| 153, | |
| 150, | |
| 146, | |
| 143, | |
| 139, | |
| 136, | |
| 132, | |
| 129, | |
| 125, | |
| 122, | |
| 119, | |
| 115, | |
| 112, | |
| 109, | |
| 105, | |
| 102, | |
| 99, | |
| 95, | |
| 92, | |
| 89, | |
| 86, | |
| 82, | |
| 79, | |
| 76, | |
| 73, | |
| 70, | |
| 66, | |
| 63, | |
| 60, | |
| 57, | |
| 54, | |
| 51, | |
| 48, | |
| 45, | |
| 42, | |
| 38, | |
| 35, | |
| 32, | |
| 29, | |
| 26, | |
| 23, | |
| 20, | |
| 18, | |
| 15, | |
| 12, | |
| 9, | |
| 6, | |
| 3, | |
| ) | |
| def av1_default_cdf_parameters(n_taps): | |
| arr = np.arange(1, n_taps) | |
| cdf = (2**15) / n_taps * arr | |
| cdf = cdf.round().astype(int) | |
| return cdf | |
| def av1_default_pmf(n_taps): | |
| cdf = av1_default_cdf_parameters(n_taps) | |
| cdf = np.append(cdf, CDF_INIT_TOP) | |
| pmf = np.diff(cdf) | |
| return pmf | |
| def print_default_cdf_parameters(n_taps): | |
| print(get_default_aom_cdf_string(n_taps)) | |
| def get_aom_cdf_entry(n_taps, cdf): | |
| str_cdf = f"AOM_CDF{n_taps}(" | |
| for i, p in enumerate(cdf): | |
| if i < n_taps - 2: | |
| str_cdf += str(p).rjust(5) + ", " | |
| else: | |
| str_cdf += str(p).rjust(5) + ")" | |
| return str_cdf | |
| def get_default_aom_cdf_string(n_taps): | |
| cdf = av1_default_cdf_parameters(n_taps) | |
| return get_aom_cdf_entry(n_taps, cdf) | |
| def get_aom_cdf_string(cdf): | |
| n_taps = len(cdf) + 1 | |
| return get_aom_cdf_entry(n_taps, cdf) | |
| if __name__ == "__main__": | |
| print_default_cdf_parameters(n_taps=2) | |
| print_default_cdf_parameters(n_taps=3) | |
| print_default_cdf_parameters(n_taps=4) | |
| print_default_cdf_parameters(n_taps=5) | |
| print_default_cdf_parameters(n_taps=6) | |
| print_default_cdf_parameters(n_taps=7) | |
| print_default_cdf_parameters(n_taps=8) | |
| print_default_cdf_parameters(n_taps=9) | |
| print_default_cdf_parameters(n_taps=10) | |
| print_default_cdf_parameters(n_taps=11) | |
| print_default_cdf_parameters(n_taps=12) | |
| print_default_cdf_parameters(n_taps=15) | |
| print_default_cdf_parameters(n_taps=16) |