AOMedia Codec SDK
aom_codec.h
Go to the documentation of this file.
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
39#ifndef AOM_AOM_AOM_CODEC_H_
40#define AOM_AOM_AOM_CODEC_H_
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46#include "aom/aom_image.h"
47#include "aom/aom_integer.h"
48
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
63#elif defined(_MSC_VER)
65#define AOM_DECLSPEC_DEPRECATED __declspec(deprecated)
66#else
67#define AOM_DECLSPEC_DEPRECATED
68#endif
69#endif /* AOM_DECLSPEC_DEPRECATED */
70
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
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
98#define AOM_CODEC_ABI_VERSION (3 + AOM_IMAGE_ABI_VERSION)
101typedef enum {
104
107
110
113
116
123
132
142
147
152
154
163typedef long aom_codec_caps_t;
164#define AOM_CODEC_CAP_DECODER 0x1
165#define AOM_CODEC_CAP_ENCODER 0x2
174typedef long aom_codec_flags_t;
175
181typedef const struct aom_codec_iface aom_codec_iface_t;
182
188typedef struct aom_codec_priv aom_codec_priv_t;
189
194typedef const void *aom_codec_iter_t;
195
204typedef struct aom_codec_ctx {
205 const char *name;
208 const char *err_detail;
210 union {
212 const struct aom_codec_dec_cfg *dec;
214 const struct aom_codec_enc_cfg *enc;
215 const void *raw;
219
224typedef enum aom_bit_depth {
229
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
262
264#define aom_codec_version_major() ((aom_codec_version() >> 16) & 0xff)
265
267#define aom_codec_version_minor() ((aom_codec_version() >> 8) & 0xff)
268
270#define aom_codec_version_patch() ((aom_codec_version() >> 0) & 0xff)
271
281const char *aom_codec_version_str(void);
282
291
298const char *aom_codec_build_config(void);
299
308
320
332
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
363
372
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
414#define aom_codec_control(ctx, id, data) \
415 aom_codec_control_##id(ctx, id, data)
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 int ctrl_id, typ data) { \
434 return aom_codec_control_(ctx, ctrl_id, data); \
435 }
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 }
466#define AOM_CTRL_VOID(id) \
467 static aom_codec_err_t aom_codec_control_##id(aom_codec_ctx_t *, int) \
468 AOM_UNUSED; \
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 }
475#endif
476
478typedef 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
491typedef 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,
499
504const char *aom_obu_type_to_string(OBU_TYPE type);
505
511typedef struct cfg_options {
516 unsigned int ext_partition;
518
520#ifdef __cplusplus
521}
522#endif
523#endif // AOM_AOM_AOM_CODEC_H_
Describes the aom image descriptor and associated operations.
long aom_codec_caps_t
Codec capabilities bitfield.
Definition: aom_codec.h:163
const char * aom_codec_iface_name(aom_codec_iface_t *iface)
Return the name for a given interface.
enum aom_bit_depth aom_bit_depth_t
Bit depth for codecThis enumeration determines the bit depth of the codec.
long aom_codec_flags_t
Initialization-time Feature Enabling.
Definition: aom_codec.h:174
const char * aom_codec_error_detail(aom_codec_ctx_t *ctx)
Retrieve detailed error information for codec context.
struct aom_codec_ctx aom_codec_ctx_t
Codec context structure.
struct aom_codec_priv aom_codec_priv_t
Codec private data structure.
Definition: aom_codec.h:188
const struct aom_codec_iface aom_codec_iface_t
Codec interface structure.
Definition: aom_codec.h:181
const char * aom_codec_version_str(void)
Return the version information (as a string)
aom_codec_err_t aom_codec_control_(aom_codec_ctx_t *ctx, int ctrl_id,...)
Control algorithm.
aom_codec_caps_t aom_codec_get_caps(aom_codec_iface_t *iface)
Get the capabilities of an algorithm.
aom_bit_depth
Bit depth for codecThis enumeration determines the bit depth of the codec.
Definition: aom_codec.h:224
const char * aom_codec_error(aom_codec_ctx_t *ctx)
Retrieve error synopsis for codec context.
OBU_TYPE
OBU types.
Definition: aom_codec.h:500
const char * aom_codec_build_config(void)
Return the build configuration.
enum aom_superblock_size aom_superblock_size_t
Superblock size selection.
aom_codec_err_t aom_codec_destroy(aom_codec_ctx_t *ctx)
Destroy a codec instance.
const char * aom_codec_err_to_string(aom_codec_err_t err)
Convert error number to printable string.
aom_codec_err_t
Algorithm return codes.
Definition: aom_codec.h:101
OBU_METADATA_TYPE
OBU metadata types.
Definition: aom_codec.h:513
int aom_codec_version(void)
Return the version information (as an integer)
struct cfg_options cfg_options_t
Config Options.
aom_superblock_size
Superblock size selection.
Definition: aom_codec.h:236
#define ATTRIBUTE_PACKED
Decorator indicating that given struct/union/enum is packed.
Definition: aom_codec.h:86
const void * aom_codec_iter_t
Iterator.
Definition: aom_codec.h:194
const char * aom_obu_type_to_string(OBU_TYPE type)
Returns string representation of OBU_TYPE.
const char * aom_codec_version_extra_str(void)
Return the version information (as a string)
@ AOM_BITS_12
Definition: aom_codec.h:227
@ AOM_BITS_8
Definition: aom_codec.h:225
@ AOM_BITS_10
Definition: aom_codec.h:226
@ AOM_CODEC_INVALID_PARAM
An application-supplied parameter is not valid.
Definition: aom_codec.h:146
@ AOM_CODEC_ERROR
Unspecified error.
Definition: aom_codec.h:106
@ AOM_CODEC_UNSUP_BITSTREAM
The given bitstream is not supported.
Definition: aom_codec.h:122
@ AOM_CODEC_LIST_END
An iterator reached the end of list.
Definition: aom_codec.h:151
@ AOM_CODEC_ABI_MISMATCH
ABI version mismatch.
Definition: aom_codec.h:112
@ AOM_CODEC_CORRUPT_FRAME
The coded data for this stream is corrupt or incomplete.
Definition: aom_codec.h:141
@ AOM_CODEC_UNSUP_FEATURE
Encoded bitstream uses an unsupported feature.
Definition: aom_codec.h:131
@ AOM_CODEC_MEM_ERROR
Memory operation failed.
Definition: aom_codec.h:109
@ AOM_CODEC_INCAPABLE
Algorithm does not have required capability.
Definition: aom_codec.h:115
@ AOM_CODEC_OK
Operation completed without error.
Definition: aom_codec.h:103
@ AOM_SUPERBLOCK_SIZE_128X128
Definition: aom_codec.h:238
@ AOM_SUPERBLOCK_SIZE_64X64
Definition: aom_codec.h:237
@ AOM_SUPERBLOCK_SIZE_DYNAMIC
Definition: aom_codec.h:239
Codec context structure.
Definition: aom_codec.h:204
const char * name
Definition: aom_codec.h:205
aom_codec_iface_t * iface
Definition: aom_codec.h:206
const struct aom_codec_dec_cfg * dec
Definition: aom_codec.h:212
aom_codec_err_t err
Definition: aom_codec.h:207
aom_codec_priv_t * priv
Definition: aom_codec.h:217
union aom_codec_ctx::@0 config
aom_codec_flags_t init_flags
Definition: aom_codec.h:209
const char * err_detail
Definition: aom_codec.h:208
Initialization Configurations.
Definition: aom_decoder.h:96
Encoder configuration structure.
Definition: aom_encoder.h:228
Config Options.
Definition: aom_codec.h:533
unsigned int ext_partition
Reflects if ext_partition should be enabled.
Definition: aom_codec.h:538