blob: bf944c0000839a01e04f93470ea7f24509694073 [file] [log] [blame] [edit]
/*
* 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_64X64_110,
MODEL_INTER_NONE_64X64_135,
MODEL_INTER_NONE_32X32_110,
MODEL_INTER_NONE_32X32_135,
MODEL_INTER_NONE_16X16_110,
MODEL_INTER_NONE_16X16_135,
MODEL_INTER_NONE_BS11_110,
MODEL_INTER_NONE_BS11_135,
MODEL_INTER_NONE_BS10_110,
MODEL_INTER_NONE_BS10_135,
MODEL_INTER_NONE_BS8_110,
MODEL_INTER_NONE_BS8_135,
MODEL_INTER_NONE_BS7_110,
MODEL_INTER_NONE_BS7_135,
MODEL_INTER_NONE_BS5_110,
MODEL_INTER_NONE_BS5_135,
MODEL_INTER_NONE_BS4_110,
MODEL_INTER_NONE_BS4_135,
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
};
enum { PT_INVAL = -1, PT_NONE = 0, PT_SPLIT };
struct InputNorm {
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_norm(MODEL_TYPE model_type, struct InputNorm *norm);
int get_model_part_type(MODEL_TYPE type);
#ifdef __cplusplus
}
#endif
#endif // AV1_ENCODER_SIMPLE_INTRAPRED_TFLITE_H_