Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/aom/aom_codec.h
Line
Count
Source (jump to first uncovered line)
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
12
/*!\defgroup codec Common Algorithm Interface
13
 * This abstraction allows applications to easily support multiple video
14
 * formats with minimal code duplication. This section describes the interface
15
 * common to all codecs (both encoders and decoders).
16
 * @{
17
 */
18
19
/*!\file
20
 * \brief Describes the codec algorithm interface to applications.
21
 *
22
 * This file describes the interface between an application and a
23
 * video codec algorithm.
24
 *
25
 * An application instantiates a specific codec instance by using
26
 * aom_codec_init() and a pointer to the algorithm's interface structure:
27
 *     <pre>
28
 *     my_app.c:
29
 *       extern aom_codec_iface_t my_codec;
30
 *       {
31
 *           aom_codec_ctx_t algo;
32
 *           res = aom_codec_init(&algo, &my_codec);
33
 *       }
34
 *     </pre>
35
 *
36
 * Once initialized, the instance is managed using other functions from
37
 * the aom_codec_* family.
38
 */
39
#ifndef AOM_AOM_AOM_CODEC_H_
40
#define AOM_AOM_AOM_CODEC_H_
41
42
#ifdef __cplusplus
43
extern "C" {
44
#endif
45
46
#include "aom/aom_image.h"
47
#include "aom/aom_integer.h"
48
49
/*!\brief Decorator indicating a function is deprecated */
50
#ifndef AOM_DEPRECATED
51
#if defined(__GNUC__) && __GNUC__
52
#define AOM_DEPRECATED __attribute__((deprecated))
53
#elif defined(_MSC_VER)
54
#define AOM_DEPRECATED
55
#else
56
#define AOM_DEPRECATED
57
#endif
58
#endif /* AOM_DEPRECATED */
59
60
#ifndef AOM_DECLSPEC_DEPRECATED
61
#if defined(__GNUC__) && __GNUC__
62
#define AOM_DECLSPEC_DEPRECATED /**< \copydoc #AOM_DEPRECATED */
63
#elif defined(_MSC_VER)
64
/*!\brief \copydoc #AOM_DEPRECATED */
65
#define AOM_DECLSPEC_DEPRECATED __declspec(deprecated)
66
#else
67
#define AOM_DECLSPEC_DEPRECATED /**< \copydoc #AOM_DEPRECATED */
68
#endif
69
#endif /* AOM_DECLSPEC_DEPRECATED */
70
71
/*!\brief Decorator indicating a function is potentially unused */
72
#ifdef AOM_UNUSED
73
#elif defined(__GNUC__) || defined(__clang__)
74
#define AOM_UNUSED __attribute__((unused))
75
#else
76
#define AOM_UNUSED
77
#endif
78
79
/*!\brief Decorator indicating that given struct/union/enum is packed */
80
#ifndef ATTRIBUTE_PACKED
81
#if defined(__GNUC__) && __GNUC__
82
#define ATTRIBUTE_PACKED __attribute__((packed))
83
#elif defined(_MSC_VER)
84
#define ATTRIBUTE_PACKED
85
#else
86
#define ATTRIBUTE_PACKED
87
#endif
88
#endif /* ATTRIBUTE_PACKED */
89
90
/*!\brief Current ABI version number
91
 *
92
 * \internal
93
 * If this file is altered in any way that changes the ABI, this value
94
 * must be bumped.  Examples include, but are not limited to, changing
95
 * types, removing or reassigning enums, adding/removing/rearranging
96
 * fields to structures
97
 */
98
0
#define AOM_CODEC_ABI_VERSION (3 + AOM_IMAGE_ABI_VERSION) /**<\hideinitializer*/
99
100
/*!\brief Algorithm return codes */
101
typedef enum {
102
  /*!\brief Operation completed without error */
103
  AOM_CODEC_OK,
104
105
  /*!\brief Unspecified error */
106
  AOM_CODEC_ERROR,
107
108
  /*!\brief Memory operation failed */
109
  AOM_CODEC_MEM_ERROR,
110
111
  /*!\brief ABI version mismatch */
112
  AOM_CODEC_ABI_MISMATCH,
113
114
  /*!\brief Algorithm does not have required capability */
115
  AOM_CODEC_INCAPABLE,
116
117
  /*!\brief The given bitstream is not supported.
118
   *
119
   * The bitstream was unable to be parsed at the highest level. The decoder
120
   * is unable to proceed. This error \ref SHOULD be treated as fatal to the
121
   * stream. */
122
  AOM_CODEC_UNSUP_BITSTREAM,
123
124
  /*!\brief Encoded bitstream uses an unsupported feature
125
   *
126
   * The decoder does not implement a feature required by the encoder. This
127
   * return code should only be used for features that prevent future
128
   * pictures from being properly decoded. This error \ref MAY be treated as
129
   * fatal to the stream or \ref MAY be treated as fatal to the current GOP.
130
   */
131
  AOM_CODEC_UNSUP_FEATURE,
132
133
  /*!\brief The coded data for this stream is corrupt or incomplete
134
   *
135
   * There was a problem decoding the current frame.  This return code
136
   * should only be used for failures that prevent future pictures from
137
   * being properly decoded. This error \ref MAY be treated as fatal to the
138
   * stream or \ref MAY be treated as fatal to the current GOP. If decoding
139
   * is continued for the current GOP, artifacts may be present.
140
   */
141
  AOM_CODEC_CORRUPT_FRAME,
142
143
  /*!\brief An application-supplied parameter is not valid.
144
   *
145
   */
146
  AOM_CODEC_INVALID_PARAM,
147
148
  /*!\brief An iterator reached the end of list.
149
   *
150
   */
151
  AOM_CODEC_LIST_END
152
153
} aom_codec_err_t;
154
155
/*! \brief Codec capabilities bitfield
156
 *
157
 *  Each codec advertises the capabilities it supports as part of its
158
 *  ::aom_codec_iface_t interface structure. Capabilities are extra interfaces
159
 *  or functionality, and are not required to be supported.
160
 *
161
 *  The available flags are specified by AOM_CODEC_CAP_* defines.
162
 */
163
typedef long aom_codec_caps_t;
164
#define AOM_CODEC_CAP_DECODER 0x1 /**< Is a decoder */
165
#define AOM_CODEC_CAP_ENCODER 0x2 /**< Is an encoder */
166
167
/*! \brief Initialization-time Feature Enabling
168
 *
169
 *  Certain codec features must be known at initialization time, to allow for
170
 *  proper memory allocation.
171
 *
172
 *  The available flags are specified by AOM_CODEC_USE_* defines.
173
 */
174
typedef long aom_codec_flags_t;
175
176
/*!\brief Codec interface structure.
177
 *
178
 * Contains function pointers and other data private to the codec
179
 * implementation. This structure is opaque to the application.
180
 */
181
typedef const struct aom_codec_iface aom_codec_iface_t;
182
183
/*!\brief Codec private data structure.
184
 *
185
 * Contains data private to the codec implementation. This structure is opaque
186
 * to the application.
187
 */
188
typedef struct aom_codec_priv aom_codec_priv_t;
189
190
/*!\brief Iterator
191
 *
192
 * Opaque storage used for iterating over lists.
193
 */
194
typedef const void *aom_codec_iter_t;
195
196
/*!\brief Codec context structure
197
 *
198
 * All codecs \ref MUST support this context structure fully. In general,
199
 * this data should be considered private to the codec algorithm, and
200
 * not be manipulated or examined by the calling application. Applications
201
 * may reference the 'name' member to get a printable description of the
202
 * algorithm.
203
 */
204
typedef struct aom_codec_ctx {
205
  const char *name;             /**< Printable interface name */
206
  aom_codec_iface_t *iface;     /**< Interface pointers */
207
  aom_codec_err_t err;          /**< Last returned error */
208
  const char *err_detail;       /**< Detailed info, if available */
209
  aom_codec_flags_t init_flags; /**< Flags passed at init time */
210
  union {
211
    /**< Decoder Configuration Pointer */
212
    const struct aom_codec_dec_cfg *dec;
213
    /**< Encoder Configuration Pointer */
214
    const struct aom_codec_enc_cfg *enc;
215
    const void *raw;
216
  } config;               /**< Configuration pointer aliasing union */
217
  aom_codec_priv_t *priv; /**< Algorithm private storage */
218
} aom_codec_ctx_t;
219
220
/*!\brief Bit depth for codec
221
 * *
222
 * This enumeration determines the bit depth of the codec.
223
 */
224
typedef enum aom_bit_depth {
225
  AOM_BITS_8 = 8,   /**<  8 bits */
226
  AOM_BITS_10 = 10, /**< 10 bits */
227
  AOM_BITS_12 = 12, /**< 12 bits */
228
} aom_bit_depth_t;
229
230
/*!\brief Superblock size selection.
231
 *
232
 * Defines the superblock size used for encoding. The superblock size can
233
 * either be fixed at 64x64 or 128x128 pixels, or it can be dynamically
234
 * selected by the encoder for each frame.
235
 */
236
typedef enum aom_superblock_size {
237
  AOM_SUPERBLOCK_SIZE_64X64,   /**< Always use 64x64 superblocks. */
238
  AOM_SUPERBLOCK_SIZE_128X128, /**< Always use 128x128 superblocks. */
239
  AOM_SUPERBLOCK_SIZE_DYNAMIC  /**< Select superblock size dynamically. */
240
} aom_superblock_size_t;
241
242
/*
243
 * Library Version Number Interface
244
 *
245
 * For example, see the following sample return values:
246
 *     aom_codec_version()           (1<<16 | 2<<8 | 3)
247
 *     aom_codec_version_str()       "v1.2.3-rc1-16-gec6a1ba"
248
 *     aom_codec_version_extra_str() "rc1-16-gec6a1ba"
249
 */
250
251
/*!\brief Return the version information (as an integer)
252
 *
253
 * Returns a packed encoding of the library version number. This will only
254
 * include
255
 * the major.minor.patch component of the version number. Note that this encoded
256
 * value should be accessed through the macros provided, as the encoding may
257
 * change
258
 * in the future.
259
 *
260
 */
261
int aom_codec_version(void);
262
263
/*!\brief Return the version major number */
264
#define aom_codec_version_major() ((aom_codec_version() >> 16) & 0xff)
265
266
/*!\brief Return the version minor number */
267
#define aom_codec_version_minor() ((aom_codec_version() >> 8) & 0xff)
268
269
/*!\brief Return the version patch number */
270
#define aom_codec_version_patch() ((aom_codec_version() >> 0) & 0xff)
271
272
/*!\brief Return the version information (as a string)
273
 *
274
 * Returns a printable string containing the full library version number. This
275
 * may
276
 * contain additional text following the three digit version number, as to
277
 * indicate
278
 * release candidates, prerelease versions, etc.
279
 *
280
 */
281
const char *aom_codec_version_str(void);
282
283
/*!\brief Return the version information (as a string)
284
 *
285
 * Returns a printable "extra string". This is the component of the string
286
 * returned
287
 * by aom_codec_version_str() following the three digit version number.
288
 *
289
 */
290
const char *aom_codec_version_extra_str(void);
291
292
/*!\brief Return the build configuration
293
 *
294
 * Returns a printable string containing an encoded version of the build
295
 * configuration. This may be useful to aom support.
296
 *
297
 */
298
const char *aom_codec_build_config(void);
299
300
/*!\brief Return the name for a given interface
301
 *
302
 * Returns a human readable string for name of the given codec interface.
303
 *
304
 * \param[in]    iface     Interface pointer
305
 *
306
 */
307
const char *aom_codec_iface_name(aom_codec_iface_t *iface);
308
309
/*!\brief Convert error number to printable string
310
 *
311
 * Returns a human readable string for the last error returned by the
312
 * algorithm. The returned error will be one line and will not contain
313
 * any newline characters.
314
 *
315
 *
316
 * \param[in]    err     Error number.
317
 *
318
 */
319
const char *aom_codec_err_to_string(aom_codec_err_t err);
320
321
/*!\brief Retrieve error synopsis for codec context
322
 *
323
 * Returns a human readable string for the last error returned by the
324
 * algorithm. The returned error will be one line and will not contain
325
 * any newline characters.
326
 *
327
 *
328
 * \param[in]    ctx     Pointer to this instance's context.
329
 *
330
 */
331
const char *aom_codec_error(aom_codec_ctx_t *ctx);
332
333
/*!\brief Retrieve detailed error information for codec context
334
 *
335
 * Returns a human readable string providing detailed information about
336
 * the last error.
337
 *
338
 * \param[in]    ctx     Pointer to this instance's context.
339
 *
340
 * \retval NULL
341
 *     No detailed information is available.
342
 */
343
const char *aom_codec_error_detail(aom_codec_ctx_t *ctx);
344
345
/* REQUIRED FUNCTIONS
346
 *
347
 * The following functions are required to be implemented for all codecs.
348
 * They represent the base case functionality expected of all codecs.
349
 */
350
351
/*!\brief Destroy a codec instance
352
 *
353
 * Destroys a codec context, freeing any associated memory buffers.
354
 *
355
 * \param[in] ctx   Pointer to this instance's context
356
 *
357
 * \retval #AOM_CODEC_OK
358
 *     The codec algorithm initialized.
359
 * \retval #AOM_CODEC_MEM_ERROR
360
 *     Memory allocation failed.
361
 */
362
aom_codec_err_t aom_codec_destroy(aom_codec_ctx_t *ctx);
363
364
/*!\brief Get the capabilities of an algorithm.
365
 *
366
 * Retrieves the capabilities bitfield from the algorithm's interface.
367
 *
368
 * \param[in] iface   Pointer to the algorithm interface
369
 *
370
 */
371
aom_codec_caps_t aom_codec_get_caps(aom_codec_iface_t *iface);
372
373
/*!\brief Control algorithm
374
 *
375
 * This function is used to exchange algorithm specific data with the codec
376
 * instance. This can be used to implement features specific to a particular
377
 * algorithm.
378
 *
379
 * This wrapper function dispatches the request to the helper function
380
 * associated with the given ctrl_id. It tries to call this function
381
 * transparently, but will return #AOM_CODEC_ERROR if the request could not
382
 * be dispatched.
383
 *
384
 * Note that this function should not be used directly. Call the
385
 * #aom_codec_control wrapper macro instead.
386
 *
387
 * \param[in]     ctx              Pointer to this instance's context
388
 * \param[in]     ctrl_id          Algorithm specific control identifier
389
 *
390
 * \retval #AOM_CODEC_OK
391
 *     The control request was processed.
392
 * \retval #AOM_CODEC_ERROR
393
 *     The control request was not processed.
394
 * \retval #AOM_CODEC_INVALID_PARAM
395
 *     The data was not valid.
396
 */
397
aom_codec_err_t aom_codec_control_(aom_codec_ctx_t *ctx, int ctrl_id, ...);
398
#if defined(AOM_DISABLE_CTRL_TYPECHECKS) && AOM_DISABLE_CTRL_TYPECHECKS
399
#define aom_codec_control(ctx, id, data) aom_codec_control_(ctx, id, data)
400
#define AOM_CTRL_USE_TYPE(id, typ)
401
#define AOM_CTRL_USE_TYPE_DEPRECATED(id, typ)
402
#define AOM_CTRL_VOID(id, typ)
403
404
#else
405
/*!\brief aom_codec_control wrapper macro
406
 *
407
 * This macro allows for type safe conversions across the variadic parameter
408
 * to aom_codec_control_().
409
 *
410
 * \internal
411
 * It works by dispatching the call to the control function through a wrapper
412
 * function named with the id parameter.
413
 */
414
#define aom_codec_control(ctx, id, data) \
415
  aom_codec_control_##id(ctx, id, data) /**<\hideinitializer*/
416
417
/*!\brief aom_codec_control type definition macro
418
 *
419
 * This macro allows for type safe conversions across the variadic parameter
420
 * to aom_codec_control_(). It defines the type of the argument for a given
421
 * control identifier.
422
 *
423
 * \internal
424
 * It defines a static function with
425
 * the correctly typed arguments as a wrapper to the type-unsafe internal
426
 * function.
427
 */
428
#define AOM_CTRL_USE_TYPE(id, typ)                                           \
429
  static aom_codec_err_t aom_codec_control_##id(aom_codec_ctx_t *, int, typ) \
430
      AOM_UNUSED;                                                            \
431
                                                                             \
432
  static aom_codec_err_t aom_codec_control_##id(aom_codec_ctx_t *ctx,        \
433
0
                                                int ctrl_id, typ data) {     \
434
0
    return aom_codec_control_(ctx, ctrl_id, data);                           \
435
0
  } /**<\hideinitializer*/
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AOM_SET_POSTPROC(aom_codec_ctx*, int, aom_postproc_cfg*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AOM_SET_DBG_COLOR_REF_FRAME(aom_codec_ctx*, int, int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AOM_SET_DBG_COLOR_MB_MODES(aom_codec_ctx*, int, int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AOM_SET_DBG_COLOR_B_MODES(aom_codec_ctx*, int, int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AOM_SET_DBG_DISPLAY_MV(aom_codec_ctx*, int, int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_GET_REFERENCE(aom_codec_ctx*, int, av1_ref_frame*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_SET_REFERENCE(aom_codec_ctx*, int, av1_ref_frame*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_COPY_REFERENCE(aom_codec_ctx*, int, av1_ref_frame*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_GET_NEW_FRAME_IMAGE(aom_codec_ctx*, int, aom_image*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_COPY_NEW_FRAME_IMAGE(aom_codec_ctx*, int, aom_image*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AOMD_GET_LAST_REF_UPDATES(aom_codec_ctx*, int, int*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AOMD_GET_FRAME_CORRUPTED(aom_codec_ctx*, int, int*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AOMD_GET_LAST_REF_USED(aom_codec_ctx*, int, int*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AOMD_GET_LAST_QUANTIZER(aom_codec_ctx*, int, int*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_GET_DISPLAY_SIZE(aom_codec_ctx*, int, int*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_GET_BIT_DEPTH(aom_codec_ctx*, int, unsigned int*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_GET_IMG_FORMAT(aom_codec_ctx*, int, aom_img_fmt*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_GET_TILE_SIZE(aom_codec_ctx*, int, unsigned int*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_GET_FRAME_SIZE(aom_codec_ctx*, int, int*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_INVERT_TILE_DECODE_ORDER(aom_codec_ctx*, int, int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_GET_ACCOUNTING(aom_codec_ctx*, int, Accounting**)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_SET_DECODE_TILE_ROW(aom_codec_ctx*, int, int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_SET_DECODE_TILE_COL(aom_codec_ctx*, int, int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_SET_TILE_MODE(aom_codec_ctx*, int, unsigned int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_GET_FRAME_HEADER_INFO(aom_codec_ctx*, int, aom_tile_data*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_GET_TILE_DATA(aom_codec_ctx*, int, aom_tile_data*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_SET_EXT_REF_PTR(aom_codec_ctx*, int, av1_ext_ref_frame*)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_EXT_TILE_DEBUG(aom_codec_ctx*, int, unsigned int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_SET_ROW_MT(aom_codec_ctx*, int, unsigned int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_SET_SKIP_FILM_GRAIN(aom_codec_ctx*, int, int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_SET_IS_ANNEXB(aom_codec_ctx*, int, unsigned int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_SET_OPERATING_POINT(aom_codec_ctx*, int, int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1D_SET_OUTPUT_ALL_LAYERS(aom_codec_ctx*, int, int)
Unexecuted instantiation: Unified_cpp_dom_media_platforms0.cpp:aom_codec_control_AV1_SET_INSPECTION_CALLBACK(aom_codec_ctx*, int, aom_inspect_init*)
436
437
/*!\brief aom_codec_control deprecated type definition macro
438
 *
439
 * Like #AOM_CTRL_USE_TYPE, but indicates that the specified control is
440
 * deprecated and should not be used. Consult the documentation for your
441
 * codec for more information.
442
 *
443
 * \internal
444
 * It defines a static function with the correctly typed arguments as a
445
 * wrapper to the type-unsafe internal function.
446
 */
447
#define AOM_CTRL_USE_TYPE_DEPRECATED(id, typ)                            \
448
  AOM_DECLSPEC_DEPRECATED static aom_codec_err_t aom_codec_control_##id( \
449
      aom_codec_ctx_t *, int, typ) AOM_DEPRECATED AOM_UNUSED;            \
450
                                                                         \
451
  AOM_DECLSPEC_DEPRECATED static aom_codec_err_t aom_codec_control_##id( \
452
      aom_codec_ctx_t *ctx, int ctrl_id, typ data) {                     \
453
    return aom_codec_control_(ctx, ctrl_id, data);                       \
454
  } /**<\hideinitializer*/
455
456
/*!\brief aom_codec_control void type definition macro
457
 *
458
 * This macro allows for type safe conversions across the variadic parameter
459
 * to aom_codec_control_(). It indicates that a given control identifier takes
460
 * no argument.
461
 *
462
 * \internal
463
 * It defines a static function without a data argument as a wrapper to the
464
 * type-unsafe internal function.
465
 */
466
#define AOM_CTRL_VOID(id)                                               \
467
  static aom_codec_err_t aom_codec_control_##id(aom_codec_ctx_t *, int) \
468
      AOM_UNUSED;                                                       \
469
                                                                        \
470
  static aom_codec_err_t aom_codec_control_##id(aom_codec_ctx_t *ctx,   \
471
                                                int ctrl_id) {          \
472
    return aom_codec_control_(ctx, ctrl_id);                            \
473
  } /**<\hideinitializer*/
474
475
#endif
476
477
/*!\brief OBU types. */
478
typedef enum ATTRIBUTE_PACKED {
479
  OBU_SEQUENCE_HEADER = 1,
480
  OBU_TEMPORAL_DELIMITER = 2,
481
  OBU_FRAME_HEADER = 3,
482
  OBU_TILE_GROUP = 4,
483
  OBU_METADATA = 5,
484
  OBU_FRAME = 6,
485
  OBU_REDUNDANT_FRAME_HEADER = 7,
486
  OBU_TILE_LIST = 8,
487
  OBU_PADDING = 15,
488
} OBU_TYPE;
489
490
/*!\brief OBU metadata types. */
491
typedef enum {
492
  OBU_METADATA_TYPE_AOM_RESERVED_0 = 0,
493
  OBU_METADATA_TYPE_HDR_CLL = 1,
494
  OBU_METADATA_TYPE_HDR_MDCV = 2,
495
  OBU_METADATA_TYPE_SCALABILITY = 3,
496
  OBU_METADATA_TYPE_ITUT_T35 = 4,
497
  OBU_METADATA_TYPE_TIMECODE = 5,
498
} OBU_METADATA_TYPE;
499
500
/*!\brief Returns string representation of OBU_TYPE.
501
 *
502
 * \param[in]     type            The OBU_TYPE to convert to string.
503
 */
504
const char *aom_obu_type_to_string(OBU_TYPE type);
505
506
/*!\brief Config Options
507
 *
508
 * This type allows to enumerate and control options defined for control
509
 * via config file at runtime.
510
 */
511
typedef struct cfg_options {
512
  /*!\brief Reflects if ext_partition should be enabled
513
   *
514
   * If this value is non-zero it enabled the feature
515
   */
516
  unsigned int ext_partition;
517
} cfg_options_t;
518
519
/*!@} - end defgroup codec*/
520
#ifdef __cplusplus
521
}
522
#endif
523
#endif  // AOM_AOM_AOM_CODEC_H_