blob: 35f2e7813697dfe8956044aa306277d13f51b1ac [file] [log] [blame]
John Koleszar0ea50ce2010-05-18 11:58:33 -04001/*
Yaowu Xu9c01aa12016-09-01 14:32:49 -07002 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
John Koleszar0ea50ce2010-05-18 11:58:33 -04003 *
Yaowu Xu9c01aa12016-09-01 14:32:49 -07004 * 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.
John Koleszar0ea50ce2010-05-18 11:58:33 -040010 */
Yaowu Xuf883b422016-08-30 14:01:10 -070011#ifndef AOM_AOMCX_H_
12#define AOM_AOMCX_H_
John Koleszar0ea50ce2010-05-18 11:58:33 -040013
Yaowu Xu9c01aa12016-09-01 14:32:49 -070014/*!\defgroup aom_encoder AOMedia AOM/AV1 Encoder
15 * \ingroup aom
John Koleszar0ea50ce2010-05-18 11:58:33 -040016 *
17 * @{
18 */
Yaowu Xuf883b422016-08-30 14:01:10 -070019#include "./aom.h"
20#include "./aom_encoder.h"
John Koleszar0ea50ce2010-05-18 11:58:33 -040021
James Zernf42d52e2011-02-16 17:54:49 -080022/*!\file
Yaowu Xu9c01aa12016-09-01 14:32:49 -070023 * \brief Provides definitions for using AOM or AV1 encoder algorithm within the
Yaowu Xuf883b422016-08-30 14:01:10 -070024 * aom Codec Interface.
John Koleszar0ea50ce2010-05-18 11:58:33 -040025 */
Dmitry Kovaleve288c602013-09-29 18:00:15 -070026
27#ifdef __cplusplus
28extern "C" {
29#endif
John Koleszar0ea50ce2010-05-18 11:58:33 -040030
Yaowu Xuf883b422016-08-30 14:01:10 -070031/*!\name Algorithm interface for AV1
Jingning Han3ee6db62015-08-05 19:00:31 -070032 *
Yaowu Xuf883b422016-08-30 14:01:10 -070033 * This interface provides the capability to encode raw AV1 streams.
Jingning Han3ee6db62015-08-05 19:00:31 -070034 * @{
35 */
Yaowu Xuf883b422016-08-30 14:01:10 -070036extern aom_codec_iface_t aom_codec_av1_cx_algo;
37extern aom_codec_iface_t *aom_codec_av1_cx(void);
Jingning Han3ee6db62015-08-05 19:00:31 -070038/*!@} - end algorithm interface member group*/
John Koleszar0952acb2010-06-01 11:14:25 -040039
John Koleszar0ea50ce2010-05-18 11:58:33 -040040/*
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 */
Yaowu Xuf883b422016-08-30 14:01:10 -070050#define AOM_EFLAG_NO_REF_LAST (1 << 16)
Yunqing Wang9a50fec2017-11-02 17:02:00 -070051/*!\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)
John Koleszar0ea50ce2010-05-18 11:58:33 -040065/*!\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 */
Yunqing Wang9a50fec2017-11-02 17:02:00 -070071#define AOM_EFLAG_NO_REF_GF (1 << 19)
John Koleszar0ea50ce2010-05-18 11:58:33 -040072
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 */
Yunqing Wang9a50fec2017-11-02 17:02:00 -070079#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)
John Koleszar0ea50ce2010-05-18 11:58:33 -040094
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 */
Yunqing Wang9a50fec2017-11-02 17:02:00 -0700100#define AOM_EFLAG_NO_UPD_LAST (1 << 23)
John Koleszar0ea50ce2010-05-18 11:58:33 -0400101
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 */
Yunqing Wang9a50fec2017-11-02 17:02:00 -0700107#define AOM_EFLAG_NO_UPD_GF (1 << 24)
John Koleszar0ea50ce2010-05-18 11:58:33 -0400108
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 */
Yunqing Wang9a50fec2017-11-02 17:02:00 -0700114#define AOM_EFLAG_NO_UPD_ARF (1 << 25)
John Koleszar0ea50ce2010-05-18 11:58:33 -0400115/*!\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 */
Yunqing Wang9a50fec2017-11-02 17:02:00 -0700120#define AOM_EFLAG_NO_UPD_ENTROPY (1 << 26)
John Koleszar0ea50ce2010-05-18 11:58:33 -0400121
Yaowu Xuf883b422016-08-30 14:01:10 -0700122/*!\brief AVx encoder control functions
John Koleszar0ea50ce2010-05-18 11:58:33 -0400123 *
Yaowu Xuf883b422016-08-30 14:01:10 -0700124 * This set of macros define the control functions available for AVx
James Zern8e17e822011-02-24 14:12:57 -0800125 * encoder interface.
126 *
Yaowu Xuf883b422016-08-30 14:01:10 -0700127 * \sa #aom_codec_control
John Koleszar0ea50ce2010-05-18 11:58:33 -0400128 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700129enum aome_enc_control_id {
Yunqing Wangbdcc1402016-03-25 09:05:25 -0700130 /*!\brief Codec control function to set which reference frame encoder can use.
Yunqing Wangbdcc1402016-03-25 09:05:25 -0700131 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700132 AOME_USE_REFERENCE = 7,
Yunqing Wangbdcc1402016-03-25 09:05:25 -0700133
Yaowu Xu268f1062015-03-13 09:42:57 -0700134 /*!\brief Codec control function to pass an ROI map to encoder.
Yaowu Xu268f1062015-03-13 09:42:57 -0700135 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700136 AOME_SET_ROI_MAP = 8,
Yaowu Xu268f1062015-03-13 09:42:57 -0700137
138 /*!\brief Codec control function to pass an Active map to encoder.
Yaowu Xu268f1062015-03-13 09:42:57 -0700139 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700140 AOME_SET_ACTIVEMAP,
Yaowu Xu268f1062015-03-13 09:42:57 -0700141
142 /*!\brief Codec control function to set encoder scaling mode.
Yaowu Xu268f1062015-03-13 09:42:57 -0700143 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700144 AOME_SET_SCALEMODE = 11,
Yaowu Xu268f1062015-03-13 09:42:57 -0700145
Soo-Chul Hanf8589862018-01-24 03:13:14 +0000146 /*!\brief Codec control function to set encoder enhancement layer id.
Johann3c30fb42018-02-08 14:33:20 -0800147 */
Soo-Chul Hanf8589862018-01-24 03:13:14 +0000148 AOME_SET_ENHANCEMENT_LAYER_ID = 12,
149
Yaowu Xu268f1062015-03-13 09:42:57 -0700150 /*!\brief Codec control function to set encoder internal speed settings.
John Koleszarc6b90392012-07-13 15:21:29 -0700151 *
152 * Changes in this value influences, among others, the encoder's selection
153 * of motion estimation methods. Values greater than 0 will increase encoder
154 * speed at the expense of quality.
John Koleszarc6b90392012-07-13 15:21:29 -0700155 *
Alex Converse561d0af2017-03-23 12:58:04 -0700156 * \note Valid range: 0..8
John Koleszarc6b90392012-07-13 15:21:29 -0700157 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700158 AOME_SET_CPUUSED = 13,
Yaowu Xu268f1062015-03-13 09:42:57 -0700159
Jingning Hanb49c6ae2017-11-27 18:14:05 -0800160 /*!\brief Speed features for codec development
161 */
162 AOME_SET_DEVSF,
163
Yaowu Xu268f1062015-03-13 09:42:57 -0700164 /*!\brief Codec control function to enable automatic set and use alf frames.
Yaowu Xu268f1062015-03-13 09:42:57 -0700165 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700166 AOME_SET_ENABLEAUTOALTREF,
Yaowu Xu268f1062015-03-13 09:42:57 -0700167
Yaowu Xu268f1062015-03-13 09:42:57 -0700168 /*!\brief Codec control function to set sharpness.
Yaowu Xu268f1062015-03-13 09:42:57 -0700169 */
Alex Converse0f4bcda2016-12-12 15:43:35 -0800170 AOME_SET_SHARPNESS = AOME_SET_ENABLEAUTOALTREF + 2,
Yaowu Xu268f1062015-03-13 09:42:57 -0700171
172 /*!\brief Codec control function to set the threshold for MBs treated static.
Yaowu Xu268f1062015-03-13 09:42:57 -0700173 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700174 AOME_SET_STATIC_THRESHOLD,
Yaowu Xu268f1062015-03-13 09:42:57 -0700175
Yaowu Xu268f1062015-03-13 09:42:57 -0700176 /*!\brief Codec control function to get last quantizer chosen by the encoder.
177 *
178 * Return value uses internal quantizer scale defined by the codec.
Yaowu Xu268f1062015-03-13 09:42:57 -0700179 */
Alex Converse0f4bcda2016-12-12 15:43:35 -0800180 AOME_GET_LAST_QUANTIZER = AOME_SET_STATIC_THRESHOLD + 2,
Yaowu Xu268f1062015-03-13 09:42:57 -0700181
182 /*!\brief Codec control function to get last quantizer chosen by the encoder.
183 *
184 * Return value uses the 0..63 scale as used by the rc_*_quantizer config
185 * parameters.
Yaowu Xu268f1062015-03-13 09:42:57 -0700186 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700187 AOME_GET_LAST_QUANTIZER_64,
Yaowu Xu268f1062015-03-13 09:42:57 -0700188
189 /*!\brief Codec control function to set the max no of frames to create arf.
Yaowu Xu268f1062015-03-13 09:42:57 -0700190 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700191 AOME_SET_ARNR_MAXFRAMES,
Yaowu Xu268f1062015-03-13 09:42:57 -0700192
193 /*!\brief Codec control function to set the filter strength for the arf.
Yaowu Xu268f1062015-03-13 09:42:57 -0700194 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700195 AOME_SET_ARNR_STRENGTH,
Yaowu Xu268f1062015-03-13 09:42:57 -0700196
Yaowu Xu268f1062015-03-13 09:42:57 -0700197 /*!\brief Codec control function to set visual tuning.
Yaowu Xu268f1062015-03-13 09:42:57 -0700198 */
Alex Conversefab62242016-12-13 10:09:15 -0800199 AOME_SET_TUNING = AOME_SET_ARNR_STRENGTH + 2,
Yaowu Xu268f1062015-03-13 09:42:57 -0700200
201 /*!\brief Codec control function to set constrained quality level.
John Koleszarc6b90392012-07-13 15:21:29 -0700202 *
Yaowu Xuf883b422016-08-30 14:01:10 -0700203 * \attention For this value to be used aom_codec_enc_cfg_t::g_usage must be
204 * set to #AOM_CQ.
John Koleszarc6b90392012-07-13 15:21:29 -0700205 * \note Valid range: 0..63
206 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700207 AOME_SET_CQ_LEVEL,
John Koleszar1654ae92011-07-28 09:17:32 -0400208
Yaowu Xu268f1062015-03-13 09:42:57 -0700209 /*!\brief Codec control function to set Max data rate for Intra frames.
John Koleszarc6b90392012-07-13 15:21:29 -0700210 *
211 * This value controls additional clamping on the maximum size of a
212 * keyframe. It is expressed as a percentage of the average
213 * per-frame bitrate, with the special (and default) value 0 meaning
214 * unlimited, or no additional clamping beyond the codec's built-in
215 * algorithm.
216 *
217 * For example, to allocate no more than 4.5 frames worth of bitrate
218 * to a keyframe, set this to 450.
John Koleszarc6b90392012-07-13 15:21:29 -0700219 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700220 AOME_SET_MAX_INTRA_BITRATE_PCT,
John Koleszar83b1d902012-11-05 12:37:14 -0800221
Soo-Chul Hanf8589862018-01-24 03:13:14 +0000222 /*!\brief Codec control function to set number of spatial layers.
Johann3c30fb42018-02-08 14:33:20 -0800223 */
Soo-Chul Hanf8589862018-01-24 03:13:14 +0000224 AOME_SET_NUMBER_SPATIAL_LAYERS,
225
Yaowu Xu268f1062015-03-13 09:42:57 -0700226 /*!\brief Codec control function to set max data rate for Inter frames.
Yaowu Xu636099f2014-10-24 09:31:16 -0700227 *
228 * This value controls additional clamping on the maximum size of an
229 * inter frame. It is expressed as a percentage of the average
230 * per-frame bitrate, with the special (and default) value 0 meaning
231 * unlimited, or no additional clamping beyond the codec's built-in
232 * algorithm.
233 *
234 * For example, to allow no more than 4.5 frames worth of bitrate
235 * to an inter frame, set this to 450.
Yaowu Xu636099f2014-10-24 09:31:16 -0700236 */
Alex Converse0f4bcda2016-12-12 15:43:35 -0800237 AV1E_SET_MAX_INTER_BITRATE_PCT = AOME_SET_MAX_INTRA_BITRATE_PCT + 2,
Yaowu Xu636099f2014-10-24 09:31:16 -0700238
Yaowu Xu268f1062015-03-13 09:42:57 -0700239 /*!\brief Boost percentage for Golden Frame in CBR mode.
Yaowu Xu03a60b72014-10-27 13:13:14 -0700240 *
241 * This value controls the amount of boost given to Golden Frame in
242 * CBR mode. It is expressed as a percentage of the average
243 * per-frame bitrate, with the special (and default) value 0 meaning
244 * the feature is off, i.e., no golden frame boost in CBR mode and
245 * average bitrate target is used.
246 *
247 * For example, to allow 100% more bits, i.e, 2X, in a golden frame
248 * than average frame, set this to 100.
Yaowu Xu03a60b72014-10-27 13:13:14 -0700249 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700250 AV1E_SET_GF_CBR_BOOST_PCT,
John Koleszar83b1d902012-11-05 12:37:14 -0800251
Yaowu Xu268f1062015-03-13 09:42:57 -0700252 /*!\brief Codec control function to set lossless encoding mode.
Yaowu Xu87c436f2015-01-13 12:39:42 -0800253 *
Yaowu Xuf883b422016-08-30 14:01:10 -0700254 * AV1 can operate in lossless encoding mode, in which the bitstream
Yaowu Xu87c436f2015-01-13 12:39:42 -0800255 * produced will be able to decode and reconstruct a perfect copy of
256 * input source. This control function provides a mean to switch encoder
257 * into lossless coding mode(1) or normal coding mode(0) that may be lossy.
258 * 0 = lossy coding mode
259 * 1 = lossless coding mode
260 *
261 * By default, encoder operates in normal coding mode (maybe lossy).
262 */
Alex Converse0f4bcda2016-12-12 15:43:35 -0800263 AV1E_SET_LOSSLESS = AV1E_SET_GF_CBR_BOOST_PCT + 2,
Thomas Daviesaf6df172016-11-09 14:04:18 +0000264
Yaowu Xu268f1062015-03-13 09:42:57 -0700265 /*!\brief Codec control function to set number of tile columns.
Yaowu Xu87c436f2015-01-13 12:39:42 -0800266 *
Yaowu Xuf883b422016-08-30 14:01:10 -0700267 * In encoding and decoding, AV1 allows an input image frame be partitioned
Yaowu Xu87c436f2015-01-13 12:39:42 -0800268 * into separated vertical tile columns, which can be encoded or decoded
269 * independently. This enables easy implementation of parallel encoding and
270 * decoding. This control requests the encoder to use column tiles in
271 * encoding an input frame, with number of tile columns (in Log2 unit) as
272 * the parameter:
273 * 0 = 1 tile column
274 * 1 = 2 tile columns
275 * 2 = 4 tile columns
276 * .....
277 * n = 2**n tile columns
278 * The requested tile columns will be capped by encoder based on image size
279 * limitation (The minimum width of a tile column is 256 pixel, the maximum
280 * is 4096).
281 *
282 * By default, the value is 0, i.e. one single column tile for entire image.
283 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700284 AV1E_SET_TILE_COLUMNS,
Yaowu Xu87c436f2015-01-13 12:39:42 -0800285
Yaowu Xu268f1062015-03-13 09:42:57 -0700286 /*!\brief Codec control function to set number of tile rows.
Yaowu Xu87c436f2015-01-13 12:39:42 -0800287 *
Yaowu Xuf883b422016-08-30 14:01:10 -0700288 * In encoding and decoding, AV1 allows an input image frame be partitioned
Yaowu Xu87c436f2015-01-13 12:39:42 -0800289 * into separated horizontal tile rows. Tile rows are encoded or decoded
290 * sequentially. Even though encoding/decoding of later tile rows depends on
291 * earlier ones, this allows the encoder to output data packets for tile rows
292 * prior to completely processing all tile rows in a frame, thereby reducing
293 * the latency in processing between input and output. The parameter
294 * for this control describes the number of tile rows, which has a valid
295 * range [0, 2]:
296 * 0 = 1 tile row
297 * 1 = 2 tile rows
298 * 2 = 4 tile rows
299 *
300 * By default, the value is 0, i.e. one single row tile for entire image.
301 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700302 AV1E_SET_TILE_ROWS,
Ryan Lei7386eda2016-12-08 21:08:31 -0800303
Yaowu Xu268f1062015-03-13 09:42:57 -0700304 /*!\brief Codec control function to enable frame parallel decoding feature.
Yaowu Xu87c436f2015-01-13 12:39:42 -0800305 *
Yaowu Xuf883b422016-08-30 14:01:10 -0700306 * AV1 has a bitstream feature to reduce decoding dependency between frames
Yaowu Xu87c436f2015-01-13 12:39:42 -0800307 * by turning off backward update of probability context used in encoding
308 * and decoding. This allows staged parallel processing of more than one
309 * video frames in the decoder. This control function provides a mean to
310 * turn this feature on or off for bitstreams produced by encoder.
311 *
312 * By default, this feature is off.
313 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700314 AV1E_SET_FRAME_PARALLEL_DECODING,
Yaowu Xu87c436f2015-01-13 12:39:42 -0800315
Yaowu Xu268f1062015-03-13 09:42:57 -0700316 /*!\brief Codec control function to set adaptive quantization mode.
Yaowu Xu87c436f2015-01-13 12:39:42 -0800317 *
Yaowu Xuf883b422016-08-30 14:01:10 -0700318 * AV1 has a segment based feature that allows encoder to adaptively change
Yaowu Xu87c436f2015-01-13 12:39:42 -0800319 * quantization parameter for each segment within a frame to improve the
320 * subjective quality. This control makes encoder operate in one of the
321 * several AQ_modes supported.
322 *
323 * By default, encoder operates with AQ_Mode 0(adaptive quantization off).
324 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700325 AV1E_SET_AQ_MODE,
Yaowu Xu4ab39e12015-01-14 09:07:02 -0800326
Yaowu Xu268f1062015-03-13 09:42:57 -0700327 /*!\brief Codec control function to enable/disable periodic Q boost.
Yaowu Xu4ab39e12015-01-14 09:07:02 -0800328 *
Yaowu Xuf883b422016-08-30 14:01:10 -0700329 * One AV1 encoder speed feature is to enable quality boost by lowering
Yaowu Xu4ab39e12015-01-14 09:07:02 -0800330 * frame level Q periodically. This control function provides a mean to
331 * turn on/off this feature.
332 * 0 = off
333 * 1 = on
334 *
335 * By default, the encoder is allowed to use this feature for appropriate
336 * encoding modes.
337 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700338 AV1E_SET_FRAME_PERIODIC_BOOST,
Yaowu Xu4ab39e12015-01-14 09:07:02 -0800339
Yaowu Xu268f1062015-03-13 09:42:57 -0700340 /*!\brief Codec control function to set noise sensitivity.
JackyChenbb1a2362014-09-12 11:48:44 -0700341 *
Yaowu Xu268f1062015-03-13 09:42:57 -0700342 * 0: off, 1: On(YOnly)
JackyChenbb1a2362014-09-12 11:48:44 -0700343 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700344 AV1E_SET_NOISE_SENSITIVITY,
Ivan Maltz01b35c32013-09-05 08:55:47 -0700345
Yaowu Xu268f1062015-03-13 09:42:57 -0700346 /*!\brief Codec control function to set content type.
Yaowu Xudc08b202015-01-14 11:17:09 -0800347 * \note Valid parameter range:
Yaowu Xuf883b422016-08-30 14:01:10 -0700348 * AOM_CONTENT_DEFAULT = Regular video content (Default)
349 * AOM_CONTENT_SCREEN = Screen capture content
Yaowu Xudc08b202015-01-14 11:17:09 -0800350 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700351 AV1E_SET_TUNE_CONTENT,
Yaowu Xu193ca4b2015-01-14 11:48:29 -0800352
Hui Su1cb1c002018-02-05 18:21:20 -0800353 /*!\brief Codec control function to set CDF update mode.
354 *
355 * 0: no update 1: update all the time
356 * 2: update half of the time 3: update quarter of the time
357 */
358 AV1E_SET_CDF_UPDATE_MODE,
359
Andrey Norkin9e694632017-12-21 18:50:57 -0800360 /*!\brief Codec control function to set color space info.
361 * \note Valid ranges: 0..23, default is "Unspecified".
362 * 0 = For future use
363 * 1 = BT.709
364 * 2 = Unspecified
365 * 3 = For future use
366 * 4 = BT.470 System M (historical)
367 * 5 = BT.470 System B, G (historical)
368 * 6 = BT.601
369 * 7 = SMPTE 240
370 * 8 = Generic film (color filters using illuminant C)
371 * 9 = BT.2020, BT.2100
372 * 10 = SMPTE 428 (CIE 1921 XYZ)
373 * 11 = SMPTE RP 431-2
374 * 12 = SMPTE EG 432-1
375 * 13 = For future use (values 13 - 21)
376 * 22 = EBU Tech. 3213-E
377 * 23 = For future use
Edward Hervey24e47832018-01-11 12:17:12 +0100378 *
379 * Experiment: CICP
Andrey Norkin9e694632017-12-21 18:50:57 -0800380 */
381 AV1E_SET_COLOR_PRIMARIES,
382
383 /*!\brief Codec control function to set transfer function info.
384 * \note Valid ranges: 0..19, default is "Unspecified".
385 * 0 = For future use
386 * 1 = BT.709
387 * 2 = Unspecified
388 * 3 = For future use
389 * 4 = BT.470 System M (historical)
390 * 5 = BT.470 System B, G (historical)
391 * 6 = BT.601
392 * 7 = SMPTE 240 M
393 * 8 = Linear
394 * 9 = Logarithmic (100 : 1 range)
395 * 10 = Logarithmic (100 * Sqrt(10) : 1 range)
396 * 11 = IEC 61966-2-4
397 * 12 = BT.1361
398 * 13 = sRGB or sYCC
399 * 14 = BT.2020 10-bit systems
400 * 15 = BT.2020 12-bit systems
401 * 16 = SMPTE ST 2084, ITU BT.2100 PQ
402 * 17 = SMPTE ST 428
403 * 18 = BT.2100 HLG, ARIB STD-B67
404 * 19 = For future use
Edward Hervey24e47832018-01-11 12:17:12 +0100405 *
406 * Experiment: CICP
Andrey Norkin9e694632017-12-21 18:50:57 -0800407 */
408 AV1E_SET_TRANSFER_CHARACTERISTICS,
409
410 /*!\brief Codec control function to set transfer function info.
411 * \note Valid ranges: 0..15, default is "Unspecified".
412 * 0 = Identity matrix
413 * 1 = BT.709
414 * 2 = Unspecified
415 * 3 = For future use
416 * 4 = US FCC 73.628
417 * 5 = BT.470 System B, G (historical)
418 * 6 = BT.601
419 * 7 = SMPTE 240 M
420 * 8 = YCgCo
421 * 9 = BT.2020 non-constant luminance, BT.2100 YCbCr
422 * 10 = BT.2020 constant luminance
423 * 11 = SMPTE ST 2085 YDzDx
424 * 12 = Chromaticity-derived non-constant luminance
425 * 13 = Chromaticity-derived constant luminance
426 * 14 = BT.2100 ICtCp
427 * 15 = For future use
Edward Hervey24e47832018-01-11 12:17:12 +0100428 *
429 * Experiment: CICP
Andrey Norkin9e694632017-12-21 18:50:57 -0800430 */
431 AV1E_SET_MATRIX_COEFFICIENTS,
Edward Hervey24e47832018-01-11 12:17:12 +0100432
Yaowu Xu268f1062015-03-13 09:42:57 -0700433 /*!\brief Codec control function to set color space info.
anorkin76fb1262017-03-22 15:12:12 -0700434 * \note Valid ranges: 0..9, default is "UNKNOWN".
Yaowu Xue94b4152015-01-13 10:07:20 -0800435 * 0 = UNKNOWN,
436 * 1 = BT_601
437 * 2 = BT_709
438 * 3 = SMPTE_170
439 * 4 = SMPTE_240
anorkin76fb1262017-03-22 15:12:12 -0700440 * 5 = BT_2020_NCL
441 * 6 = BT_2020_CL
Yaowu Xue94b4152015-01-13 10:07:20 -0800442 * 7 = SRGB
anorkin76fb1262017-03-22 15:12:12 -0700443 * 8 = ICtCp
444 * 9 = RESERVED
Yaowu Xue94b4152015-01-13 10:07:20 -0800445 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700446 AV1E_SET_COLOR_SPACE,
Alex Converse4dcb8392015-03-20 14:55:43 -0700447
anorkin76fb1262017-03-22 15:12:12 -0700448 /*!\brief Codec control function to set transfer function info.
449 * \note Valid ranges: 0..4, default is "UNKNOWN".
450 * 0 = UNKNOWN,
451 * 1 = BT_709
452 * 2 = PQ
453 * 3 = HLG
454 * 4 = RESERVED
455 */
456 AV1E_SET_TRANSFER_FUNCTION,
457
458 /*!\brief Codec control function to set chroma 4:2:0 sample position info.
459 * \note Valid ranges: 0..3, default is "UNKNOWN".
460 * 0 = UNKNOWN,
461 * 1 = VERTICAL
462 * 2 = COLOCATED
463 * 3 = RESERVED
464 */
465 AV1E_SET_CHROMA_SAMPLE_POSITION,
anorkin76fb1262017-03-22 15:12:12 -0700466
Debargha Mukherjee98526432015-04-01 16:39:06 -0700467 /*!\brief Codec control function to set minimum interval between GF/ARF frames
468 *
469 * By default the value is set as 4.
Debargha Mukherjee98526432015-04-01 16:39:06 -0700470 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700471 AV1E_SET_MIN_GF_INTERVAL,
Debargha Mukherjee98526432015-04-01 16:39:06 -0700472
473 /*!\brief Codec control function to set minimum interval between GF/ARF frames
474 *
475 * By default the value is set as 16.
Debargha Mukherjee98526432015-04-01 16:39:06 -0700476 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700477 AV1E_SET_MAX_GF_INTERVAL,
Debargha Mukherjee98526432015-04-01 16:39:06 -0700478
Alex Converse4dcb8392015-03-20 14:55:43 -0700479 /*!\brief Codec control function to get an Active map back from the encoder.
Alex Converse4dcb8392015-03-20 14:55:43 -0700480 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700481 AV1E_GET_ACTIVEMAP,
Ronald S. Bultjeeeb5ef02015-09-15 21:56:51 -0400482
483 /*!\brief Codec control function to set color range bit.
484 * \note Valid ranges: 0..1, default is 0
485 * 0 = Limited range (16..235 or HBD equivalent)
486 * 1 = Full range (0..255 or HBD equivalent)
Ronald S. Bultjeeeb5ef02015-09-15 21:56:51 -0400487 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700488 AV1E_SET_COLOR_RANGE,
Yaowu Xu7c514e22015-09-28 15:55:46 -0700489
Yaowu Xu7c514e22015-09-28 15:55:46 -0700490 /*!\brief Codec control function to set intended rendering image size.
491 *
492 * By default, this is identical to the image size in pixels.
Yaowu Xu7c514e22015-09-28 15:55:46 -0700493 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700494 AV1E_SET_RENDER_SIZE,
Geza Lore454989f2016-03-24 13:56:05 +0000495
hui sube3f0692016-05-05 15:37:37 -0700496 /*!\brief Codec control function to set target level.
497 *
498 * 255: off (default); 0: only keep level stats; 10: target for level 1.0;
499 * 11: target for level 1.1; ... 62: target for level 6.2
hui sube3f0692016-05-05 15:37:37 -0700500 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700501 AV1E_SET_TARGET_LEVEL,
hui su72d48902016-05-05 12:04:42 -0700502
503 /*!\brief Codec control function to get bitstream level.
hui su72d48902016-05-05 12:04:42 -0700504 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700505 AV1E_GET_LEVEL,
Yaowu Xu6fe07a22016-07-14 10:57:35 -0700506
Geza Lore454989f2016-03-24 13:56:05 +0000507 /*!\brief Codec control function to set intended superblock size.
508 *
509 * By default, the superblock size is determined separately for each
510 * frame by the encoder.
Alex Converse85370ae2016-12-13 11:18:28 -0800511 *
512 * Experiment: EXT_PARTITION
Geza Lore454989f2016-03-24 13:56:05 +0000513 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700514 AV1E_SET_SUPERBLOCK_SIZE,
Alex Converse85370ae2016-12-13 11:18:28 -0800515
516 /*!\brief Codec control function to enable automatic set and use
517 * bwd-pred frames.
518 *
Alex Converse85370ae2016-12-13 11:18:28 -0800519 */
520 AOME_SET_ENABLEAUTOBWDREF,
521
Steinar Midtskogene44c6222017-11-09 13:22:09 +0100522 /*!\brief Codec control function to encode with CDEF.
523 *
524 * CDEF is the constrained directional enhancement filter which is an
525 * in-loop filter aiming to remove coding artifacts
526 * 0 = do not apply CDEF
527 * 1 = apply CDEF
528 *
529 * By default, the encoder applies CDEF.
530 *
531 * Experiment: AOM_CDEF
532 */
533 AV1E_SET_ENABLE_CDEF,
534
Sebastien Alaiwan1ed20242018-02-20 14:47:18 +0100535 /*!\brief Codec control function to encode with Loop Restoration Filter.
536 *
537 * 0 = do not apply Restoration Filter
538 * 1 = apply Restoration Filter
539 *
540 * By default, the encoder applies Restoration Filter.
541 *
542 */
543 AV1E_SET_ENABLE_RESTORATION,
544
Alex Converse85370ae2016-12-13 11:18:28 -0800545 /*!\brief Codec control function to encode with quantisation matrices.
546 *
547 * AOM can operate with default quantisation matrices dependent on
548 * quantisation level and block type.
549 * 0 = do not use quantisation matrices
550 * 1 = use quantisation matrices
551 *
552 * By default, the encoder operates without quantisation matrices.
553 *
554 * Experiment: AOM_QM
555 */
556 AV1E_SET_ENABLE_QM,
557
558 /*!\brief Codec control function to set the min quant matrix flatness.
559 *
560 * AOM can operate with different ranges of quantisation matrices.
561 * As quantisation levels increase, the matrices get flatter. This
562 * control sets the minimum level of flatness from which the matrices
563 * are determined.
564 *
565 * By default, the encoder sets this minimum at half the available
566 * range.
567 *
568 * Experiment: AOM_QM
569 */
570 AV1E_SET_QM_MIN,
571
572 /*!\brief Codec control function to set the max quant matrix flatness.
573 *
574 * AOM can operate with different ranges of quantisation matrices.
575 * As quantisation levels increase, the matrices get flatter. This
576 * control sets the maximum level of flatness possible.
577 *
578 * By default, the encoder sets this maximum at the top of the
579 * available range.
580 *
581 * Experiment: AOM_QM
582 */
583 AV1E_SET_QM_MAX,
584
Yaowu Xuf7a12422018-01-31 15:29:20 -0800585 /*!\brief Codec control function to set the min quant matrix flatness.
586 *
587 * AOM can operate with different ranges of quantisation matrices.
588 * As quantisation levels increase, the matrices get flatter. This
589 * control sets the flatness for luma (Y).
590 *
591 * By default, the encoder sets this minimum at half the available
592 * range.
593 *
594 * Experiment: AOM_QM
595 */
596 AV1E_SET_QM_Y,
597
598 /*!\brief Codec control function to set the min quant matrix flatness.
599 *
600 * AOM can operate with different ranges of quantisation matrices.
601 * As quantisation levels increase, the matrices get flatter. This
602 * control sets the flatness for chroma (U).
603 *
604 * By default, the encoder sets this minimum at half the available
605 * range.
606 *
607 * Experiment: AOM_QM
608 */
609 AV1E_SET_QM_U,
610
611 /*!\brief Codec control function to set the min quant matrix flatness.
612 *
613 * AOM can operate with different ranges of quantisation matrices.
614 * As quantisation levels increase, the matrices get flatter. This
615 * control sets the flatness for chrome (V).
616 *
617 * By default, the encoder sets this minimum at half the available
618 * range.
619 *
620 * Experiment: AOM_QM
621 */
622 AV1E_SET_QM_V,
623
Yushin Chod808bfc2017-08-10 15:54:36 -0700624 /*!\brief Codec control function to encode with dist_8x8.
625 *
626 * The dist_8x8 is enabled automatically for model tuning parameters that
627 * require measuring distortion at the 8x8 level. This control also allows
628 * measuring distortion at the 8x8 level for other tuning options
629 * (e.g., PSNR), for testing purposes.
630 * 0 = do not use dist_8x8
631 * 1 = use dist_8x8
632 *
633 * By default, the encoder does not use dist_8x8
634 *
635 * Experiment: DIST_8X8
636 */
637 AV1E_SET_ENABLE_DIST_8X8,
638
Alex Converse85370ae2016-12-13 11:18:28 -0800639 /*!\brief Codec control function to set a maximum number of tile groups.
640 *
641 * This will set the maximum number of tile groups. This will be
642 * overridden if an MTU size is set. The default value is 1.
643 *
644 * Experiment: TILE_GROUPS
645 */
646 AV1E_SET_NUM_TG,
647
648 /*!\brief Codec control function to set an MTU size for a tile group.
649 *
650 * This will set the maximum number of bytes in a tile group. This can be
651 * exceeded only if a single tile is larger than this amount.
652 *
653 * By default, the value is 0, in which case a fixed number of tile groups
654 * is used.
655 *
656 * Experiment: TILE_GROUPS
657 */
658 AV1E_SET_MTU,
Alex Converseeb780e72016-12-13 12:46:41 -0800659
Fangwen Fu7b9f2b32017-01-17 14:01:52 -0800660 /*!\brief Codec control function to set dependent_horz_tiles.
Andrey Norkin9e694632017-12-21 18:50:57 -0800661 *
662 * In encoding and decoding, AV1 allows enabling dependent horizontal tile
663 * The parameter for this control describes the value of this flag,
664 * which has a valid range [0, 1]:
665 * 0 = disable dependent horizontal tile
666 * 1 = enable dependent horizontal tile,
667 *
668 * By default, the value is 0, i.e. disable dependent horizontal tile.
669 */
Fangwen Fu7b9f2b32017-01-17 14:01:52 -0800670 AV1E_SET_TILE_DEPENDENT_ROWS,
671
Alex Converseeb780e72016-12-13 12:46:41 -0800672 /*!\brief Codec control function to set the number of symbols in an ANS data
673 * window.
674 *
675 * The number of ANS symbols (both boolean and non-booleans alphabets) in an
676 * ANS data window is set to 1 << value.
677 *
678 * \note Valid range: [8, 23]
679 *
680 * Experiment: ANS
681 */
682 AV1E_SET_ANS_WINDOW_SIZE_LOG2,
Alex Converse00b7e272017-03-22 18:14:08 -0700683
684 /*!\brief Codec control function to set temporal mv prediction
Andrey Norkin9e694632017-12-21 18:50:57 -0800685 * enabling/disabling.
686 *
687 * This will enable or disable temporal mv predicton. The default value is 0.
688 *
689 * Experiment: TEMPMV_SIGNALING
690 */
Alex Converse00b7e272017-03-22 18:14:08 -0700691 AV1E_SET_DISABLE_TEMPMV,
692
Jingning Hana446f552018-02-22 15:42:12 -0800693 /*!\brief Codec control function to turn on / off dual filter
694 * enabling/disabling.
695 *
696 * This will enable or disable dual filter. The default value is 1
697 *
698 */
699 AV1E_SET_ENABLE_DF,
700
Lei7bb501d2017-12-13 15:10:34 -0800701 /*!\brief Codec control function to set loop_filter_across_tiles_v_enabled
702 * and loop_filter_across_tiles_h_enabled.
703 * In encoding and decoding, AV1 allows disabling loop filter across tile
704 * boundary The parameter for this control describes the value of this flag,
705 * which has a valid range [0, 1]:
706 * 0 = disable loop filter across tile boundary
707 * 1 = enable loop filter across tile boundary
708 *
709 * By default, the value is 1, i.e. enable loop filter across tile boundary.
710 *
711 * Experiment: LOOPFILTERING_ACROSS_TILES_EXT
712 */
713 AV1E_SET_TILE_LOOPFILTER_V,
714 AV1E_SET_TILE_LOOPFILTER_H,
715
Alex Converse00b7e272017-03-22 18:14:08 -0700716 /*!\brief Codec control function to set loop_filter_across_tiles_enabled.
717 *
718 * In encoding and decoding, AV1 allows disabling loop filter across tile
719 * boundary The parameter for this control describes the value of this flag,
720 * which has a valid range [0, 1]:
721 * 0 = disable loop filter across tile boundary
722 * 1 = enable loop filter across tile boundary
723 *
724 * By default, the value is 1, i.e. enable loop filter across tile boundary.
725 *
726 * Experiment: LOOPFILTERING_ACROSS_TILES
727 */
728 AV1E_SET_TILE_LOOPFILTER,
Yunqing Wangd8cd55f2017-02-27 12:16:00 -0800729
Fangwen Fu6160df22017-04-24 09:45:51 -0700730 /*!\brief Codec control function to set the delta q mode
Andrey Norkin9e694632017-12-21 18:50:57 -0800731 *
732 * AV1 has a segment based feature that allows encoder to adaptively change
733 * quantization parameter for each segment within a frame to improve the
734 * subjective quality. the delta q mode is added on top of segment based
735 * feature, and allows control per 64x64 q and lf delta.This control makes
736 * encoder operate in one of the several DELTA_Q_modes supported.
737 *
738 * By default, encoder operates with DELTAQ_Mode 0(deltaq signaling off).
739 */
Fangwen Fu6160df22017-04-24 09:45:51 -0700740 AV1E_SET_DELTAQ_MODE,
741
Yunqing Wangeeb08a92017-07-07 21:25:18 -0700742 /*!\brief Codec control function to set the single tile decoding mode to 0 or
743 * 1.
Yunqing Wangd8cd55f2017-02-27 12:16:00 -0800744 *
Yunqing Wangeeb08a92017-07-07 21:25:18 -0700745 * 0 means that the single tile decoding is off, and 1 means that the single
746 * tile decoding is on.
Yunqing Wangd8cd55f2017-02-27 12:16:00 -0800747 *
748 * Experiment: EXT_TILE
749 */
Yunqing Wangeeb08a92017-07-07 21:25:18 -0700750 AV1E_SET_SINGLE_TILE_DECODING,
Yunqing Wangff4fa062017-04-21 10:56:08 -0700751
752 /*!\brief Codec control function to enable the extreme motion vector unit test
753 * in AV1. Please note that this is only used in motion vector unit test.
754 *
755 * 0 : off, 1 : MAX_EXTREME_MV, 2 : MIN_EXTREME_MV
756 */
757 AV1E_ENABLE_MOTION_VECTOR_UNIT_TEST,
Andrey Norkin28e9ce22018-01-08 10:11:21 -0800758
759 /*!\brief Codec control function to signal picture timing info in the
760 * bitstream. \note Valid ranges: 0..1, default is "UNKNOWN". 0 = UNKNOWN, 1 =
761 * EQUAL
762 */
763 AV1E_SET_TIMING_INFO,
Andrey Norkin6f1c2f72018-01-15 20:08:52 -0800764
765 /*!\brief Codec control function to add film grain parameters (one of several
766 * preset types) info in the bitstream.
767 * \note Valid ranges: 0..11, default is "0". 0 = UNKNOWN,
768 * 1..16 = different test vectors for grain
769 */
770 AV1E_SET_FILM_GRAIN_TEST_VECTOR,
John Koleszarb0da9b32010-12-17 09:43:39 -0500771};
John Koleszar0ea50ce2010-05-18 11:58:33 -0400772
Yaowu Xuf883b422016-08-30 14:01:10 -0700773/*!\brief aom 1-D scaling mode
John Koleszar0ea50ce2010-05-18 11:58:33 -0400774 *
Yaowu Xuf883b422016-08-30 14:01:10 -0700775 * This set of constants define 1-D aom scaling modes
John Koleszar0ea50ce2010-05-18 11:58:33 -0400776 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700777typedef enum aom_scaling_mode_1d {
778 AOME_NORMAL = 0,
779 AOME_FOURFIVE = 1,
780 AOME_THREEFIVE = 2,
781 AOME_ONETWO = 3
782} AOM_SCALING_MODE;
John Koleszar0ea50ce2010-05-18 11:58:33 -0400783
Yaowu Xuc5bf1e02017-09-26 13:51:29 -0700784/*!\brief Max number of segments
785 *
786 * This is the limit of number of segments allowed within a frame.
787 *
788 * Currently same as "MAX_SEGMENTS" in AV1, the maximum that AV1 supports.
789 *
790 */
791#define AOM_MAX_SEGMENTS 8
792
Yaowu Xuf883b422016-08-30 14:01:10 -0700793/*!\brief aom region of interest map
John Koleszar0ea50ce2010-05-18 11:58:33 -0400794 *
795 * These defines the data structures for the region of interest map
796 *
Yaowu Xuc5bf1e02017-09-26 13:51:29 -0700797 * TODO(yaowu): create a unit test for ROI map related APIs
798 *
John Koleszar0ea50ce2010-05-18 11:58:33 -0400799 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700800typedef struct aom_roi_map {
Yaowu Xuc5bf1e02017-09-26 13:51:29 -0700801 /*! An id between 0 and 7 for each 8x8 region within a frame. */
Adrian Grangef58eca92013-10-24 15:11:36 -0700802 unsigned char *roi_map;
Yaowu Xuc5bf1e02017-09-26 13:51:29 -0700803 unsigned int rows; /**< Number of rows. */
804 unsigned int cols; /**< Number of columns. */
805 int delta_q[AOM_MAX_SEGMENTS]; /**< Quantizer deltas. */
806 int delta_lf[AOM_MAX_SEGMENTS]; /**< Loop filter deltas. */
Adrian Grangef58eca92013-10-24 15:11:36 -0700807 /*! Static breakout threshold for each segment. */
Yaowu Xuc5bf1e02017-09-26 13:51:29 -0700808 unsigned int static_threshold[AOM_MAX_SEGMENTS];
Yaowu Xuf883b422016-08-30 14:01:10 -0700809} aom_roi_map_t;
John Koleszar0ea50ce2010-05-18 11:58:33 -0400810
Yaowu Xuf883b422016-08-30 14:01:10 -0700811/*!\brief aom active region map
John Koleszar0ea50ce2010-05-18 11:58:33 -0400812 *
813 * These defines the data structures for active region map
814 *
815 */
816
Yaowu Xuf883b422016-08-30 14:01:10 -0700817typedef struct aom_active_map {
clang-format83a52072016-08-08 20:22:13 -0700818 /*!\brief specify an on (1) or off (0) each 16x16 region within a frame */
819 unsigned char *active_map;
820 unsigned int rows; /**< number of rows */
821 unsigned int cols; /**< number of cols */
Yaowu Xuf883b422016-08-30 14:01:10 -0700822} aom_active_map_t;
John Koleszar0ea50ce2010-05-18 11:58:33 -0400823
Yaowu Xuf883b422016-08-30 14:01:10 -0700824/*!\brief aom image scaling mode
John Koleszar0ea50ce2010-05-18 11:58:33 -0400825 *
826 * This defines the data structure for image scaling mode
827 *
828 */
Yaowu Xuf883b422016-08-30 14:01:10 -0700829typedef struct aom_scaling_mode {
830 AOM_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */
831 AOM_SCALING_MODE v_scaling_mode; /**< vertical scaling mode */
832} aom_scaling_mode_t;
John Koleszar0ea50ce2010-05-18 11:58:33 -0400833
Yaowu Xuf883b422016-08-30 14:01:10 -0700834/*!brief AV1 encoder content type */
Alex Converse572de922014-07-31 08:27:32 -0700835typedef enum {
Yaowu Xuf883b422016-08-30 14:01:10 -0700836 AOM_CONTENT_DEFAULT,
837 AOM_CONTENT_SCREEN,
838 AOM_CONTENT_INVALID
839} aom_tune_content;
John Koleszar0ea50ce2010-05-18 11:58:33 -0400840
Andrey Norkin28e9ce22018-01-08 10:11:21 -0800841/*!brief AV1 encoder timing info signaling */
842typedef enum { AOM_TIMING_UNSPECIFIED, AOM_TIMING_EQUAL } aom_timing_info_t;
843
Alex Converse6e3c8052016-12-16 09:48:56 -0800844/*!\brief Model tuning parameters
John Koleszarb0da9b32010-12-17 09:43:39 -0500845 *
846 * Changes the encoder to tune for certain types of input material.
847 *
848 */
Yushin Chod808bfc2017-08-10 15:54:36 -0700849typedef enum {
850 AOM_TUNE_PSNR,
851 AOM_TUNE_SSIM,
Yushin Chod808bfc2017-08-10 15:54:36 -0700852 AOM_TUNE_CDEF_DIST,
853 AOM_TUNE_DAALA_DIST
Yushin Chod808bfc2017-08-10 15:54:36 -0700854} aom_tune_metric;
John Koleszarb0da9b32010-12-17 09:43:39 -0500855
James Zern7dd7a7d2015-10-09 16:31:17 -0700856/*!\cond */
Alex Converse6e3c8052016-12-16 09:48:56 -0800857/*!\brief Encoder control function parameter type
John Koleszar0ea50ce2010-05-18 11:58:33 -0400858 *
Alex Converse6e3c8052016-12-16 09:48:56 -0800859 * Defines the data types that AOME/AV1E control functions take. Note that
Yaowu Xuf883b422016-08-30 14:01:10 -0700860 * additional common controls are defined in aom.h
John Koleszar0ea50ce2010-05-18 11:58:33 -0400861 *
862 */
863
Ryan Overbecka5fefa72017-09-19 11:39:10 -0700864AOM_CTRL_USE_TYPE(AOME_USE_REFERENCE, int)
Yaowu Xuf883b422016-08-30 14:01:10 -0700865#define AOM_CTRL_AOME_USE_REFERENCE
Yaowu Xuf883b422016-08-30 14:01:10 -0700866AOM_CTRL_USE_TYPE(AOME_SET_ROI_MAP, aom_roi_map_t *)
867#define AOM_CTRL_AOME_SET_ROI_MAP
868AOM_CTRL_USE_TYPE(AOME_SET_ACTIVEMAP, aom_active_map_t *)
869#define AOM_CTRL_AOME_SET_ACTIVEMAP
870AOM_CTRL_USE_TYPE(AOME_SET_SCALEMODE, aom_scaling_mode_t *)
871#define AOM_CTRL_AOME_SET_SCALEMODE
John Koleszar0ea50ce2010-05-18 11:58:33 -0400872
Soo-Chul Hanf8589862018-01-24 03:13:14 +0000873AOM_CTRL_USE_TYPE(AOME_SET_ENHANCEMENT_LAYER_ID, int)
874#define AOM_CTRL_AOME_SET_ENHANCEMENT_LAYER_ID
875
Yaowu Xuf883b422016-08-30 14:01:10 -0700876AOM_CTRL_USE_TYPE(AOME_SET_CPUUSED, int)
877#define AOM_CTRL_AOME_SET_CPUUSED
Jingning Hanb49c6ae2017-11-27 18:14:05 -0800878AOM_CTRL_USE_TYPE(AOME_SET_DEVSF, int)
879#define AOM_CTRL_AOME_SET_DEVSF
Yaowu Xuf883b422016-08-30 14:01:10 -0700880AOM_CTRL_USE_TYPE(AOME_SET_ENABLEAUTOALTREF, unsigned int)
881#define AOM_CTRL_AOME_SET_ENABLEAUTOALTREF
Zoe Liucf5083d2016-02-04 09:47:46 -0800882
Yaowu Xuf883b422016-08-30 14:01:10 -0700883AOM_CTRL_USE_TYPE(AOME_SET_ENABLEAUTOBWDREF, unsigned int)
884#define AOM_CTRL_AOME_SET_ENABLEAUTOBWDREF
Zoe Liucf5083d2016-02-04 09:47:46 -0800885
Yaowu Xuf883b422016-08-30 14:01:10 -0700886AOM_CTRL_USE_TYPE(AOME_SET_SHARPNESS, unsigned int)
887#define AOM_CTRL_AOME_SET_SHARPNESS
888AOM_CTRL_USE_TYPE(AOME_SET_STATIC_THRESHOLD, unsigned int)
889#define AOM_CTRL_AOME_SET_STATIC_THRESHOLD
John Koleszar0ea50ce2010-05-18 11:58:33 -0400890
Yaowu Xuf883b422016-08-30 14:01:10 -0700891AOM_CTRL_USE_TYPE(AOME_SET_ARNR_MAXFRAMES, unsigned int)
892#define AOM_CTRL_AOME_SET_ARNR_MAXFRAMES
893AOM_CTRL_USE_TYPE(AOME_SET_ARNR_STRENGTH, unsigned int)
894#define AOM_CTRL_AOME_SET_ARNR_STRENGTH
Yaowu Xuf883b422016-08-30 14:01:10 -0700895AOM_CTRL_USE_TYPE(AOME_SET_TUNING, int) /* aom_tune_metric */
896#define AOM_CTRL_AOME_SET_TUNING
897AOM_CTRL_USE_TYPE(AOME_SET_CQ_LEVEL, unsigned int)
898#define AOM_CTRL_AOME_SET_CQ_LEVEL
John Koleszar0ea50ce2010-05-18 11:58:33 -0400899
Yaowu Xuf883b422016-08-30 14:01:10 -0700900AOM_CTRL_USE_TYPE(AV1E_SET_TILE_COLUMNS, int)
901#define AOM_CTRL_AV1E_SET_TILE_COLUMNS
902AOM_CTRL_USE_TYPE(AV1E_SET_TILE_ROWS, int)
903#define AOM_CTRL_AV1E_SET_TILE_ROWS
Fangwen Fu7b9f2b32017-01-17 14:01:52 -0800904
Fangwen Fu7b9f2b32017-01-17 14:01:52 -0800905AOM_CTRL_USE_TYPE(AV1E_SET_TILE_DEPENDENT_ROWS, int)
906#define AOM_CTRL_AV1E_SET_TILE_DEPENDENT_ROWS
Fangwen Fu7b9f2b32017-01-17 14:01:52 -0800907
Lei7bb501d2017-12-13 15:10:34 -0800908AOM_CTRL_USE_TYPE(AV1E_SET_TILE_LOOPFILTER_V, int)
909#define AOM_CTRL_AV1E_SET_TILE_LOOPFILTER_V
910AOM_CTRL_USE_TYPE(AV1E_SET_TILE_LOOPFILTER_H, int)
911#define AOM_CTRL_AV1E_SET_TILE_LOOPFILTER_H
Ryan Lei7386eda2016-12-08 21:08:31 -0800912AOM_CTRL_USE_TYPE(AV1E_SET_TILE_LOOPFILTER, int)
913#define AOM_CTRL_AV1E_SET_TILE_LOOPFILTER
Ronald S. Bultje1407bdc2013-02-01 09:35:28 -0800914
Yaowu Xuf883b422016-08-30 14:01:10 -0700915AOM_CTRL_USE_TYPE(AOME_GET_LAST_QUANTIZER, int *)
916#define AOM_CTRL_AOME_GET_LAST_QUANTIZER
917AOM_CTRL_USE_TYPE(AOME_GET_LAST_QUANTIZER_64, int *)
918#define AOM_CTRL_AOME_GET_LAST_QUANTIZER_64
John Koleszar0ea50ce2010-05-18 11:58:33 -0400919
Yaowu Xuf883b422016-08-30 14:01:10 -0700920AOM_CTRL_USE_TYPE(AOME_SET_MAX_INTRA_BITRATE_PCT, unsigned int)
921#define AOM_CTRL_AOME_SET_MAX_INTRA_BITRATE_PCT
922AOM_CTRL_USE_TYPE(AOME_SET_MAX_INTER_BITRATE_PCT, unsigned int)
923#define AOM_CTRL_AOME_SET_MAX_INTER_BITRATE_PCT
John Koleszar1654ae92011-07-28 09:17:32 -0400924
Soo-Chul Hanf8589862018-01-24 03:13:14 +0000925AOM_CTRL_USE_TYPE(AOME_SET_NUMBER_SPATIAL_LAYERS, int)
926#define AOME_CTRL_AOME_SET_NUMBER_SPATIAL_LAYERS
927
Yaowu Xuf883b422016-08-30 14:01:10 -0700928AOM_CTRL_USE_TYPE(AV1E_SET_GF_CBR_BOOST_PCT, unsigned int)
929#define AOM_CTRL_AV1E_SET_GF_CBR_BOOST_PCT
Yaowu Xu41652902015-03-12 17:59:18 -0700930
Yaowu Xuf883b422016-08-30 14:01:10 -0700931AOM_CTRL_USE_TYPE(AV1E_SET_LOSSLESS, unsigned int)
932#define AOM_CTRL_AV1E_SET_LOSSLESS
John Koleszar1654ae92011-07-28 09:17:32 -0400933
Steinar Midtskogene44c6222017-11-09 13:22:09 +0100934AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_CDEF, unsigned int)
935#define AOM_CTRL_AV1E_SET_ENABLE_CDEF
936
Sebastien Alaiwan1ed20242018-02-20 14:47:18 +0100937AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_RESTORATION, unsigned int)
938#define AOM_CTRL_AV1E_SET_ENABLE_RESTORATION
939
Yaowu Xuf883b422016-08-30 14:01:10 -0700940AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_QM, unsigned int)
941#define AOM_CTRL_AV1E_SET_ENABLE_QM
Yaowu Xu0818a7c2016-08-11 09:39:47 -0700942
Yushin Chod808bfc2017-08-10 15:54:36 -0700943AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_DIST_8X8, unsigned int)
944#define AOM_CTRL_AV1E_SET_ENABLE_DIST_8X8
945
Yaowu Xuf883b422016-08-30 14:01:10 -0700946AOM_CTRL_USE_TYPE(AV1E_SET_QM_MIN, unsigned int)
947#define AOM_CTRL_AV1E_SET_QM_MIN
Yaowu Xu0818a7c2016-08-11 09:39:47 -0700948
Yaowu Xuf883b422016-08-30 14:01:10 -0700949AOM_CTRL_USE_TYPE(AV1E_SET_QM_MAX, unsigned int)
950#define AOM_CTRL_AV1E_SET_QM_MAX
Yaowu Xu0818a7c2016-08-11 09:39:47 -0700951
Yaowu Xuf7a12422018-01-31 15:29:20 -0800952AOM_CTRL_USE_TYPE(AV1E_SET_QM_Y, unsigned int)
953#define AOM_CTRL_AV1E_SET_QM_Y
954
955AOM_CTRL_USE_TYPE(AV1E_SET_QM_U, unsigned int)
956#define AOM_CTRL_AV1E_SET_QM_U
957
958AOM_CTRL_USE_TYPE(AV1E_SET_QM_V, unsigned int)
959#define AOM_CTRL_AV1E_SET_QM_V
960
Thomas Daviesaf6df172016-11-09 14:04:18 +0000961AOM_CTRL_USE_TYPE(AV1E_SET_NUM_TG, unsigned int)
962#define AOM_CTRL_AV1E_SET_NUM_TG
963AOM_CTRL_USE_TYPE(AV1E_SET_MTU, unsigned int)
964#define AOM_CTRL_AV1E_SET_MTU
Thomas Daviesaf6df172016-11-09 14:04:18 +0000965
Andrey Norkin28e9ce22018-01-08 10:11:21 -0800966AOM_CTRL_USE_TYPE(AV1E_SET_TIMING_INFO, aom_timing_info_t)
967#define AOM_CTRL_AV1E_SET_TIMING_INFO
968
Fangwen Fu8d164de2016-12-14 13:40:54 -0800969AOM_CTRL_USE_TYPE(AV1E_SET_DISABLE_TEMPMV, unsigned int)
970#define AOM_CTRL_AV1E_SET_DISABLE_TEMPMV
Fangwen Fu8d164de2016-12-14 13:40:54 -0800971
Jingning Hana446f552018-02-22 15:42:12 -0800972AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_DF, unsigned int)
973#define AOM_CTRL_AV1E_SET_ENABLE_DF
974
Yaowu Xuf883b422016-08-30 14:01:10 -0700975AOM_CTRL_USE_TYPE(AV1E_SET_FRAME_PARALLEL_DECODING, unsigned int)
976#define AOM_CTRL_AV1E_SET_FRAME_PARALLEL_DECODING
Ivan Maltz01b35c32013-09-05 08:55:47 -0700977
Yaowu Xuf883b422016-08-30 14:01:10 -0700978AOM_CTRL_USE_TYPE(AV1E_SET_AQ_MODE, unsigned int)
979#define AOM_CTRL_AV1E_SET_AQ_MODE
Guillaume Martres17084652013-11-14 19:23:57 +0100980
Fangwen Fu6160df22017-04-24 09:45:51 -0700981AOM_CTRL_USE_TYPE(AV1E_SET_DELTAQ_MODE, unsigned int)
982#define AOM_CTRL_AV1E_SET_DELTAQ_MODE
983
Yaowu Xuf883b422016-08-30 14:01:10 -0700984AOM_CTRL_USE_TYPE(AV1E_SET_FRAME_PERIODIC_BOOST, unsigned int)
985#define AOM_CTRL_AV1E_SET_FRAME_PERIODIC_BOOST
Marco Paniconi0eb88c92014-04-03 15:49:03 -0700986
Yaowu Xuf883b422016-08-30 14:01:10 -0700987AOM_CTRL_USE_TYPE(AV1E_SET_NOISE_SENSITIVITY, unsigned int)
988#define AOM_CTRL_AV1E_SET_NOISE_SENSITIVITY
JackyChenbb1a2362014-09-12 11:48:44 -0700989
Yaowu Xuf883b422016-08-30 14:01:10 -0700990AOM_CTRL_USE_TYPE(AV1E_SET_TUNE_CONTENT, int) /* aom_tune_content */
991#define AOM_CTRL_AV1E_SET_TUNE_CONTENT
Yaowu Xue94b4152015-01-13 10:07:20 -0800992
Andrey Norkin9e694632017-12-21 18:50:57 -0800993AOM_CTRL_USE_TYPE(AV1E_SET_COLOR_PRIMARIES, int)
994#define AOM_CTRL_AV1E_SET_COLOR_PRIMARIES
995
996AOM_CTRL_USE_TYPE(AV1E_SET_TRANSFER_CHARACTERISTICS, int)
997#define AOM_CTRL_AV1E_SET_TRANSFER_CHARACTERISTICS
998
999AOM_CTRL_USE_TYPE(AV1E_SET_MATRIX_COEFFICIENTS, int)
1000#define AOM_CTRL_AV1E_SET_MATRIX_COEFFICIENTS
1001
Yaowu Xuf883b422016-08-30 14:01:10 -07001002AOM_CTRL_USE_TYPE(AV1E_SET_COLOR_SPACE, int)
1003#define AOM_CTRL_AV1E_SET_COLOR_SPACE
Alex Converse4dcb8392015-03-20 14:55:43 -07001004
anorkin76fb1262017-03-22 15:12:12 -07001005AOM_CTRL_USE_TYPE(AV1E_SET_TRANSFER_FUNCTION, int)
1006#define AOM_CTRL_AV1E_SET_TRANSFER_FUNCTION
1007
1008AOM_CTRL_USE_TYPE(AV1E_SET_CHROMA_SAMPLE_POSITION, int)
1009#define AOM_CTRL_AV1E_SET_CHROMA_SAMPLE_POSITION
anorkin76fb1262017-03-22 15:12:12 -07001010
Yaowu Xuf883b422016-08-30 14:01:10 -07001011AOM_CTRL_USE_TYPE(AV1E_SET_MIN_GF_INTERVAL, unsigned int)
1012#define AOM_CTRL_AV1E_SET_MIN_GF_INTERVAL
Debargha Mukherjee98526432015-04-01 16:39:06 -07001013
Yaowu Xuf883b422016-08-30 14:01:10 -07001014AOM_CTRL_USE_TYPE(AV1E_SET_MAX_GF_INTERVAL, unsigned int)
1015#define AOM_CTRL_AV1E_SET_MAX_GF_INTERVAL
Debargha Mukherjee98526432015-04-01 16:39:06 -07001016
Yaowu Xuf883b422016-08-30 14:01:10 -07001017AOM_CTRL_USE_TYPE(AV1E_GET_ACTIVEMAP, aom_active_map_t *)
1018#define AOM_CTRL_AV1E_GET_ACTIVEMAP
Ronald S. Bultjeeeb5ef02015-09-15 21:56:51 -04001019
Yaowu Xuf883b422016-08-30 14:01:10 -07001020AOM_CTRL_USE_TYPE(AV1E_SET_COLOR_RANGE, int)
1021#define AOM_CTRL_AV1E_SET_COLOR_RANGE
Yaowu Xu7c514e22015-09-28 15:55:46 -07001022
Yaowu Xu7c514e22015-09-28 15:55:46 -07001023/*!\brief
1024 *
1025 * TODO(rbultje) : add support of the control in ffmpeg
1026 */
Yaowu Xuf883b422016-08-30 14:01:10 -07001027#define AOM_CTRL_AV1E_SET_RENDER_SIZE
1028AOM_CTRL_USE_TYPE(AV1E_SET_RENDER_SIZE, int *)
Geza Lore454989f2016-03-24 13:56:05 +00001029
Yaowu Xuf883b422016-08-30 14:01:10 -07001030AOM_CTRL_USE_TYPE(AV1E_SET_SUPERBLOCK_SIZE, unsigned int)
1031#define AOM_CTRL_AV1E_SET_SUPERBLOCK_SIZE
James Zern7dd7a7d2015-10-09 16:31:17 -07001032
Yaowu Xuf883b422016-08-30 14:01:10 -07001033AOM_CTRL_USE_TYPE(AV1E_SET_TARGET_LEVEL, unsigned int)
1034#define AOM_CTRL_AV1E_SET_TARGET_LEVEL
hui sube3f0692016-05-05 15:37:37 -07001035
Yaowu Xuf883b422016-08-30 14:01:10 -07001036AOM_CTRL_USE_TYPE(AV1E_GET_LEVEL, int *)
1037#define AOM_CTRL_AV1E_GET_LEVEL
Alex Converseeb780e72016-12-13 12:46:41 -08001038
1039AOM_CTRL_USE_TYPE(AV1E_SET_ANS_WINDOW_SIZE_LOG2, unsigned int)
1040#define AOM_CTRL_AV1E_SET_ANS_WINDOW_SIZE_LOG2
Yunqing Wangd8cd55f2017-02-27 12:16:00 -08001041
Yunqing Wangeeb08a92017-07-07 21:25:18 -07001042AOM_CTRL_USE_TYPE(AV1E_SET_SINGLE_TILE_DECODING, unsigned int)
1043#define AOM_CTRL_AV1E_SET_SINGLE_TILE_DECODING
Yunqing Wangff4fa062017-04-21 10:56:08 -07001044
1045AOM_CTRL_USE_TYPE(AV1E_ENABLE_MOTION_VECTOR_UNIT_TEST, unsigned int)
1046#define AOM_CTRL_AV1E_ENABLE_MOTION_VECTOR_UNIT_TEST
1047
Andrey Norkin6f1c2f72018-01-15 20:08:52 -08001048AOM_CTRL_USE_TYPE(AV1E_SET_FILM_GRAIN_TEST_VECTOR, unsigned int)
1049#define AOM_CTRL_AV1E_SET_FILM_GRAIN_TEST_VECTOR
1050
Hui Su1cb1c002018-02-05 18:21:20 -08001051AOM_CTRL_USE_TYPE(AV1E_SET_CDF_UPDATE_MODE, int)
1052#define AOM_CTRL_AV1E_SET_CDF_UPDATE_MODE
1053
James Zern7dd7a7d2015-10-09 16:31:17 -07001054/*!\endcond */
Alex Conversec77b2ff2016-12-12 17:29:32 -08001055/*! @} - end defgroup aom_encoder */
Dmitry Kovaleve288c602013-09-29 18:00:15 -07001056#ifdef __cplusplus
1057} // extern "C"
1058#endif
1059
Yaowu Xuf883b422016-08-30 14:01:10 -07001060#endif // AOM_AOMCX_H_