/* * Copyright (c) 2021, Alliance for Open Media. All rights reserved. * * This source code is subject to the terms of the BSD 2 Clause License and * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License * was not distributed with this source code in the LICENSE file, you can * obtain it at www.aomedia.org/license/software. 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 www.aomedia.org/license/patent. */ #ifndef AOM_AOM_AOM_EXTERNAL_PARTITION_H_ #define AOM_AOM_AOM_EXTERNAL_PARTITION_H_ /*!\defgroup aom_encoder AOMedia AOM/AV1 Encoder * \ingroup aom * * @{ */ #include <stdint.h> /*!\file * \brief Provides function pointer definitions for the external partition. * * \note The external partition API should be considered experimental. Until the * external partition API is declared stable, breaking changes may be made to * this API in a future libaom release. */ /*!\brief Current ABI version number * * \internal * If this file is altered in any way that changes the ABI, this value * must be bumped. Examples include, but are not limited to, changing * types, removing or reassigning enums, adding/removing/rearranging * fields to structures. */ #define AOM_EXT_PART_ABI_VERSION … #ifdef __cplusplus extern "C" { #endif /*!\brief Abstract external partition model handler */ aom_ext_part_model_t; /*!\brief Number of features to determine whether to skip partition none and * do partition split directly. The same as "FEATURE_SIZE_SMS_SPLIT". */ #define AOM_EXT_PART_SIZE_DIRECT_SPLIT … /*!\brief Number of features to use simple motion search to prune out * rectangular partition in some direction. The same as * "FEATURE_SIZE_SMS_PRUNE_PART". */ #define AOM_EXT_PART_SIZE_PRUNE_PART … /*!\brief Number of features to prune split and rectangular partition * after PARTITION_NONE. */ #define AOM_EXT_PART_SIZE_PRUNE_NONE … /*!\brief Number of features to terminates partition after partition none using * simple_motion_search features and the rate, distortion, and rdcost of * PARTITION_NONE. The same as "FEATURE_SIZE_SMS_TERM_NONE". */ #define AOM_EXT_PART_SIZE_TERM_NONE … /*!\brief Number of features to terminates partition after partition split. */ #define AOM_EXT_PART_SIZE_TERM_SPLIT … /*!\brief Number of features to prune rectangular partition using stats * collected after partition split. */ #define AOM_EXT_PART_SIZE_PRUNE_RECT … /*!\brief Number of features to prune AB partition using stats * collected after rectangular partition.. */ #define AOM_EXT_PART_SIZE_PRUNE_AB … /*!\brief Number of features to prune 4-way partition using stats * collected after AB partition. */ #define AOM_EXT_PART_SIZE_PRUNE_4_WAY … /*!\brief Decision mode of the external partition model. * AOM_EXT_PART_WHOLE_TREE: the external partition model should provide the * whole partition tree for the superblock. * * AOM_EXT_PART_RECURSIVE: the external partition model provides the partition * decision of the current block only. The decision process starts from * the superblock size, down to the smallest block size (4x4) recursively. */ aom_ext_part_decision_mode_t; /*!\brief Config information sent to the external partition model. * * For example, the maximum superblock size determined by the sequence header. */ aom_ext_part_config_t; /*!\brief Features pass to the external model to make partition decisions. * Specifically, features collected before NONE partition. * Features "f" are used to determine: * partition_none_allowed, partition_horz_allowed, partition_vert_allowed, * do_rectangular_split, do_square_split * Features "f_part2" are used to determine: * prune_horz, prune_vert. */ aom_partition_features_before_none_t; /*!\brief Features pass to the external model to make partition decisions. * Specifically, features collected after NONE partition. */ aom_partition_features_none_t; /*!\brief Features pass to the external model to make partition decisions. * Specifically, features collected after SPLIT partition. */ aom_partition_features_split_t; /*!\brief Features pass to the external model to make partition decisions. * Specifically, features collected after RECTANGULAR partition. */ aom_partition_features_rect_t; /*!\brief Features pass to the external model to make partition decisions. * Specifically, features collected after AB partition: HORZ_A, HORZ_B, VERT_A, * VERT_B. */ aom_partition_features_ab_t; /*!\brief Feature id to tell the external model the current stage in partition * pruning and what features to use to make decisions accordingly. */ AOM_EXT_PART_FEATURE_ID; /*!\brief Features collected from the tpl process. * * The tpl process collects information that help measure the inter-frame * dependency. * The tpl process is computed in the unit of tpl_bsize_1d (16x16). * Therefore, the max number of units inside a superblock is * 128x128 / (16x16) = 64. Change it if the tpl process changes. */ aom_sb_tpl_features_t; /*!\brief Features collected from the simple motion process. * * The simple motion process collects information by applying motion compensated * prediction on each block. * The block size is 16x16, which could be changed. If it is changed, update * comments and the array size here. */ aom_sb_simple_motion_features_t; /*!\brief Features of each super block. * * Features collected for each super block before partition search. */ aom_sb_features_t; /*!\brief Features pass to the external model to make partition decisions. * * The encoder sends these features to the external model through * "func()" defined in ..... * * NOTE: new member variables may be added to this structure in the future. * Once new features are finalized, bump the major version of libaom. */ aom_partition_features_t; /*!\brief Partition decisions received from the external model. * * The encoder receives partition decisions and encodes the superblock * with the given partition type. * The encoder receives it from "func()" define in .... * * NOTE: new member variables may be added to this structure in the future. * Once new features are finalized, bump the major version of libaom. */ aom_partition_decision_t; /*!\brief Encoding stats for the given partition decision. * * The encoding stats collected by encoding the superblock with the * given partition types. * The encoder sends the stats to the external model for training * or inference through "func()" defined in .... */ aom_partition_stats_t; /*!\brief Enum for return status. */ aom_ext_part_status_t; /*!\brief Callback of creating an external partition model. * * The callback is invoked by the encoder to create an external partition * model. * * \param[in] priv Callback's private data * \param[in] part_config Config information pointer for model creation * \param[out] ext_part_model Pointer to the model */ aom_ext_part_create_model_fn_t; /*!\brief Callback of sending features to the external partition model. * * The callback is invoked by the encoder to send features to the external * partition model. * * \param[in] ext_part_model The external model * \param[in] part_features Pointer to the features */ aom_ext_part_send_features_fn_t; /*!\brief Callback of receiving partition decisions from the external * partition model. * * The callback is invoked by the encoder to receive partition decisions from * the external partition model. * * \param[in] ext_part_model The external model * \param[in] ext_part_decision Pointer to the partition decisions */ aom_ext_part_get_decision_fn_t; /*!\brief Callback of sending stats to the external partition model. * * The callback is invoked by the encoder to send encoding stats to * the external partition model. * * \param[in] ext_part_model The external model * \param[in] ext_part_stats Pointer to the encoding stats */ aom_ext_part_send_partition_stats_fn_t; /*!\brief Callback of deleting the external partition model. * * The callback is invoked by the encoder to delete the external partition * model. * * \param[in] ext_part_model The external model */ aom_ext_part_delete_model_fn_t; /*!\brief Callback function set for external partition model. * * Uses can enable external partition model by registering a set of * callback functions with the flag: AV1E_SET_EXTERNAL_PARTITION_MODEL */ aom_ext_part_funcs_t; /*!@} - end defgroup aom_encoder*/ #ifdef __cplusplus } // extern "C" #endif #endif // AOM_AOM_AOM_EXTERNAL_PARTITION_H_