Home | History | Annotate | Download | only in aom
      1 /*
      2  * Copyright (c) 2016, Alliance for Open Media. All rights reserved
      3  *
      4  * This source code is subject to the terms of the BSD 2 Clause License and
      5  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
      6  * was not distributed with this source code in the LICENSE file, you can
      7  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
      8  * Media Patent License 1.0 was not distributed with this source code in the
      9  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
     10  */
     11 #ifndef AOM_AOM_AOMCX_H_
     12 #define AOM_AOM_AOMCX_H_
     13 
     14 /*!\defgroup aom_encoder AOMedia AOM/AV1 Encoder
     15  * \ingroup aom
     16  *
     17  * @{
     18  */
     19 #include "aom/aom.h"
     20 #include "aom/aom_encoder.h"
     21 
     22 /*!\file
     23  * \brief Provides definitions for using AOM or AV1 encoder algorithm within the
     24  *        aom Codec Interface.
     25  */
     26 
     27 #ifdef __cplusplus
     28 extern "C" {
     29 #endif
     30 
     31 /*!\name Algorithm interface for AV1
     32  *
     33  * This interface provides the capability to encode raw AV1 streams.
     34  * @{
     35  */
     36 extern aom_codec_iface_t aom_codec_av1_cx_algo;
     37 extern aom_codec_iface_t *aom_codec_av1_cx(void);
     38 /*!@} - end algorithm interface member group*/
     39 
     40 /*
     41  * Algorithm Flags
     42  */
     43 
     44 /*!\brief Don't reference the last frame
     45  *
     46  * When this flag is set, the encoder will not use the last frame as a
     47  * predictor. When not set, the encoder will choose whether to use the
     48  * last frame or not automatically.
     49  */
     50 #define AOM_EFLAG_NO_REF_LAST (1 << 16)
     51 /*!\brief Don't reference the last2 frame
     52  *
     53  * When this flag is set, the encoder will not use the last2 frame as a
     54  * predictor. When not set, the encoder will choose whether to use the
     55  * last2 frame or not automatically.
     56  */
     57 #define AOM_EFLAG_NO_REF_LAST2 (1 << 17)
     58 /*!\brief Don't reference the last3 frame
     59  *
     60  * When this flag is set, the encoder will not use the last3 frame as a
     61  * predictor. When not set, the encoder will choose whether to use the
     62  * last3 frame or not automatically.
     63  */
     64 #define AOM_EFLAG_NO_REF_LAST3 (1 << 18)
     65 /*!\brief Don't reference the golden frame
     66  *
     67  * When this flag is set, the encoder will not use the golden frame as a
     68  * predictor. When not set, the encoder will choose whether to use the
     69  * golden frame or not automatically.
     70  */
     71 #define AOM_EFLAG_NO_REF_GF (1 << 19)
     72 
     73 /*!\brief Don't reference the alternate reference frame
     74  *
     75  * When this flag is set, the encoder will not use the alt ref frame as a
     76  * predictor. When not set, the encoder will choose whether to use the
     77  * alt ref frame or not automatically.
     78  */
     79 #define AOM_EFLAG_NO_REF_ARF (1 << 20)
     80 /*!\brief Don't reference the bwd reference frame
     81  *
     82  * When this flag is set, the encoder will not use the bwd ref frame as a
     83  * predictor. When not set, the encoder will choose whether to use the
     84  * bwd ref frame or not automatically.
     85  */
     86 #define AOM_EFLAG_NO_REF_BWD (1 << 21)
     87 /*!\brief Don't reference the alt2 reference frame
     88  *
     89  * When this flag is set, the encoder will not use the alt2 ref frame as a
     90  * predictor. When not set, the encoder will choose whether to use the
     91  * alt2 ref frame or not automatically.
     92  */
     93 #define AOM_EFLAG_NO_REF_ARF2 (1 << 22)
     94 
     95 /*!\brief Don't update the last frame
     96  *
     97  * When this flag is set, the encoder will not update the last frame with
     98  * the contents of the current frame.
     99  */
    100 #define AOM_EFLAG_NO_UPD_LAST (1 << 23)
    101 
    102 /*!\brief Don't update the golden frame
    103  *
    104  * When this flag is set, the encoder will not update the golden frame with
    105  * the contents of the current frame.
    106  */
    107 #define AOM_EFLAG_NO_UPD_GF (1 << 24)
    108 
    109 /*!\brief Don't update the alternate reference frame
    110  *
    111  * When this flag is set, the encoder will not update the alt ref frame with
    112  * the contents of the current frame.
    113  */
    114 #define AOM_EFLAG_NO_UPD_ARF (1 << 25)
    115 /*!\brief Disable entropy update
    116  *
    117  * When this flag is set, the encoder will not update its internal entropy
    118  * model based on the entropy of this frame.
    119  */
    120 #define AOM_EFLAG_NO_UPD_ENTROPY (1 << 26)
    121 /*!\brief Disable ref frame mvs
    122  *
    123  * When this flag is set, the encoder will not allow frames to
    124  * be encoded using mfmv.
    125  */
    126 #define AOM_EFLAG_NO_REF_FRAME_MVS (1 << 27)
    127 /*!\brief Enable error resilient frame
    128  *
    129  * When this flag is set, the encoder will code frames as error
    130  * resilient.
    131  */
    132 #define AOM_EFLAG_ERROR_RESILIENT (1 << 28)
    133 /*!\brief Enable s frame mode
    134  *
    135  * When this flag is set, the encoder will code frames as an
    136  * s frame.
    137  */
    138 #define AOM_EFLAG_SET_S_FRAME (1 << 29)
    139 /*!\brief Force primary_ref_frame to PRIMARY_REF_NONE
    140  *
    141  * When this flag is set, the encoder will set a frame's primary_ref_frame
    142  * to PRIMARY_REF_NONE
    143  */
    144 #define AOM_EFLAG_SET_PRIMARY_REF_NONE (1 << 30)
    145 
    146 /*!\brief AVx encoder control functions
    147  *
    148  * This set of macros define the control functions available for AVx
    149  * encoder interface.
    150  *
    151  * \sa #aom_codec_control
    152  */
    153 enum aome_enc_control_id {
    154   /*!\brief Codec control function to set which reference frame encoder can use.
    155    */
    156   AOME_USE_REFERENCE = 7,
    157 
    158   /*!\brief Codec control function to pass an ROI map to encoder.
    159    */
    160   AOME_SET_ROI_MAP = 8,
    161 
    162   /*!\brief Codec control function to pass an Active map to encoder.
    163    */
    164   AOME_SET_ACTIVEMAP,
    165 
    166   /*!\brief Codec control function to set encoder scaling mode.
    167    */
    168   AOME_SET_SCALEMODE = 11,
    169 
    170   /*!\brief Codec control function to set encoder spatial layer id.
    171    */
    172   AOME_SET_SPATIAL_LAYER_ID = 12,
    173 
    174   /*!\brief Codec control function to set encoder internal speed settings.
    175    *
    176    * Changes in this value influences, among others, the encoder's selection
    177    * of motion estimation methods. Values greater than 0 will increase encoder
    178    * speed at the expense of quality.
    179    *
    180    * \note Valid range: 0..8
    181    */
    182   AOME_SET_CPUUSED = 13,
    183 
    184   /*!\brief Codec control function to enable automatic set and use alf frames.
    185    */
    186   AOME_SET_ENABLEAUTOALTREF,
    187 
    188   /*!\brief Codec control function to set sharpness.
    189    */
    190   AOME_SET_SHARPNESS = AOME_SET_ENABLEAUTOALTREF + 2,
    191 
    192   /*!\brief Codec control function to set the threshold for MBs treated static.
    193    */
    194   AOME_SET_STATIC_THRESHOLD,
    195 
    196   /*!\brief Codec control function to get last quantizer chosen by the encoder.
    197    *
    198    * Return value uses internal quantizer scale defined by the codec.
    199    */
    200   AOME_GET_LAST_QUANTIZER = AOME_SET_STATIC_THRESHOLD + 2,
    201 
    202   /*!\brief Codec control function to get last quantizer chosen by the encoder.
    203    *
    204    * Return value uses the 0..63 scale as used by the rc_*_quantizer config
    205    * parameters.
    206    */
    207   AOME_GET_LAST_QUANTIZER_64,
    208 
    209   /*!\brief Codec control function to set the max no of frames to create arf.
    210    */
    211   AOME_SET_ARNR_MAXFRAMES,
    212 
    213   /*!\brief Codec control function to set the filter strength for the arf.
    214    */
    215   AOME_SET_ARNR_STRENGTH,
    216 
    217   /*!\brief Codec control function to set visual tuning.
    218    */
    219   AOME_SET_TUNING = AOME_SET_ARNR_STRENGTH + 2,
    220 
    221   /*!\brief Codec control function to set constrained quality level.
    222    *
    223    * \attention For this value to be used aom_codec_enc_cfg_t::g_usage must be
    224    *            set to #AOM_CQ.
    225    * \note Valid range: 0..63
    226    */
    227   AOME_SET_CQ_LEVEL,
    228 
    229   /*!\brief Codec control function to set Max data rate for Intra frames.
    230    *
    231    * This value controls additional clamping on the maximum size of a
    232    * keyframe. It is expressed as a percentage of the average
    233    * per-frame bitrate, with the special (and default) value 0 meaning
    234    * unlimited, or no additional clamping beyond the codec's built-in
    235    * algorithm.
    236    *
    237    * For example, to allocate no more than 4.5 frames worth of bitrate
    238    * to a keyframe, set this to 450.
    239    */
    240   AOME_SET_MAX_INTRA_BITRATE_PCT,
    241 
    242   /*!\brief Codec control function to set number of spatial layers.
    243    */
    244   AOME_SET_NUMBER_SPATIAL_LAYERS,
    245 
    246   /*!\brief Codec control function to set max data rate for Inter frames.
    247    *
    248    * This value controls additional clamping on the maximum size of an
    249    * inter frame. It is expressed as a percentage of the average
    250    * per-frame bitrate, with the special (and default) value 0 meaning
    251    * unlimited, or no additional clamping beyond the codec's built-in
    252    * algorithm.
    253    *
    254    * For example, to allow no more than 4.5 frames worth of bitrate
    255    * to an inter frame, set this to 450.
    256    */
    257   AV1E_SET_MAX_INTER_BITRATE_PCT = AOME_SET_MAX_INTRA_BITRATE_PCT + 2,
    258 
    259   /*!\brief Boost percentage for Golden Frame in CBR mode.
    260    *
    261    * This value controls the amount of boost given to Golden Frame in
    262    * CBR mode. It is expressed as a percentage of the average
    263    * per-frame bitrate, with the special (and default) value 0 meaning
    264    * the feature is off, i.e., no golden frame boost in CBR mode and
    265    * average bitrate target is used.
    266    *
    267    * For example, to allow 100% more bits, i.e, 2X, in a golden frame
    268    * than average frame, set this to 100.
    269    */
    270   AV1E_SET_GF_CBR_BOOST_PCT,
    271 
    272   /*!\brief Codec control function to set lossless encoding mode.
    273    *
    274    * AV1 can operate in lossless encoding mode, in which the bitstream
    275    * produced will be able to decode and reconstruct a perfect copy of
    276    * input source. This control function provides a mean to switch encoder
    277    * into lossless coding mode(1) or normal coding mode(0) that may be lossy.
    278    *                          0 = lossy coding mode
    279    *                          1 = lossless coding mode
    280    *
    281    *  By default, encoder operates in normal coding mode (maybe lossy).
    282    */
    283   AV1E_SET_LOSSLESS = AV1E_SET_GF_CBR_BOOST_PCT + 2,
    284 
    285   /** control function to enable the row based multi-threading of encoder. A
    286    * value that is equal to 1 indicates that row based multi-threading is
    287    * enabled.
    288    */
    289   AV1E_SET_ROW_MT,
    290 
    291   /*!\brief Codec control function to set number of tile columns.
    292    *
    293    * In encoding and decoding, AV1 allows an input image frame be partitioned
    294    * into separate vertical tile columns, which can be encoded or decoded
    295    * independently. This enables easy implementation of parallel encoding and
    296    * decoding. The parameter for this control describes the number of tile
    297    * columns (in log2 units), which has a valid range of [0, 6]:
    298    *             0 = 1 tile column
    299    *             1 = 2 tile columns
    300    *             2 = 4 tile columns
    301    *             .....
    302    *             n = 2**n tile columns
    303    *
    304    * By default, the value is 0, i.e. one single column tile for entire image.
    305    */
    306   AV1E_SET_TILE_COLUMNS,
    307 
    308   /*!\brief Codec control function to set number of tile rows.
    309    *
    310    * In encoding and decoding, AV1 allows an input image frame be partitioned
    311    * into separate horizontal tile rows, which can be encoded or decoded
    312    * independently. The parameter for this control describes the number of tile
    313    * rows (in log2 units), which has a valid range of [0, 6]:
    314    *            0 = 1 tile row
    315    *            1 = 2 tile rows
    316    *            2 = 4 tile rows
    317    *            .....
    318    *            n = 2**n tile rows
    319    *
    320    * By default, the value is 0, i.e. one single row tile for entire image.
    321    */
    322   AV1E_SET_TILE_ROWS,
    323 
    324   /*!\brief Codec control function to enable RDO modulated by frame temporal
    325    * dependency.
    326    *
    327    * By default, this feature is off.
    328    */
    329   AV1E_SET_ENABLE_TPL_MODEL,
    330 
    331   /*!\brief Codec control function to enable frame parallel decoding feature.
    332    *
    333    * AV1 has a bitstream feature to reduce decoding dependency between frames
    334    * by turning off backward update of probability context used in encoding
    335    * and decoding. This allows staged parallel processing of more than one
    336    * video frames in the decoder. This control function provides a mean to
    337    * turn this feature on or off for bitstreams produced by encoder.
    338    *
    339    * By default, this feature is off.
    340    */
    341   AV1E_SET_FRAME_PARALLEL_DECODING,
    342 
    343   /*!\brief Codec control function to enable error_resilient_mode
    344    *
    345    * AV1 has a bitstream feature to guarantee parseability of a frame
    346    * by turning on the error_resilient_decoding mode, even though the
    347    * reference buffers are unreliable or not received.
    348    *
    349    * By default, this feature is off.
    350    */
    351   AV1E_SET_ERROR_RESILIENT_MODE,
    352 
    353   /*!\brief Codec control function to enable s_frame_mode
    354    *
    355    * AV1 has a bitstream feature to designate certain frames as S-frames,
    356    * from where we can switch to a different stream,
    357    * even though the reference buffers may not be exactly identical.
    358    *
    359    * By default, this feature is off.
    360    */
    361   AV1E_SET_S_FRAME_MODE,
    362 
    363   /*!\brief Codec control function to set adaptive quantization mode.
    364    *
    365    * AV1 has a segment based feature that allows encoder to adaptively change
    366    * quantization parameter for each segment within a frame to improve the
    367    * subjective quality. This control makes encoder operate in one of the
    368    * several AQ_modes supported.
    369    *
    370    * By default, encoder operates with AQ_Mode 0(adaptive quantization off).
    371    */
    372   AV1E_SET_AQ_MODE,
    373 
    374   /*!\brief Codec control function to enable/disable periodic Q boost.
    375    *
    376    * One AV1 encoder speed feature is to enable quality boost by lowering
    377    * frame level Q periodically. This control function provides a mean to
    378    * turn on/off this feature.
    379    *               0 = off
    380    *               1 = on
    381    *
    382    * By default, the encoder is allowed to use this feature for appropriate
    383    * encoding modes.
    384    */
    385   AV1E_SET_FRAME_PERIODIC_BOOST,
    386 
    387   /*!\brief Codec control function to set noise sensitivity.
    388    *
    389    *  0: off, 1: On(YOnly)
    390    */
    391   AV1E_SET_NOISE_SENSITIVITY,
    392 
    393   /*!\brief Codec control function to set content type.
    394    * \note Valid parameter range:
    395    *              AOM_CONTENT_DEFAULT = Regular video content (Default)
    396    *              AOM_CONTENT_SCREEN  = Screen capture content
    397    */
    398   AV1E_SET_TUNE_CONTENT,
    399 
    400   /*!\brief Codec control function to set CDF update mode.
    401    *
    402    *  0: no update          1: update on every frame
    403    *  2: selectively update
    404    */
    405   AV1E_SET_CDF_UPDATE_MODE,
    406 
    407   /*!\brief Codec control function to set color space info.
    408    * \note Valid ranges: 0..23, default is "Unspecified".
    409    *                     0 = For future use
    410    *                     1 = BT.709
    411    *                     2 = Unspecified
    412    *                     3 = For future use
    413    *                     4 = BT.470 System M (historical)
    414    *                     5 = BT.470 System B, G (historical)
    415    *                     6 = BT.601
    416    *                     7 = SMPTE 240
    417    *                     8 = Generic film (color filters using illuminant C)
    418    *                     9 = BT.2020, BT.2100
    419    *                     10 = SMPTE 428 (CIE 1921 XYZ)
    420    *                     11 = SMPTE RP 431-2
    421    *                     12 = SMPTE EG 432-1
    422    *                     13 = For future use (values 13 - 21)
    423    *                     22 = EBU Tech. 3213-E
    424    *                     23 = For future use
    425    *
    426    */
    427   AV1E_SET_COLOR_PRIMARIES,
    428 
    429   /*!\brief Codec control function to set transfer function info.
    430    * \note Valid ranges: 0..19, default is "Unspecified".
    431    *                     0 = For future use
    432    *                     1 = BT.709
    433    *                     2 = Unspecified
    434    *                     3 = For future use
    435    *                     4 = BT.470 System M (historical)
    436    *                     5 = BT.470 System B, G (historical)
    437    *                     6 = BT.601
    438    *                     7 = SMPTE 240 M
    439    *                     8 = Linear
    440    *                     9 = Logarithmic (100 : 1 range)
    441    *                     10 = Logarithmic (100 * Sqrt(10) : 1 range)
    442    *                     11 = IEC 61966-2-4
    443    *                     12 = BT.1361
    444    *                     13 = sRGB or sYCC
    445    *                     14 = BT.2020 10-bit systems
    446    *                     15 = BT.2020 12-bit systems
    447    *                     16 = SMPTE ST 2084, ITU BT.2100 PQ
    448    *                     17 = SMPTE ST 428
    449    *                     18 = BT.2100 HLG, ARIB STD-B67
    450    *                     19 = For future use
    451    *
    452    */
    453   AV1E_SET_TRANSFER_CHARACTERISTICS,
    454 
    455   /*!\brief Codec control function to set transfer function info.
    456    * \note Valid ranges: 0..15, default is "Unspecified".
    457    *                     0 = Identity matrix
    458    *                     1 = BT.709
    459    *                     2 = Unspecified
    460    *                     3 = For future use
    461    *                     4 = US FCC 73.628
    462    *                     5 = BT.470 System B, G (historical)
    463    *                     6 = BT.601
    464    *                     7 = SMPTE 240 M
    465    *                     8 = YCgCo
    466    *                     9 = BT.2020 non-constant luminance, BT.2100 YCbCr
    467    *                     10 = BT.2020 constant luminance
    468    *                     11 = SMPTE ST 2085 YDzDx
    469    *                     12 = Chromaticity-derived non-constant luminance
    470    *                     13 = Chromaticity-derived constant luminance
    471    *                     14 = BT.2100 ICtCp
    472    *                     15 = For future use
    473    *
    474    */
    475   AV1E_SET_MATRIX_COEFFICIENTS,
    476 
    477   /*!\brief Codec control function to set chroma 4:2:0 sample position info.
    478    * \note Valid ranges: 0..3, default is "UNKNOWN".
    479    *                     0 = UNKNOWN,
    480    *                     1 = VERTICAL
    481    *                     2 = COLOCATED
    482    *                     3 = RESERVED
    483    */
    484   AV1E_SET_CHROMA_SAMPLE_POSITION,
    485 
    486   /*!\brief Codec control function to set minimum interval between GF/ARF frames
    487    *
    488    * By default the value is set as 4.
    489    */
    490   AV1E_SET_MIN_GF_INTERVAL,
    491 
    492   /*!\brief Codec control function to set minimum interval between GF/ARF frames
    493    *
    494    * By default the value is set as 16.
    495    */
    496   AV1E_SET_MAX_GF_INTERVAL,
    497 
    498   /*!\brief Codec control function to get an Active map back from the encoder.
    499    */
    500   AV1E_GET_ACTIVEMAP,
    501 
    502   /*!\brief Codec control function to set color range bit.
    503    * \note Valid ranges: 0..1, default is 0
    504    *                     0 = Limited range (16..235 or HBD equivalent)
    505    *                     1 = Full range (0..255 or HBD equivalent)
    506    */
    507   AV1E_SET_COLOR_RANGE,
    508 
    509   /*!\brief Codec control function to set intended rendering image size.
    510    *
    511    * By default, this is identical to the image size in pixels.
    512    */
    513   AV1E_SET_RENDER_SIZE,
    514 
    515   /*!\brief Control to set target sequence level index for a certain operating
    516    * point(OP).
    517    * Possible values are in the form of "ABxy"(pad leading zeros if less than
    518    * 4 digits).
    519    *   AB: OP index.
    520    *   xy: Target level index for the OP. Can be values 0~23(corresponding to
    521    *   level 2.0 ~ 7.3) or 31(maximum level parameter, no level-based
    522    *   constraints).
    523    * E.g. "0" means target level index 0 for the 0th OP;
    524    *      "111" means target level index 11 for the 1st OP;
    525    *      "1021" means target level index 21 for the 10th OP.
    526    * If the target level is not specified for an OP, the maximum level parameter
    527    * of 31 is used as default.
    528    */
    529   AV1E_SET_TARGET_SEQ_LEVEL_IDX,
    530 
    531   /*!\brief Codec control function to get sequence level index.
    532    */
    533   AV1E_GET_SEQ_LEVEL_IDX,
    534 
    535   /*!\brief Codec control function to set intended superblock size.
    536    *
    537    * By default, the superblock size is determined separately for each
    538    * frame by the encoder.
    539    *
    540    * Experiment: EXT_PARTITION
    541    */
    542   AV1E_SET_SUPERBLOCK_SIZE,
    543 
    544   /*!\brief Codec control function to enable automatic set and use
    545    * bwd-pred frames.
    546    *
    547    */
    548   AOME_SET_ENABLEAUTOBWDREF,
    549 
    550   /*!\brief Codec control function to encode with CDEF.
    551    *
    552    * CDEF is the constrained directional enhancement filter which is an
    553    * in-loop filter aiming to remove coding artifacts
    554    *                          0 = do not apply CDEF
    555    *                          1 = apply CDEF
    556    *
    557    *  By default, the encoder applies CDEF.
    558    *
    559    * Experiment: AOM_CDEF
    560    */
    561   AV1E_SET_ENABLE_CDEF,
    562 
    563   /*!\brief Codec control function to encode with Loop Restoration Filter.
    564    *
    565    *                          0 = do not apply Restoration Filter
    566    *                          1 = apply Restoration Filter
    567    *
    568    *  By default, the encoder applies Restoration Filter.
    569    *
    570    */
    571   AV1E_SET_ENABLE_RESTORATION,
    572 
    573   /*!\brief Codec control function to predict with OBMC mode.
    574    *
    575    *                          0 = do not allow OBMC mode
    576    *                          1 = allow OBMC mode
    577    *
    578    *  By default, the encoder allows OBMC prediction mode.
    579    *
    580    */
    581   AV1E_SET_ENABLE_OBMC,
    582 
    583   /*!\brief Codec control function to encode without trellis quantization.
    584    *
    585    *                          0 = apply trellis quantization
    586    *                          1 = do not apply trellis quantization
    587    *                          2 = disable trellis quantization partially
    588    *
    589    *  By default, the encoder applies optimization on quantized
    590    *  coefficients.
    591    *
    592    */
    593   AV1E_SET_DISABLE_TRELLIS_QUANT,
    594 
    595   /*!\brief Codec control function to encode with quantisation matrices.
    596    *
    597    * AOM can operate with default quantisation matrices dependent on
    598    * quantisation level and block type.
    599    *                          0 = do not use quantisation matrices
    600    *                          1 = use quantisation matrices
    601    *
    602    *  By default, the encoder operates without quantisation matrices.
    603    *
    604    * Experiment: AOM_QM
    605    */
    606 
    607   AV1E_SET_ENABLE_QM,
    608 
    609   /*!\brief Codec control function to set the min quant matrix flatness.
    610    *
    611    * AOM can operate with different ranges of quantisation matrices.
    612    * As quantisation levels increase, the matrices get flatter. This
    613    * control sets the minimum level of flatness from which the matrices
    614    * are determined.
    615    *
    616    *  By default, the encoder sets this minimum at half the available
    617    *  range.
    618    *
    619    * Experiment: AOM_QM
    620    */
    621   AV1E_SET_QM_MIN,
    622 
    623   /*!\brief Codec control function to set the max quant matrix flatness.
    624    *
    625    * AOM can operate with different ranges of quantisation matrices.
    626    * As quantisation levels increase, the matrices get flatter. This
    627    * control sets the maximum level of flatness possible.
    628    *
    629    * By default, the encoder sets this maximum at the top of the
    630    * available range.
    631    *
    632    * Experiment: AOM_QM
    633    */
    634   AV1E_SET_QM_MAX,
    635 
    636   /*!\brief Codec control function to set the min quant matrix flatness.
    637    *
    638    * AOM can operate with different ranges of quantisation matrices.
    639    * As quantisation levels increase, the matrices get flatter. This
    640    * control sets the flatness for luma (Y).
    641    *
    642    *  By default, the encoder sets this minimum at half the available
    643    *  range.
    644    *
    645    * Experiment: AOM_QM
    646    */
    647   AV1E_SET_QM_Y,
    648 
    649   /*!\brief Codec control function to set the min quant matrix flatness.
    650    *
    651    * AOM can operate with different ranges of quantisation matrices.
    652    * As quantisation levels increase, the matrices get flatter. This
    653    * control sets the flatness for chroma (U).
    654    *
    655    *  By default, the encoder sets this minimum at half the available
    656    *  range.
    657    *
    658    * Experiment: AOM_QM
    659    */
    660   AV1E_SET_QM_U,
    661 
    662   /*!\brief Codec control function to set the min quant matrix flatness.
    663    *
    664    * AOM can operate with different ranges of quantisation matrices.
    665    * As quantisation levels increase, the matrices get flatter. This
    666    * control sets the flatness for chrome (V).
    667    *
    668    *  By default, the encoder sets this minimum at half the available
    669    *  range.
    670    *
    671    * Experiment: AOM_QM
    672    */
    673   AV1E_SET_QM_V,
    674 
    675   /*!\brief Codec control function to encode with dist_8x8.
    676    *
    677    *  The dist_8x8 is enabled automatically for model tuning parameters that
    678    *  require measuring distortion at the 8x8 level. This control also allows
    679    *  measuring distortion at the 8x8 level for other tuning options
    680    *  (e.g., PSNR), for testing purposes.
    681    *                          0 = do not use dist_8x8
    682    *                          1 = use dist_8x8
    683    *
    684    *  By default, the encoder does not use dist_8x8
    685    *
    686    * Experiment: DIST_8X8
    687    */
    688   AV1E_SET_ENABLE_DIST_8X8,
    689 
    690   /*!\brief Codec control function to set a maximum number of tile groups.
    691    *
    692    * This will set the maximum number of tile groups. This will be
    693    * overridden if an MTU size is set. The default value is 1.
    694    *
    695    * Experiment: TILE_GROUPS
    696    */
    697   AV1E_SET_NUM_TG,
    698 
    699   /*!\brief Codec control function to set an MTU size for a tile group.
    700    *
    701    * This will set the maximum number of bytes in a tile group. This can be
    702    * exceeded only if a single tile is larger than this amount.
    703    *
    704    * By default, the value is 0, in which case a fixed number of tile groups
    705    * is used.
    706    *
    707    * Experiment: TILE_GROUPS
    708    */
    709   AV1E_SET_MTU,
    710 
    711   /*!\brief Codec control function to set the number of symbols in an ANS data
    712    * window.
    713    *
    714    * The number of ANS symbols (both boolean and non-booleans alphabets) in an
    715    * ANS data window is set to 1 << value.
    716    *
    717    * \note Valid range: [8, 23]
    718    *
    719    * Experiment: ANS
    720    */
    721   AV1E_SET_ANS_WINDOW_SIZE_LOG2,
    722 
    723   /*!\brief Codec control function to enable/disable rectangular partitions.
    724    *
    725    * This will enable or disable usage of rectangular partitions. The default
    726    * value is 1.
    727    *
    728    */
    729   AV1E_SET_ENABLE_RECT_PARTITIONS,
    730 
    731   /*!\brief Codec control function to enable/disable AB partitions.
    732    *
    733    * This will enable or disable usage of AB partitions. The default
    734    * value is 1.
    735    *
    736    */
    737   AV1E_SET_ENABLE_AB_PARTITIONS,
    738 
    739   /*!\brief Codec control function to enable/disable 1:4 and 4:1 partitions.
    740    *
    741    * This will enable or disable usage of 1:4 and 4:1 partitions. The default
    742    * value is 1.
    743    *
    744    */
    745   AV1E_SET_ENABLE_1TO4_PARTITIONS,
    746 
    747   /*!\brief Codec control function to set min partition size.
    748    *
    749    * This will set min partition size. The default value is 4 for 4x4.
    750    * valid values are [4, 8, 16, 32, 64, 128]
    751    * min_partition_size is applied to both width and height of the partition.
    752    * i.e, both width and height of a partition can not be smaller than
    753    * the min_partition_size, except the partition at the picture boundary.
    754    *
    755    */
    756   AV1E_SET_MIN_PARTITION_SIZE,
    757 
    758   /*!\brief Codec control function to set max partition size.
    759    *
    760    * This will set max partition size. The default value is 128 for 128x128.
    761    * valid values are [4, 8, 16, 32, 64, 128]
    762    * max_partition_size is applied to both width and height of the partition.
    763    * i.e, both width and height of a partition can not be larger than
    764    * the max_partition_size.
    765    */
    766   AV1E_SET_MAX_PARTITION_SIZE,
    767 
    768   /*!\brief Codec control function to turn on / off intra edge filter
    769    * at sequence level.
    770    *
    771    * This will enable or disable usage of intra-edge filtering. The default
    772    * value is 1.
    773    *
    774    */
    775   AV1E_SET_ENABLE_INTRA_EDGE_FILTER,
    776 
    777   /*!\brief Codec control function to turn on / off frame order hint for a
    778    * few tools:
    779    *
    780    * joint compound mode
    781    * motion field motion vector
    782    * ref frame sign bias
    783    *
    784    * The default value is 1.
    785    *
    786    */
    787   AV1E_SET_ENABLE_ORDER_HINT,
    788 
    789   /*!\brief Codec control function to turn on / off 64-length transforms.
    790    *
    791    * This will enable or disable usage of length 64 transforms in any
    792    * direction. The default value is 1.
    793    *
    794    */
    795   AV1E_SET_ENABLE_TX64,
    796 
    797   /*!\brief Codec control function to turn on / off flip and identity
    798    * transforms.
    799    *
    800    * This will enable or disable usage of flip and identity transform
    801    * types in any direction. The default value is 1. Including:
    802    * FLIPADST_DCT, DCT_FLIPADST, FLIPADST_FLIPADST, ADST_FLIPADST,
    803    * FLIPADST_ADST, IDTX, V_DCT, H_DCT, V_ADST, H_ADST, V_FLIPADST,
    804    * H_FLIPADST
    805    */
    806   AV1E_SET_ENABLE_FLIP_IDTX,
    807 
    808   /*!\brief Codec control function to set transform block size search method.
    809    *
    810    * This will set the transform block size search method.
    811    * 0: use Full RD search, 1: use Fast RD search, 2: always use largest
    812    * allowed transform block size based on partition size.
    813    */
    814   AV1E_SET_TX_SIZE_SEARCH_METHOD,
    815 
    816   /*!\brief Codec control function to turn on / off dist-wtd compound mode
    817    * at sequence level.
    818    *
    819    * This will enable or disable distance-weighted compound mode. The default
    820    * value is 1. If AV1E_SET_ENABLE_ORDER_HINT is 0, then this flag is forced
    821    * to 0.
    822    *
    823    */
    824   AV1E_SET_ENABLE_DIST_WTD_COMP,
    825 
    826   /*!\brief Codec control function to turn on / off ref frame mvs (mfmv) usage
    827    * at sequence level.
    828    *
    829    * This will enable or disable usage of MFMV. The default value is 1.
    830    * If AV1E_SET_ENABLE_ORDER_HINT is 0, then this flag is forced to 0.
    831    *
    832    */
    833   AV1E_SET_ENABLE_REF_FRAME_MVS,
    834 
    835   /*!\brief Codec control function to set temporal mv prediction
    836    * enabling/disabling at frame level.
    837    *
    838    * This will enable or disable temporal mv predicton. The default value is 1.
    839    * If AV1E_SET_ENABLE_REF_FRAME_MVS is 0, then this flag is forced to 0.
    840    *
    841    */
    842   AV1E_SET_ALLOW_REF_FRAME_MVS,
    843 
    844   /*!\brief Codec control function to turn on / off dual filter usage
    845    * for a sequence.
    846    *
    847    * This will enable or disable use of dual interpolation filter.
    848    * The default value is 1.
    849    *
    850    */
    851   AV1E_SET_ENABLE_DUAL_FILTER,
    852 
    853   /*!\brief Codec control function to turn on / off masked compound usage
    854    * for a sequence.
    855    *
    856    * This will enable or disable usage of wedge and diff-wtd compound
    857    * modes. The default value is 1.
    858    *
    859    */
    860   AV1E_SET_ENABLE_MASKED_COMP,
    861 
    862   /*!\brief Codec control function to turn on / off one sided compound usage
    863    * for a sequence.
    864    *
    865    * This will enable or disable usage of one sided compound
    866    * modes. The default value is 1.
    867    *
    868    */
    869   AV1E_SET_ENABLE_ONESIDED_COMP,
    870 
    871   /*!\brief Codec control function to turn on / off interintra compound
    872    * for a sequence.
    873    *
    874    * This will enable or disable usage of inter-intra compound modes.
    875    * The default value is 1.
    876    *
    877    */
    878   AV1E_SET_ENABLE_INTERINTRA_COMP,
    879 
    880   /*!\brief Codec control function to turn on / off smooth inter-intra
    881    * mode for a sequence.
    882    *
    883    * This will enable or disable usage of smooth inter-intra mode.
    884    * The default value is 1.
    885    *
    886    */
    887   AV1E_SET_ENABLE_SMOOTH_INTERINTRA,
    888 
    889   /*!\brief Codec control function to turn on / off difference weighted
    890    * compound.
    891    *
    892    * This will enable or disable usage of difference weighted compound.
    893    * The default value is 1.
    894    *
    895    */
    896   AV1E_SET_ENABLE_DIFF_WTD_COMP,
    897 
    898   /*!\brief Codec control function to turn on / off interinter wedge
    899    * compound.
    900    *
    901    * This will enable or disable usage of interinter wedge compound.
    902    * The default value is 1.
    903    *
    904    */
    905   AV1E_SET_ENABLE_INTERINTER_WEDGE,
    906 
    907   /*!\brief Codec control function to turn on / off interintra wedge
    908    * compound.
    909    *
    910    * This will enable or disable usage of interintra wedge compound.
    911    * The default value is 1.
    912    *
    913    */
    914   AV1E_SET_ENABLE_INTERINTRA_WEDGE,
    915 
    916   /*!\brief Codec control function to turn on / off global motion usage
    917    * for a sequence.
    918    *
    919    * This will enable or disable usage of global motion. The default value is 1.
    920    *
    921    */
    922   AV1E_SET_ENABLE_GLOBAL_MOTION,
    923 
    924   /*!\brief Codec control function to turn on / off warped motion usage
    925    * at sequence level.
    926    *
    927    * This will enable or disable usage of warped motion. The default value is 1.
    928    *
    929    */
    930   AV1E_SET_ENABLE_WARPED_MOTION,
    931 
    932   /*!\brief Codec control function to turn on / off warped motion usage
    933    * at frame level.
    934    *
    935    * This will enable or disable usage of warped motion. The default value is 1.
    936    * If AV1E_SET_ENABLE_WARPED_MOTION is 0, then this flag is forced to 0.
    937    *
    938    */
    939   AV1E_SET_ALLOW_WARPED_MOTION,
    940 
    941   /*!\brief Codec control function to turn on / off filter intra usage at
    942    * sequence level.
    943    *
    944    * This will enable or disable usage of filter intra. The default value is 1.
    945    * If AV1E_SET_ENABLE_FILTER_INTRA is 0, then this flag is forced to 0.
    946    *
    947    */
    948   AV1E_SET_ENABLE_FILTER_INTRA,
    949 
    950   /*!\brief Codec control function to turn on / off smooth intra modes usage.
    951    *
    952    * This will enable or disable usage of smooth, smooth_h and smooth_v intra
    953    * modes. The default value is 1.
    954    *
    955    */
    956   AV1E_SET_ENABLE_SMOOTH_INTRA,
    957 
    958   /*!\brief Codec control function to turn on / off Paeth intra mode usage.
    959    *
    960    * This will enable or disable usage of Paeth intra mode. The default value
    961    * is 1.
    962    *
    963    */
    964   AV1E_SET_ENABLE_PAETH_INTRA,
    965 
    966   /*!\brief Codec control function to turn on / off CFL uv intra mode usage.
    967    *
    968    * This will enable or disable usage of chroma-from-luma intra mode. The
    969    * default value is 1.
    970    *
    971    */
    972   AV1E_SET_ENABLE_CFL_INTRA,
    973 
    974   /*!\brief Codec control function to turn on / off frame superresolution.
    975    *
    976    * This will enable or disable frame superresolution. The default value is 1
    977    * If AV1E_SET_ENABLE_SUPERRES is 0, then this flag is forced to 0.
    978    */
    979   AV1E_SET_ENABLE_SUPERRES,
    980 
    981   /*!\brief Codec control function to turn on/off palette mode */
    982   AV1E_SET_ENABLE_PALETTE,
    983 
    984   /*!\brief Codec control function to turn on/off intra block copy mode */
    985   AV1E_SET_ENABLE_INTRABC,
    986 
    987   /*!\brief Codec control function to turn on/off intra angle delta */
    988   AV1E_SET_ENABLE_ANGLE_DELTA,
    989 
    990   /*!\brief Codec control function to set the delta q mode
    991    *
    992    * AV1 has a segment based feature that allows encoder to adaptively change
    993    * quantization parameter for each segment within a frame to improve the
    994    * subjective quality. the delta q mode is added on top of segment based
    995    * feature, and allows control per 64x64 q and lf delta.This control makes
    996    * encoder operate in one of the several DELTA_Q_modes supported.
    997    *
    998    * By default, encoder operates with DELTAQ_Mode 0(deltaq signaling off).
    999    */
   1000   AV1E_SET_DELTAQ_MODE,
   1001 
   1002   /*!\brief Codec control function to set the single tile decoding mode to 0 or
   1003    * 1.
   1004    *
   1005    * 0 means that the single tile decoding is off, and 1 means that the single
   1006    * tile decoding is on.
   1007    *
   1008    * Experiment: EXT_TILE
   1009    */
   1010   AV1E_SET_SINGLE_TILE_DECODING,
   1011 
   1012   /*!\brief Codec control function to enable the extreme motion vector unit test
   1013    * in AV1. Please note that this is only used in motion vector unit test.
   1014    *
   1015    * 0 : off, 1 : MAX_EXTREME_MV, 2 : MIN_EXTREME_MV
   1016    */
   1017   AV1E_ENABLE_MOTION_VECTOR_UNIT_TEST,
   1018 
   1019   /*!\brief Codec control function to signal picture timing info in the
   1020    * bitstream. \note Valid ranges: 0..1, default is "UNKNOWN". 0 = UNKNOWN, 1 =
   1021    * EQUAL
   1022    */
   1023   AV1E_SET_TIMING_INFO_TYPE,
   1024 
   1025   /*!\brief Codec control function to add film grain parameters (one of several
   1026    * preset types) info in the bitstream.
   1027    * \note Valid ranges: 0..11, default is "0". 0 = UNKNOWN,
   1028    * 1..16 = different test vectors for grain
   1029    */
   1030   AV1E_SET_FILM_GRAIN_TEST_VECTOR,
   1031 
   1032   /*!\brief Codec control function to set the path to the film grain parameters
   1033    */
   1034   AV1E_SET_FILM_GRAIN_TABLE,
   1035 
   1036   /*!\brief Sets the noise level */
   1037   AV1E_SET_DENOISE_NOISE_LEVEL,
   1038 
   1039   /*!\brief Sets the denoisers block size */
   1040   AV1E_SET_DENOISE_BLOCK_SIZE,
   1041 
   1042   /*!\brief Sets the chroma subsampling x value */
   1043   AV1E_SET_CHROMA_SUBSAMPLING_X,
   1044 
   1045   /*!\brief Sets the chroma subsampling y value */
   1046   AV1E_SET_CHROMA_SUBSAMPLING_Y,
   1047 
   1048   /*!\brief Control to use a reduced tx type set */
   1049   AV1E_SET_REDUCED_TX_TYPE_SET,
   1050 
   1051   /*!\brief Control to use dct only for intra modes */
   1052   AV1E_SET_INTRA_DCT_ONLY,
   1053 
   1054   /*!\brief Control to use dct only for inter modes */
   1055   AV1E_SET_INTER_DCT_ONLY,
   1056 
   1057   /*!\brief Control to use default tx type only for intra modes */
   1058   AV1E_SET_INTRA_DEFAULT_TX_ONLY,
   1059 
   1060   /*!\brief Control to use adaptive quantize_b */
   1061   AV1E_SET_QUANT_B_ADAPT,
   1062 
   1063   /*!\brief Control to select maximum height for the GF group pyramid structure
   1064    * (valid values: 0 - 4) */
   1065   AV1E_SET_GF_MAX_PYRAMID_HEIGHT,
   1066 
   1067   /*!\brief Control to select maximum reference frames allowed per frame
   1068    * (valid values: 3 - 7) */
   1069   AV1E_SET_MAX_REFERENCE_FRAMES,
   1070 
   1071   /*!\brief Control to use reduced set of single and compound references. */
   1072   AV1E_SET_REDUCED_REFERENCE_SET,
   1073 
   1074   /*!\brief Control to set frequency of the cost updates for coefficients
   1075    * Possible values are:
   1076    * 0: Update at SB level (default)
   1077    * 1: Update at SB row level in tile
   1078    * 2: Update at tile level
   1079    */
   1080   AV1E_SET_COEFF_COST_UPD_FREQ,
   1081 
   1082   /*!\brief Control to set frequency of the cost updates for mode
   1083    * Possible values are:
   1084    * 0: Update at SB level (default)
   1085    * 1: Update at SB row level in tile
   1086    * 2: Update at tile level
   1087    */
   1088   AV1E_SET_MODE_COST_UPD_FREQ,
   1089 
   1090   /*!\brief Control to set bit mask that specifies which tier each of the 32
   1091    * possible operating points conforms to.
   1092    * Bit value 0: Main Tier; 1: High Tier.
   1093    */
   1094   AV1E_SET_TIER_MASK,
   1095 };
   1096 
   1097 /*!\brief aom 1-D scaling mode
   1098  *
   1099  * This set of constants define 1-D aom scaling modes
   1100  */
   1101 typedef enum aom_scaling_mode_1d {
   1102   AOME_NORMAL = 0,
   1103   AOME_FOURFIVE = 1,
   1104   AOME_THREEFIVE = 2,
   1105   AOME_ONETWO = 3
   1106 } AOM_SCALING_MODE;
   1107 
   1108 /*!\brief Max number of segments
   1109  *
   1110  * This is the limit of number of segments allowed within a frame.
   1111  *
   1112  * Currently same as "MAX_SEGMENTS" in AV1, the maximum that AV1 supports.
   1113  *
   1114  */
   1115 #define AOM_MAX_SEGMENTS 8
   1116 
   1117 /*!\brief  aom region of interest map
   1118  *
   1119  * These defines the data structures for the region of interest map
   1120  *
   1121  * TODO(yaowu): create a unit test for ROI map related APIs
   1122  *
   1123  */
   1124 typedef struct aom_roi_map {
   1125   /*! An id between 0 and 7 for each 8x8 region within a frame. */
   1126   unsigned char *roi_map;
   1127   unsigned int rows;              /**< Number of rows. */
   1128   unsigned int cols;              /**< Number of columns. */
   1129   int delta_q[AOM_MAX_SEGMENTS];  /**< Quantizer deltas. */
   1130   int delta_lf[AOM_MAX_SEGMENTS]; /**< Loop filter deltas. */
   1131   /*! Static breakout threshold for each segment. */
   1132   unsigned int static_threshold[AOM_MAX_SEGMENTS];
   1133 } aom_roi_map_t;
   1134 
   1135 /*!\brief  aom active region map
   1136  *
   1137  * These defines the data structures for active region map
   1138  *
   1139  */
   1140 
   1141 typedef struct aom_active_map {
   1142   /*!\brief specify an on (1) or off (0) each 16x16 region within a frame */
   1143   unsigned char *active_map;
   1144   unsigned int rows; /**< number of rows */
   1145   unsigned int cols; /**< number of cols */
   1146 } aom_active_map_t;
   1147 
   1148 /*!\brief  aom image scaling mode
   1149  *
   1150  * This defines the data structure for image scaling mode
   1151  *
   1152  */
   1153 typedef struct aom_scaling_mode {
   1154   AOM_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */
   1155   AOM_SCALING_MODE v_scaling_mode; /**< vertical scaling mode   */
   1156 } aom_scaling_mode_t;
   1157 
   1158 /*!brief AV1 encoder content type */
   1159 typedef enum {
   1160   AOM_CONTENT_DEFAULT,
   1161   AOM_CONTENT_SCREEN,
   1162   AOM_CONTENT_INVALID
   1163 } aom_tune_content;
   1164 
   1165 /*!brief AV1 encoder timing info type signaling */
   1166 typedef enum {
   1167   AOM_TIMING_UNSPECIFIED,
   1168   AOM_TIMING_EQUAL,
   1169   AOM_TIMING_DEC_MODEL
   1170 } aom_timing_info_type_t;
   1171 
   1172 /*!\brief Model tuning parameters
   1173  *
   1174  * Changes the encoder to tune for certain types of input material.
   1175  *
   1176  */
   1177 typedef enum {
   1178   AOM_TUNE_PSNR,
   1179   AOM_TUNE_SSIM,
   1180   AOM_TUNE_CDEF_DIST,
   1181   AOM_TUNE_DAALA_DIST
   1182 } aom_tune_metric;
   1183 
   1184 /*!\cond */
   1185 /*!\brief Encoder control function parameter type
   1186  *
   1187  * Defines the data types that AOME/AV1E control functions take. Note that
   1188  * additional common controls are defined in aom.h
   1189  *
   1190  */
   1191 
   1192 AOM_CTRL_USE_TYPE(AOME_USE_REFERENCE, int)
   1193 #define AOM_CTRL_AOME_USE_REFERENCE
   1194 AOM_CTRL_USE_TYPE(AOME_SET_ROI_MAP, aom_roi_map_t *)
   1195 #define AOM_CTRL_AOME_SET_ROI_MAP
   1196 AOM_CTRL_USE_TYPE(AOME_SET_ACTIVEMAP, aom_active_map_t *)
   1197 #define AOM_CTRL_AOME_SET_ACTIVEMAP
   1198 AOM_CTRL_USE_TYPE(AOME_SET_SCALEMODE, aom_scaling_mode_t *)
   1199 #define AOM_CTRL_AOME_SET_SCALEMODE
   1200 
   1201 AOM_CTRL_USE_TYPE(AOME_SET_SPATIAL_LAYER_ID, unsigned int)
   1202 #define AOM_CTRL_AOME_SET_SPATIAL_LAYER_ID
   1203 
   1204 AOM_CTRL_USE_TYPE(AOME_SET_CPUUSED, int)
   1205 #define AOM_CTRL_AOME_SET_CPUUSED
   1206 AOM_CTRL_USE_TYPE(AOME_SET_ENABLEAUTOALTREF, unsigned int)
   1207 #define AOM_CTRL_AOME_SET_ENABLEAUTOALTREF
   1208 
   1209 AOM_CTRL_USE_TYPE(AOME_SET_ENABLEAUTOBWDREF, unsigned int)
   1210 #define AOM_CTRL_AOME_SET_ENABLEAUTOBWDREF
   1211 
   1212 AOM_CTRL_USE_TYPE(AOME_SET_SHARPNESS, unsigned int)
   1213 #define AOM_CTRL_AOME_SET_SHARPNESS
   1214 AOM_CTRL_USE_TYPE(AOME_SET_STATIC_THRESHOLD, unsigned int)
   1215 #define AOM_CTRL_AOME_SET_STATIC_THRESHOLD
   1216 
   1217 AOM_CTRL_USE_TYPE(AOME_SET_ARNR_MAXFRAMES, unsigned int)
   1218 #define AOM_CTRL_AOME_SET_ARNR_MAXFRAMES
   1219 AOM_CTRL_USE_TYPE(AOME_SET_ARNR_STRENGTH, unsigned int)
   1220 #define AOM_CTRL_AOME_SET_ARNR_STRENGTH
   1221 AOM_CTRL_USE_TYPE(AOME_SET_TUNING, int) /* aom_tune_metric */
   1222 #define AOM_CTRL_AOME_SET_TUNING
   1223 AOM_CTRL_USE_TYPE(AOME_SET_CQ_LEVEL, unsigned int)
   1224 #define AOM_CTRL_AOME_SET_CQ_LEVEL
   1225 
   1226 AOM_CTRL_USE_TYPE(AV1E_SET_ROW_MT, unsigned int)
   1227 #define AOM_CTRL_AV1E_SET_ROW_MT
   1228 
   1229 AOM_CTRL_USE_TYPE(AV1E_SET_TILE_COLUMNS, unsigned int)
   1230 #define AOM_CTRL_AV1E_SET_TILE_COLUMNS
   1231 AOM_CTRL_USE_TYPE(AV1E_SET_TILE_ROWS, unsigned int)
   1232 #define AOM_CTRL_AV1E_SET_TILE_ROWS
   1233 
   1234 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_TPL_MODEL, unsigned int)
   1235 #define AOM_CTRL_AV1E_SET_ENABLE_TPL_MODEL
   1236 
   1237 AOM_CTRL_USE_TYPE(AOME_GET_LAST_QUANTIZER, int *)
   1238 #define AOM_CTRL_AOME_GET_LAST_QUANTIZER
   1239 AOM_CTRL_USE_TYPE(AOME_GET_LAST_QUANTIZER_64, int *)
   1240 #define AOM_CTRL_AOME_GET_LAST_QUANTIZER_64
   1241 
   1242 AOM_CTRL_USE_TYPE(AOME_SET_MAX_INTRA_BITRATE_PCT, unsigned int)
   1243 #define AOM_CTRL_AOME_SET_MAX_INTRA_BITRATE_PCT
   1244 AOM_CTRL_USE_TYPE(AOME_SET_MAX_INTER_BITRATE_PCT, unsigned int)
   1245 #define AOM_CTRL_AOME_SET_MAX_INTER_BITRATE_PCT
   1246 
   1247 AOM_CTRL_USE_TYPE(AOME_SET_NUMBER_SPATIAL_LAYERS, int)
   1248 #define AOME_CTRL_AOME_SET_NUMBER_SPATIAL_LAYERS
   1249 
   1250 AOM_CTRL_USE_TYPE(AV1E_SET_GF_CBR_BOOST_PCT, unsigned int)
   1251 #define AOM_CTRL_AV1E_SET_GF_CBR_BOOST_PCT
   1252 
   1253 AOM_CTRL_USE_TYPE(AV1E_SET_LOSSLESS, unsigned int)
   1254 #define AOM_CTRL_AV1E_SET_LOSSLESS
   1255 
   1256 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_CDEF, unsigned int)
   1257 #define AOM_CTRL_AV1E_SET_ENABLE_CDEF
   1258 
   1259 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_RESTORATION, unsigned int)
   1260 #define AOM_CTRL_AV1E_SET_ENABLE_RESTORATION
   1261 
   1262 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_OBMC, unsigned int)
   1263 #define AOM_CTRL_AV1E_SET_ENABLE_OBMC
   1264 
   1265 AOM_CTRL_USE_TYPE(AV1E_SET_DISABLE_TRELLIS_QUANT, unsigned int)
   1266 #define AOM_CTRL_AV1E_SET_DISABLE_TRELLIS_QUANT
   1267 
   1268 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_QM, unsigned int)
   1269 #define AOM_CTRL_AV1E_SET_ENABLE_QM
   1270 
   1271 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_DIST_8X8, unsigned int)
   1272 #define AOM_CTRL_AV1E_SET_ENABLE_DIST_8X8
   1273 
   1274 AOM_CTRL_USE_TYPE(AV1E_SET_QM_MIN, unsigned int)
   1275 #define AOM_CTRL_AV1E_SET_QM_MIN
   1276 
   1277 AOM_CTRL_USE_TYPE(AV1E_SET_QM_MAX, unsigned int)
   1278 #define AOM_CTRL_AV1E_SET_QM_MAX
   1279 
   1280 AOM_CTRL_USE_TYPE(AV1E_SET_QM_Y, unsigned int)
   1281 #define AOM_CTRL_AV1E_SET_QM_Y
   1282 
   1283 AOM_CTRL_USE_TYPE(AV1E_SET_QM_U, unsigned int)
   1284 #define AOM_CTRL_AV1E_SET_QM_U
   1285 
   1286 AOM_CTRL_USE_TYPE(AV1E_SET_QM_V, unsigned int)
   1287 #define AOM_CTRL_AV1E_SET_QM_V
   1288 
   1289 AOM_CTRL_USE_TYPE(AV1E_SET_NUM_TG, unsigned int)
   1290 #define AOM_CTRL_AV1E_SET_NUM_TG
   1291 AOM_CTRL_USE_TYPE(AV1E_SET_MTU, unsigned int)
   1292 #define AOM_CTRL_AV1E_SET_MTU
   1293 
   1294 AOM_CTRL_USE_TYPE(AV1E_SET_TIMING_INFO_TYPE, int) /* aom_timing_info_type_t */
   1295 #define AOM_CTRL_AV1E_SET_TIMING_INFO_TYPE
   1296 
   1297 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_RECT_PARTITIONS, int)
   1298 #define AOM_CTRL_AV1E_SET_ENABLE_RECT_PARTITIONS
   1299 
   1300 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_AB_PARTITIONS, int)
   1301 #define AOM_CTRL_AV1E_SET_ENABLE_AB_PARTITIONS
   1302 
   1303 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_1TO4_PARTITIONS, int)
   1304 #define AOM_CTRL_AV1E_SET_ENABLE_1TO4_PARTITIONS
   1305 
   1306 AOM_CTRL_USE_TYPE(AV1E_SET_MIN_PARTITION_SIZE, int)
   1307 #define AOM_CTRL_AV1E_SET_MIN_PARTITION_SIZE
   1308 
   1309 AOM_CTRL_USE_TYPE(AV1E_SET_MAX_PARTITION_SIZE, int)
   1310 #define AOM_CTRL_AV1E_SET_MAX_PARTITION_SIZE
   1311 
   1312 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_INTRA_EDGE_FILTER, int)
   1313 #define AOM_CTRL_AV1E_SET_ENABLE_INTRA_EDGE_FILTER
   1314 
   1315 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_ORDER_HINT, int)
   1316 #define AOM_CTRL_AV1E_SET_ENABLE_ORDER_HINT
   1317 
   1318 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_TX64, int)
   1319 #define AOM_CTRL_AV1E_SET_ENABLE_TX64
   1320 
   1321 AOM_CTRL_USE_TYPE(AV1E_SET_TX_SIZE_SEARCH_METHOD, int)
   1322 #define AOM_CTRL_AV1E_SET_TXSIZE_SEARCH_METHOD
   1323 
   1324 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_FLIP_IDTX, int)
   1325 #define AOM_CTRL_AV1E_SET_ENABLE_FLIP_IDTX
   1326 
   1327 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_DIST_WTD_COMP, int)
   1328 #define AOM_CTRL_AV1E_SET_ENABLE_DIST_WTD_COMP
   1329 
   1330 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_REF_FRAME_MVS, int)
   1331 #define AOM_CTRL_AV1E_SET_ENABLE_REF_FRAME_MVS
   1332 
   1333 AOM_CTRL_USE_TYPE(AV1E_SET_ALLOW_REF_FRAME_MVS, int)
   1334 #define AOM_CTRL_AV1E_SET_ALLOW_REF_FRAME_MVS
   1335 
   1336 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_DUAL_FILTER, int)
   1337 #define AOM_CTRL_AV1E_SET_ENABLE_DUAL_FILTER
   1338 
   1339 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_MASKED_COMP, int)
   1340 #define AOM_CTRL_AV1E_SET_ENABLE_MASKED_COMP
   1341 
   1342 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_ONESIDED_COMP, int)
   1343 #define AOM_CTRL_AV1E_SET_ENABLE_ONESIDED_COMP
   1344 
   1345 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_INTERINTRA_COMP, int)
   1346 #define AOM_CTRL_AV1E_SET_ENABLE_INTERINTRA_COMP
   1347 
   1348 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_SMOOTH_INTERINTRA, int)
   1349 #define AOM_CTRL_AV1E_SET_ENABLE_SMOOTH_INTERINTRA
   1350 
   1351 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_DIFF_WTD_COMP, int)
   1352 #define AOM_CTRL_AV1E_SET_ENABLE_DIFF_WTD_COMP
   1353 
   1354 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_INTERINTER_WEDGE, int)
   1355 #define AOM_CTRL_AV1E_SET_ENABLE_INTERINTER_WEDGE
   1356 
   1357 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_INTERINTRA_WEDGE, int)
   1358 #define AOM_CTRL_AV1E_SET_ENABLE_INTERINTRA_WEDGE
   1359 
   1360 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_GLOBAL_MOTION, int)
   1361 #define AOM_CTRL_AV1E_SET_ENABLE_GLOBAL_MOTION
   1362 
   1363 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_WARPED_MOTION, int)
   1364 #define AOM_CTRL_AV1E_SET_ENABLE_WARPED_MOTION
   1365 
   1366 AOM_CTRL_USE_TYPE(AV1E_SET_ALLOW_WARPED_MOTION, int)
   1367 #define AOM_CTRL_AV1E_SET_ALLOW_WARPED_MOTION
   1368 
   1369 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_FILTER_INTRA, int)
   1370 #define AOM_CTRL_AV1E_SET_ENABLE_FILTER_INTRA
   1371 
   1372 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_SMOOTH_INTRA, int)
   1373 #define AOM_CTRL_AV1E_SET_ENABLE_SMOOTH_INTRA
   1374 
   1375 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_PAETH_INTRA, int)
   1376 #define AOM_CTRL_AV1E_SET_ENABLE_PAETH_INTRA
   1377 
   1378 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_CFL_INTRA, int)
   1379 #define AOM_CTRL_AV1E_SET_ENABLE_CFL_INTRA
   1380 
   1381 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_SUPERRES, int)
   1382 #define AOM_CTRL_AV1E_SET_ENABLE_SUPERRES
   1383 
   1384 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_PALETTE, int)
   1385 #define AOM_CTRL_AV1E_SET_ENABLE_PALETTE
   1386 
   1387 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_INTRABC, int)
   1388 #define AOM_CTRL_AV1E_SET_ENABLE_INTRABC
   1389 
   1390 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_ANGLE_DELTA, int)
   1391 #define AOM_CTRL_AV1E_SET_ENABLE_ANGLE_DELTA
   1392 
   1393 AOM_CTRL_USE_TYPE(AV1E_SET_FRAME_PARALLEL_DECODING, unsigned int)
   1394 #define AOM_CTRL_AV1E_SET_FRAME_PARALLEL_DECODING
   1395 
   1396 AOM_CTRL_USE_TYPE(AV1E_SET_ERROR_RESILIENT_MODE, int)
   1397 #define AOM_CTRL_AV1E_SET_ERROR_RESILIENT_MODE
   1398 
   1399 AOM_CTRL_USE_TYPE(AV1E_SET_S_FRAME_MODE, int)
   1400 #define AOM_CTRL_AV1E_SET_S_FRAME_MODE
   1401 
   1402 AOM_CTRL_USE_TYPE(AV1E_SET_AQ_MODE, unsigned int)
   1403 #define AOM_CTRL_AV1E_SET_AQ_MODE
   1404 
   1405 AOM_CTRL_USE_TYPE(AV1E_SET_DELTAQ_MODE, unsigned int)
   1406 #define AOM_CTRL_AV1E_SET_DELTAQ_MODE
   1407 
   1408 AOM_CTRL_USE_TYPE(AV1E_SET_FRAME_PERIODIC_BOOST, unsigned int)
   1409 #define AOM_CTRL_AV1E_SET_FRAME_PERIODIC_BOOST
   1410 
   1411 AOM_CTRL_USE_TYPE(AV1E_SET_NOISE_SENSITIVITY, unsigned int)
   1412 #define AOM_CTRL_AV1E_SET_NOISE_SENSITIVITY
   1413 
   1414 AOM_CTRL_USE_TYPE(AV1E_SET_TUNE_CONTENT, int) /* aom_tune_content */
   1415 #define AOM_CTRL_AV1E_SET_TUNE_CONTENT
   1416 
   1417 AOM_CTRL_USE_TYPE(AV1E_SET_COLOR_PRIMARIES, int)
   1418 #define AOM_CTRL_AV1E_SET_COLOR_PRIMARIES
   1419 
   1420 AOM_CTRL_USE_TYPE(AV1E_SET_TRANSFER_CHARACTERISTICS, int)
   1421 #define AOM_CTRL_AV1E_SET_TRANSFER_CHARACTERISTICS
   1422 
   1423 AOM_CTRL_USE_TYPE(AV1E_SET_MATRIX_COEFFICIENTS, int)
   1424 #define AOM_CTRL_AV1E_SET_MATRIX_COEFFICIENTS
   1425 
   1426 AOM_CTRL_USE_TYPE(AV1E_SET_CHROMA_SAMPLE_POSITION, int)
   1427 #define AOM_CTRL_AV1E_SET_CHROMA_SAMPLE_POSITION
   1428 
   1429 AOM_CTRL_USE_TYPE(AV1E_SET_MIN_GF_INTERVAL, unsigned int)
   1430 #define AOM_CTRL_AV1E_SET_MIN_GF_INTERVAL
   1431 
   1432 AOM_CTRL_USE_TYPE(AV1E_SET_MAX_GF_INTERVAL, unsigned int)
   1433 #define AOM_CTRL_AV1E_SET_MAX_GF_INTERVAL
   1434 
   1435 AOM_CTRL_USE_TYPE(AV1E_GET_ACTIVEMAP, aom_active_map_t *)
   1436 #define AOM_CTRL_AV1E_GET_ACTIVEMAP
   1437 
   1438 AOM_CTRL_USE_TYPE(AV1E_SET_COLOR_RANGE, int)
   1439 #define AOM_CTRL_AV1E_SET_COLOR_RANGE
   1440 
   1441 #define AOM_CTRL_AV1E_SET_RENDER_SIZE
   1442 AOM_CTRL_USE_TYPE(AV1E_SET_RENDER_SIZE, int *)
   1443 
   1444 AOM_CTRL_USE_TYPE(AV1E_SET_SUPERBLOCK_SIZE, unsigned int)
   1445 #define AOM_CTRL_AV1E_SET_SUPERBLOCK_SIZE
   1446 
   1447 AOM_CTRL_USE_TYPE(AV1E_GET_SEQ_LEVEL_IDX, int *)
   1448 #define AOM_CTRL_AV1E_GET_SEQ_LEVEL_IDX
   1449 
   1450 AOM_CTRL_USE_TYPE(AV1E_SET_SINGLE_TILE_DECODING, unsigned int)
   1451 #define AOM_CTRL_AV1E_SET_SINGLE_TILE_DECODING
   1452 
   1453 AOM_CTRL_USE_TYPE(AV1E_ENABLE_MOTION_VECTOR_UNIT_TEST, unsigned int)
   1454 #define AOM_CTRL_AV1E_ENABLE_MOTION_VECTOR_UNIT_TEST
   1455 
   1456 AOM_CTRL_USE_TYPE(AV1E_SET_FILM_GRAIN_TEST_VECTOR, int)
   1457 #define AOM_CTRL_AV1E_SET_FILM_GRAIN_TEST_VECTOR
   1458 
   1459 AOM_CTRL_USE_TYPE(AV1E_SET_FILM_GRAIN_TABLE, const char *)
   1460 #define AOM_CTRL_AV1E_SET_FILM_GRAIN_TABLE
   1461 
   1462 AOM_CTRL_USE_TYPE(AV1E_SET_CDF_UPDATE_MODE, unsigned int)
   1463 #define AOM_CTRL_AV1E_SET_CDF_UPDATE_MODE
   1464 
   1465 #ifdef CONFIG_DENOISE
   1466 AOM_CTRL_USE_TYPE(AV1E_SET_DENOISE_NOISE_LEVEL, int);
   1467 #define AOM_CTRL_AV1E_SET_DENOISE_NOISE_LEVEL
   1468 
   1469 AOM_CTRL_USE_TYPE(AV1E_SET_DENOISE_BLOCK_SIZE, unsigned int);
   1470 #define AOM_CTRL_AV1E_SET_DENOISE_BLOCK_SIZE
   1471 #endif
   1472 
   1473 AOM_CTRL_USE_TYPE(AV1E_SET_CHROMA_SUBSAMPLING_X, unsigned int)
   1474 #define AOM_CTRL_AV1E_SET_CHROMA_SUBSAMPLING_X
   1475 
   1476 AOM_CTRL_USE_TYPE(AV1E_SET_CHROMA_SUBSAMPLING_Y, unsigned int)
   1477 #define AOM_CTRL_AV1E_SET_CHROMA_SUBSAMPLING_Y
   1478 
   1479 AOM_CTRL_USE_TYPE(AV1E_SET_REDUCED_TX_TYPE_SET, int)
   1480 #define AOM_CTRL_AV1E_SET_REDUCED_TX_TYPE_SET
   1481 
   1482 AOM_CTRL_USE_TYPE(AV1E_SET_INTRA_DCT_ONLY, int)
   1483 #define AOM_CTRL_AV1E_SET_INTRA_DCT_ONLY
   1484 
   1485 AOM_CTRL_USE_TYPE(AV1E_SET_INTER_DCT_ONLY, int)
   1486 #define AOM_CTRL_AV1E_SET_INTER_DCT_ONLY
   1487 
   1488 AOM_CTRL_USE_TYPE(AV1E_SET_INTRA_DEFAULT_TX_ONLY, int)
   1489 #define AOM_CTRL_AV1E_SET_INTRA_DEFAULT_TX_ONLY
   1490 
   1491 AOM_CTRL_USE_TYPE(AV1E_SET_QUANT_B_ADAPT, int)
   1492 #define AOM_CTRL_AV1E_SET_QUANT_B_ADAPT
   1493 
   1494 AOM_CTRL_USE_TYPE(AV1E_SET_GF_MAX_PYRAMID_HEIGHT, unsigned int)
   1495 #define AOM_CTRL_AV1E_SET_GF_MAX_PYRAMID_HEIGHT
   1496 
   1497 AOM_CTRL_USE_TYPE(AV1E_SET_MAX_REFERENCE_FRAMES, int)
   1498 #define AOM_CTRL_AV1E_SET_MAX_REFERENCE_FRAMES
   1499 
   1500 AOM_CTRL_USE_TYPE(AV1E_SET_REDUCED_REFERENCE_SET, int)
   1501 #define AOM_CTRL_AV1E_SET_REDUCED_REFERENCE_SET
   1502 
   1503 AOM_CTRL_USE_TYPE(AV1E_SET_COEFF_COST_UPD_FREQ, unsigned int)
   1504 #define AOM_CTRL_AV1E_SET_COEFF_COST_UPD_FREQ
   1505 
   1506 AOM_CTRL_USE_TYPE(AV1E_SET_MODE_COST_UPD_FREQ, unsigned int)
   1507 #define AOM_CTRL_AV1E_SET_MODE_COST_UPD_FREQ
   1508 
   1509 AOM_CTRL_USE_TYPE(AV1E_SET_TARGET_SEQ_LEVEL_IDX, int)
   1510 #define AOM_CTRL_AV1E_SET_TARGET_SEQ_LEVEL_IDX
   1511 
   1512 AOM_CTRL_USE_TYPE(AV1E_SET_TIER_MASK, unsigned int)
   1513 #define AOM_CTRL_AV1E_SET_TIER_MASK
   1514 
   1515 /*!\endcond */
   1516 /*! @} - end defgroup aom_encoder */
   1517 #ifdef __cplusplus
   1518 }  // extern "C"
   1519 #endif
   1520 
   1521 #endif  // AOM_AOM_AOMCX_H_
   1522