| /* |
| * 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/. |
| */ |
| |
| #ifndef AV1_ENCODER_SIMPLE_INTRAPRED_TFLITE_H_ |
| #define AV1_ENCODER_SIMPLE_INTRAPRED_TFLITE_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include "av1/common/av1_common_int.h" |
| |
| #define DEFAULT_QP_LOW 85 |
| #define DEFAULT_QP_HIGH 85 |
| |
| typedef enum { |
| MODEL_OTHER = 0, |
| MODEL_128X128, |
| MODEL_64X64, |
| MODEL_32X32, |
| MODEL_16X16, |
| MODEL_INTER_NONE_8X8_110, |
| MODEL_INTER_NONE_8X8_135, |
| MODEL_INTER_NONE_8X8_160, |
| MODEL_INTER_NONE_8X8_185, |
| MODEL_INTER_NONE_8X8_210, |
| MODEL_INTER_NONE_8X8_235, |
| MODEL_INTER_NONE_8X16_110, |
| MODEL_INTER_NONE_8X16_135, |
| MODEL_INTER_NONE_8X16_160, |
| MODEL_INTER_NONE_8X16_185, |
| MODEL_INTER_NONE_8X16_210, |
| MODEL_INTER_NONE_8X16_235, |
| MODEL_INTER_NONE_16X8_110, |
| MODEL_INTER_NONE_16X8_135, |
| MODEL_INTER_NONE_16X8_160, |
| MODEL_INTER_NONE_16X8_185, |
| MODEL_INTER_NONE_16X8_210, |
| MODEL_INTER_NONE_16X8_235, |
| MODEL_INTER_NONE_16X16_110, |
| MODEL_INTER_NONE_16X16_135, |
| MODEL_INTER_NONE_16X16_160, |
| MODEL_INTER_NONE_16X16_185, |
| MODEL_INTER_NONE_16X16_210, |
| MODEL_INTER_NONE_16X16_235, |
| MODEL_INTER_NONE_16X32_110, |
| MODEL_INTER_NONE_16X32_135, |
| MODEL_INTER_NONE_16X32_160, |
| MODEL_INTER_NONE_16X32_185, |
| MODEL_INTER_NONE_16X32_210, |
| MODEL_INTER_NONE_16X32_235, |
| MODEL_INTER_NONE_32X16_110, |
| MODEL_INTER_NONE_32X16_135, |
| MODEL_INTER_NONE_32X16_160, |
| MODEL_INTER_NONE_32X16_185, |
| MODEL_INTER_NONE_32X16_210, |
| MODEL_INTER_NONE_32X16_235, |
| MODEL_INTER_NONE_32X32_110, |
| MODEL_INTER_NONE_32X32_135, |
| MODEL_INTER_NONE_32X32_160, |
| MODEL_INTER_NONE_32X32_185, |
| MODEL_INTER_NONE_32X32_210, |
| MODEL_INTER_NONE_32X32_235, |
| MODEL_INTER_NONE_32X64_110, |
| MODEL_INTER_NONE_32X64_135, |
| MODEL_INTER_NONE_32X64_160, |
| MODEL_INTER_NONE_32X64_185, |
| MODEL_INTER_NONE_32X64_210, |
| MODEL_INTER_NONE_32X64_235, |
| MODEL_INTER_NONE_64X32_110, |
| MODEL_INTER_NONE_64X32_135, |
| MODEL_INTER_NONE_64X32_160, |
| MODEL_INTER_NONE_64X32_185, |
| MODEL_INTER_NONE_64X32_210, |
| MODEL_INTER_NONE_64X32_235, |
| MODEL_INTER_NONE_64X64_110, |
| MODEL_INTER_NONE_64X64_135, |
| MODEL_INTER_NONE_64X64_160, |
| MODEL_INTER_NONE_64X64_185, |
| MODEL_INTER_NONE_64X64_210, |
| MODEL_INTER_NONE_64X64_235, |
| MODEL_INTER_NONE_64X128_110, |
| MODEL_INTER_NONE_64X128_135, |
| MODEL_INTER_NONE_64X128_160, |
| MODEL_INTER_NONE_64X128_185, |
| MODEL_INTER_NONE_64X128_210, |
| MODEL_INTER_NONE_64X128_235, |
| MODEL_INTER_NONE_128X64_110, |
| MODEL_INTER_NONE_128X64_135, |
| MODEL_INTER_NONE_128X64_160, |
| MODEL_INTER_NONE_128X64_185, |
| MODEL_INTER_NONE_128X64_210, |
| MODEL_INTER_NONE_128X64_235, |
| MODEL_INTER_NONE_128X128_110, |
| MODEL_INTER_NONE_128X128_135, |
| MODEL_INTER_NONE_128X128_160, |
| MODEL_INTER_NONE_128X128_185, |
| MODEL_INTER_NONE_128X128_210, |
| MODEL_INTER_NONE_128X128_235, |
| MODEL_INTER_NONE_128X256_110, |
| MODEL_INTER_NONE_128X256_135, |
| MODEL_INTER_NONE_128X256_160, |
| MODEL_INTER_NONE_128X256_185, |
| MODEL_INTER_NONE_128X256_210, |
| MODEL_INTER_NONE_128X256_235, |
| MODEL_INTER_NONE_256X128_110, |
| MODEL_INTER_NONE_256X128_135, |
| MODEL_INTER_NONE_256X128_160, |
| MODEL_INTER_NONE_256X128_185, |
| MODEL_INTER_NONE_256X128_210, |
| MODEL_INTER_NONE_256X128_235, |
| MODEL_INTER_NONE_256X256_110, |
| MODEL_INTER_NONE_256X256_135, |
| MODEL_INTER_NONE_256X256_160, |
| MODEL_INTER_NONE_256X256_185, |
| MODEL_INTER_NONE_256X256_210, |
| MODEL_INTER_NONE_256X256_235, |
| MODEL_INTER_NONE_8X32_110, |
| MODEL_INTER_NONE_8X32_135, |
| MODEL_INTER_NONE_8X32_160, |
| MODEL_INTER_NONE_8X32_185, |
| MODEL_INTER_NONE_8X32_210, |
| MODEL_INTER_NONE_8X32_235, |
| MODEL_INTER_NONE_32X8_110, |
| MODEL_INTER_NONE_32X8_135, |
| MODEL_INTER_NONE_32X8_160, |
| MODEL_INTER_NONE_32X8_185, |
| MODEL_INTER_NONE_32X8_210, |
| MODEL_INTER_NONE_32X8_235, |
| MODEL_INTER_NONE_16X64_110, |
| MODEL_INTER_NONE_16X64_135, |
| MODEL_INTER_NONE_16X64_160, |
| MODEL_INTER_NONE_16X64_185, |
| MODEL_INTER_NONE_16X64_210, |
| MODEL_INTER_NONE_16X64_235, |
| MODEL_INTER_NONE_64X16_110, |
| MODEL_INTER_NONE_64X16_135, |
| MODEL_INTER_NONE_64X16_160, |
| MODEL_INTER_NONE_64X16_185, |
| MODEL_INTER_NONE_64X16_210, |
| MODEL_INTER_NONE_64X16_235, |
| MODEL_INTER_NONE_8X64_110, |
| MODEL_INTER_NONE_8X64_135, |
| MODEL_INTER_NONE_8X64_160, |
| MODEL_INTER_NONE_8X64_185, |
| MODEL_INTER_NONE_8X64_210, |
| MODEL_INTER_NONE_8X64_235, |
| MODEL_INTER_NONE_64X8_110, |
| MODEL_INTER_NONE_64X8_135, |
| MODEL_INTER_NONE_64X8_160, |
| MODEL_INTER_NONE_64X8_185, |
| MODEL_INTER_NONE_64X8_210, |
| MODEL_INTER_NONE_64X8_235, |
| MODEL_INTER_SPLIT_64X64, |
| MODEL_INTER_SPLIT_32X32, |
| MODEL_INTER_SPLIT_16X16, |
| MODEL_INTER_SPLIT_8X8, |
| MODEL_COUNT |
| |
| } MODEL_TYPE; |
| |
| enum { |
| FEATURE_INTER_RD_MULT = 0, |
| FEATURE_INTER_FULL_PSNR, |
| FEATURE_INTER_FULL_Q_COEFF_MAX, |
| FEATURE_INTER_FULL_Q_COEFF_NONZ, |
| FEATURE_INTER_SQ_0_PSNR, |
| FEATURE_INTER_SQ_0_Q_COEFF_MAX, |
| FEATURE_INTER_SQ_0_Q_COEFF_NONZ, |
| FEATURE_INTER_SQ_1_PSNR, |
| FEATURE_INTER_SQ_1_Q_COEFF_MAX, |
| FEATURE_INTER_SQ_1_Q_COEFF_NONZ, |
| FEATURE_INTER_SQ_2_PSNR, |
| FEATURE_INTER_SQ_2_Q_COEFF_MAX, |
| FEATURE_INTER_SQ_2_Q_COEFF_NONZ, |
| FEATURE_INTER_SQ_3_PSNR, |
| FEATURE_INTER_SQ_3_Q_COEFF_MAX, |
| FEATURE_INTER_SQ_3_Q_COEFF_NONZ, |
| FEATURE_INTER_FULL_LOG_MAG, |
| FEATURE_INTER_FULL_ANGLE_RAD, |
| FEATURE_INTER_SQ_0_LOG_MAG, |
| FEATURE_INTER_SQ_0_ANGLE_RAD, |
| FEATURE_INTER_SQ_1_LOG_MAG, |
| FEATURE_INTER_SQ_1_ANGLE_RAD, |
| FEATURE_INTER_SQ_2_LOG_MAG, |
| FEATURE_INTER_SQ_2_ANGLE_RAD, |
| FEATURE_INTER_SQ_3_LOG_MAG, |
| FEATURE_INTER_SQ_3_ANGLE_RAD, |
| FEATURE_INTER_FULL_LOG_SATDQ, |
| FEATURE_INTER_SQ_0_LOG_SATDQ, |
| FEATURE_INTER_SQ_1_LOG_SATDQ, |
| FEATURE_INTER_SQ_2_LOG_SATDQ, |
| FEATURE_INTER_SQ_3_LOG_SATDQ, |
| FEATURE_INTER_FULL_LOG_SATD, |
| FEATURE_INTER_SQ_0_LOG_SATD, |
| FEATURE_INTER_SQ_1_LOG_SATD, |
| FEATURE_INTER_SQ_2_LOG_SATD, |
| FEATURE_INTER_SQ_3_LOG_SATD, |
| FEATURE_INTER_HOR_0_PSNR, |
| FEATURE_INTER_HOR_0_Q_COEFF_MAX, |
| FEATURE_INTER_HOR_0_Q_COEFF_NONZ, |
| FEATURE_INTER_HOR_0_LOG_MAG, |
| FEATURE_INTER_HOR_0_ANGLE_RAD, |
| FEATURE_INTER_HOR_0_LOG_SATDQ, |
| FEATURE_INTER_HOR_0_LOG_SATD, |
| FEATURE_INTER_HOR_1_PSNR, |
| FEATURE_INTER_HOR_1_Q_COEFF_MAX, |
| FEATURE_INTER_HOR_1_Q_COEFF_NONZ, |
| FEATURE_INTER_HOR_1_LOG_MAG, |
| FEATURE_INTER_HOR_1_ANGLE_RAD, |
| FEATURE_INTER_HOR_1_LOG_SATDQ, |
| FEATURE_INTER_HOR_1_LOG_SATD, |
| FEATURE_INTER_VER_0_PSNR, |
| FEATURE_INTER_VER_0_Q_COEFF_MAX, |
| FEATURE_INTER_VER_0_Q_COEFF_NONZ, |
| FEATURE_INTER_VER_0_LOG_MAG, |
| FEATURE_INTER_VER_0_ANGLE_RAD, |
| FEATURE_INTER_VER_0_LOG_SATDQ, |
| FEATURE_INTER_VER_0_LOG_SATD, |
| FEATURE_INTER_VER_1_PSNR, |
| FEATURE_INTER_VER_1_Q_COEFF_MAX, |
| FEATURE_INTER_VER_1_Q_COEFF_NONZ, |
| FEATURE_INTER_VER_1_LOG_MAG, |
| FEATURE_INTER_VER_1_ANGLE_RAD, |
| FEATURE_INTER_VER_1_LOG_SATDQ, |
| FEATURE_INTER_VER_1_LOG_SATD, |
| |
| // V1 features |
| // NONE w RECT switch, search_none_after_rect |
| FEATURE_INTER_SWITCH, |
| // partition type: mixed, luma, chroma |
| FEATURE_INTER_PART_T, |
| |
| FEATURE_INTER_MAX |
| }; |
| |
| struct InputSpec { |
| bool valid; |
| double* mean; |
| double* std; |
| double* invstd; |
| }; |
| |
| int av2_part_prune_tflite_exec(void **context, const float *ml_input, |
| float *ml_output, MODEL_TYPE model_type); |
| void av2_part_prune_tflite_close(void **context); |
| int av2_model_input_spec(MODEL_TYPE model_type, struct InputSpec *params); |
| const char *get_model_name(MODEL_TYPE type); |
| int get_model_part_type(MODEL_TYPE type); |
| int get_model_n_features(MODEL_TYPE type); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // AV1_ENCODER_SIMPLE_INTRAPRED_TFLITE_H_ |