AOMedia AV1 Codec
aom_image.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 
16 #ifndef AOM_AOM_AOM_IMAGE_H_
17 #define AOM_AOM_AOM_IMAGE_H_
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 #include "aom/aom_integer.h"
24 
33 #define AOM_IMAGE_ABI_VERSION (9)
35 #define AOM_IMG_FMT_PLANAR 0x100
36 #define AOM_IMG_FMT_UV_FLIP 0x200
38 #define AOM_IMG_FMT_HIGHBITDEPTH 0x800
41 typedef enum aom_img_fmt {
42  AOM_IMG_FMT_NONE,
47  3,
53 #define AOM_HAVE_IMG_FMT_NV12 1
63 typedef enum aom_color_primaries {
73  8,
96  10,
120  9,
124  12,
129 
131 typedef enum aom_color_range {
132  AOM_CR_STUDIO_RANGE = 0,
135  AOM_CR_FULL_RANGE = 1
143  AOM_CSP_VERTICAL = 1,
146  AOM_CSP_RESERVED = 3
165  AOM_MIF_ANY_FRAME = 2
167 
169 typedef struct aom_metadata_array aom_metadata_array_t;
170 
172 typedef struct aom_metadata {
173  uint32_t type;
174  uint8_t *payload;
175  size_t sz;
178 
180 typedef struct aom_image {
189  /* Image storage dimensions */
190  unsigned int w;
191  unsigned int h;
192  unsigned int bit_depth;
194  /* Image display dimensions */
195  unsigned int d_w;
196  unsigned int d_h;
198  /* Image intended rendering dimensions */
199  unsigned int r_w;
200  unsigned int r_h;
202  /* Chroma subsampling info */
203  unsigned int x_chroma_shift;
204  unsigned int y_chroma_shift;
206 /* Image data pointers. */
207 #define AOM_PLANE_PACKED 0
208 #define AOM_PLANE_Y 0
209 #define AOM_PLANE_U 1
210 #define AOM_PLANE_V 2
211  /* planes[AOM_PLANE_V] = NULL and stride[AOM_PLANE_V] = 0 when fmt ==
212  * AOM_IMG_FMT_NV12 */
213  unsigned char *planes[3];
214  int stride[3];
215  size_t sz;
217  int bps;
225  void *user_priv;
226 
227  /* The following members should be treated as private. */
228  unsigned char *img_data;
235  void *fb_priv;
257  unsigned int d_w, unsigned int d_h,
258  unsigned int align);
259 
280 aom_image_t *aom_img_wrap(aom_image_t *img, aom_img_fmt_t fmt, unsigned int d_w,
281  unsigned int d_h, unsigned int align,
282  unsigned char *img_data);
283 
306  unsigned int d_w, unsigned int d_h,
307  unsigned int align,
308  unsigned int size_align,
309  unsigned int border);
310 
326 int aom_img_set_rect(aom_image_t *img, unsigned int x, unsigned int y,
327  unsigned int w, unsigned int h, unsigned int border);
328 
337 
345 
353 int aom_img_plane_width(const aom_image_t *img, int plane);
354 
362 int aom_img_plane_height(const aom_image_t *img, int plane);
363 
379 int aom_img_add_metadata(aom_image_t *img, uint32_t type, const uint8_t *data,
380  size_t sz, aom_metadata_insert_flags_t insert_flag);
381 
394  size_t index);
395 
408 
417 
432 aom_metadata_t *aom_img_metadata_alloc(uint32_t type, const uint8_t *data,
433  size_t sz,
434  aom_metadata_insert_flags_t insert_flag);
435 
443 
444 #ifdef __cplusplus
445 } // extern "C"
446 #endif
447 
448 #endif // AOM_AOM_AOM_IMAGE_H_
AOM_IMG_FMT_I420
@ AOM_IMG_FMT_I420
Definition: aom_image.h:45
aom_img_remove_metadata
void aom_img_remove_metadata(aom_image_t *img)
Remove metadata from image.
aom_image::fmt
aom_img_fmt_t fmt
Definition: aom_image.h:181
AOM_CICP_TC_IEC_61966
@ AOM_CICP_TC_IEC_61966
Definition: aom_image.h:97
AOM_IMG_FMT_YV12
@ AOM_IMG_FMT_YV12
Definition: aom_image.h:43
AOM_CICP_TC_BT_2020_12_BIT
@ AOM_CICP_TC_BT_2020_12_BIT
Definition: aom_image.h:101
aom_metadata
Metadata payload.
Definition: aom_image.h:172
AOM_CICP_CP_BT_2020
@ AOM_CICP_CP_BT_2020
Definition: aom_image.h:74
AOM_CICP_CP_SMPTE_431
@ AOM_CICP_CP_SMPTE_431
Definition: aom_image.h:76
AOM_CR_FULL_RANGE
@ AOM_CR_FULL_RANGE
Definition: aom_image.h:135
aom_image::monochrome
int monochrome
Definition: aom_image.h:185
AOM_CICP_TC_SMPTE_240
@ AOM_CICP_TC_SMPTE_240
Definition: aom_image.h:92
aom_image::planes
unsigned char * planes[3]
Definition: aom_image.h:213
aom_img_add_metadata
int aom_img_add_metadata(aom_image_t *img, uint32_t type, const uint8_t *data, size_t sz, aom_metadata_insert_flags_t insert_flag)
Add metadata to image.
aom_chroma_sample_position_t
enum aom_chroma_sample_position aom_chroma_sample_position_t
List of chroma sample positions.
aom_img_fmt_t
enum aom_img_fmt aom_img_fmt_t
List of supported image formats.
AOM_CICP_CP_BT_601
@ AOM_CICP_CP_BT_601
Definition: aom_image.h:70
AOM_CICP_TC_BT_709
@ AOM_CICP_TC_BT_709
Definition: aom_image.h:86
aom_image::user_priv
void * user_priv
The following member may be set by the application to associate data with this image.
Definition: aom_image.h:225
AOM_IMG_FMT_I444
@ AOM_IMG_FMT_I444
Definition: aom_image.h:50
aom_metadata_t
struct aom_metadata aom_metadata_t
Metadata payload.
aom_img_set_rect
int aom_img_set_rect(aom_image_t *img, unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned int border)
Set the rectangle identifying the displayed portion of the image.
aom_img_metadata_free
void aom_img_metadata_free(aom_metadata_t *metadata)
Free metadata struct.
aom_metadata::type
uint32_t type
Definition: aom_image.h:173
aom_image::d_h
unsigned int d_h
Definition: aom_image.h:196
AOM_CICP_MC_ICTCP
@ AOM_CICP_MC_ICTCP
Definition: aom_image.h:126
AOM_CICP_CP_BT_470_B_G
@ AOM_CICP_CP_BT_470_B_G
Definition: aom_image.h:69
AOM_CSP_UNKNOWN
@ AOM_CSP_UNKNOWN
Definition: aom_image.h:142
aom_img_wrap
aom_image_t * aom_img_wrap(aom_image_t *img, aom_img_fmt_t fmt, unsigned int d_w, unsigned int d_h, unsigned int align, unsigned char *img_data)
Open a descriptor, using existing storage for the underlying image.
AOM_CICP_MC_SMPTE_2085
@ AOM_CICP_MC_SMPTE_2085
Definition: aom_image.h:122
aom_transfer_characteristics_t
enum aom_transfer_characteristics aom_transfer_characteristics_t
List of supported transfer functions.
AOM_CICP_CP_BT_709
@ AOM_CICP_CP_BT_709
Definition: aom_image.h:65
AOM_CR_STUDIO_RANGE
@ AOM_CR_STUDIO_RANGE
Definition: aom_image.h:132
AOM_CICP_TC_UNSPECIFIED
@ AOM_CICP_TC_UNSPECIFIED
Definition: aom_image.h:87
aom_color_primaries_t
enum aom_color_primaries aom_color_primaries_t
List of supported color primaries.
AOM_CICP_CP_SMPTE_240
@ AOM_CICP_CP_SMPTE_240
Definition: aom_image.h:71
aom_chroma_sample_position
aom_chroma_sample_position
List of chroma sample positions.
Definition: aom_image.h:141
aom_metadata::payload
uint8_t * payload
Definition: aom_image.h:174
AOM_IMG_FMT_I422
@ AOM_IMG_FMT_I422
Definition: aom_image.h:49
aom_metadata_insert_flags_t
enum aom_metadata_insert_flags aom_metadata_insert_flags_t
List of insert flags for Metadata.
AOM_CICP_MC_BT_2020_NCL
@ AOM_CICP_MC_BT_2020_NCL
Definition: aom_image.h:119
aom_metadata::sz
size_t sz
Definition: aom_image.h:175
aom_img_free
void aom_img_free(aom_image_t *img)
Close an image descriptor.
AOM_IMG_FMT_AOMI420
@ AOM_IMG_FMT_AOMI420
Definition: aom_image.h:48
aom_image::y_chroma_shift
unsigned int y_chroma_shift
Definition: aom_image.h:204
aom_img_metadata_alloc
aom_metadata_t * aom_img_metadata_alloc(uint32_t type, const uint8_t *data, size_t sz, aom_metadata_insert_flags_t insert_flag)
Allocate memory for aom_metadata struct.
AOM_CICP_TC_LOG_100
@ AOM_CICP_TC_LOG_100
Definition: aom_image.h:94
AOM_CICP_TC_RESERVED_3
@ AOM_CICP_TC_RESERVED_3
Definition: aom_image.h:88
AOM_CICP_CP_SMPTE_432
@ AOM_CICP_CP_SMPTE_432
Definition: aom_image.h:77
aom_img_alloc_with_border
aom_image_t * aom_img_alloc_with_border(aom_image_t *img, aom_img_fmt_t fmt, unsigned int d_w, unsigned int d_h, unsigned int align, unsigned int size_align, unsigned int border)
Open a descriptor, allocating storage for the underlying image with a border.
aom_img_alloc
aom_image_t * aom_img_alloc(aom_image_t *img, aom_img_fmt_t fmt, unsigned int d_w, unsigned int d_h, unsigned int align)
Open a descriptor, allocating storage for the underlying image.
aom_img_plane_width
int aom_img_plane_width(const aom_image_t *img, int plane)
Get the width of a plane.
AOM_CICP_MC_BT_470_B_G
@ AOM_CICP_MC_BT_470_B_G
Definition: aom_image.h:115
AOM_IMG_FMT_I42216
@ AOM_IMG_FMT_I42216
Definition: aom_image.h:58
aom_image::w
unsigned int w
Definition: aom_image.h:190
AOM_CICP_CP_RESERVED_3
@ AOM_CICP_CP_RESERVED_3
Definition: aom_image.h:67
AOM_IMG_FMT_I44416
@ AOM_IMG_FMT_I44416
Definition: aom_image.h:59
AOM_CICP_TC_SMPTE_428
@ AOM_CICP_TC_SMPTE_428
Definition: aom_image.h:103
AOM_CICP_CP_RESERVED_13
@ AOM_CICP_CP_RESERVED_13
Definition: aom_image.h:78
AOM_CICP_MC_BT_601
@ AOM_CICP_MC_BT_601
Definition: aom_image.h:116
AOM_CICP_CP_XYZ
@ AOM_CICP_CP_XYZ
Definition: aom_image.h:75
AOM_CICP_TC_LINEAR
@ AOM_CICP_TC_LINEAR
Definition: aom_image.h:93
AOM_IMG_FMT_YV1216
@ AOM_IMG_FMT_YV1216
Definition: aom_image.h:57
AOM_CICP_TC_BT_1361
@ AOM_CICP_TC_BT_1361
Definition: aom_image.h:98
AOM_CSP_VERTICAL
@ AOM_CSP_VERTICAL
Definition: aom_image.h:143
aom_image::tc
aom_transfer_characteristics_t tc
Definition: aom_image.h:183
aom_metadata_insert_flags
aom_metadata_insert_flags
List of insert flags for Metadata.
Definition: aom_image.h:162
AOM_CICP_MC_UNSPECIFIED
@ AOM_CICP_MC_UNSPECIFIED
Definition: aom_image.h:112
AOM_CICP_MC_SMPTE_YCGCO
@ AOM_CICP_MC_SMPTE_YCGCO
Definition: aom_image.h:118
aom_transfer_characteristics
aom_transfer_characteristics
List of supported transfer functions.
Definition: aom_image.h:84
AOM_CSP_COLOCATED
@ AOM_CSP_COLOCATED
Definition: aom_image.h:145
aom_color_primaries
aom_color_primaries
List of supported color primaries.
Definition: aom_image.h:63
AOM_CICP_TC_BT_2020_10_BIT
@ AOM_CICP_TC_BT_2020_10_BIT
Definition: aom_image.h:100
AOM_CICP_MC_RESERVED_3
@ AOM_CICP_MC_RESERVED_3
Definition: aom_image.h:113
aom_color_range_t
enum aom_color_range aom_color_range_t
List of supported color range.
AOM_CICP_CP_EBU_3213
@ AOM_CICP_CP_EBU_3213
Definition: aom_image.h:79
AOM_CICP_TC_LOG_100_SQRT10
@ AOM_CICP_TC_LOG_100_SQRT10
Definition: aom_image.h:95
aom_image::metadata
aom_metadata_array_t * metadata
Definition: aom_image.h:233
aom_img_num_metadata
size_t aom_img_num_metadata(const aom_image_t *img)
Return the number of metadata blocks within the image.
aom_image::self_allocd
int self_allocd
Definition: aom_image.h:230
aom_image::x_chroma_shift
unsigned int x_chroma_shift
Definition: aom_image.h:203
AOM_CICP_TC_HLG
@ AOM_CICP_TC_HLG
Definition: aom_image.h:104
AOM_CICP_MC_BT_2020_CL
@ AOM_CICP_MC_BT_2020_CL
Definition: aom_image.h:121
AOM_MIF_KEY_FRAME
@ AOM_MIF_KEY_FRAME
Definition: aom_image.h:164
aom_image::bps
int bps
Definition: aom_image.h:217
AOM_CSP_RESERVED
@ AOM_CSP_RESERVED
Definition: aom_image.h:146
aom_image_t
struct aom_image aom_image_t
Image Descriptor.
aom_image::spatial_id
int spatial_id
Definition: aom_image.h:220
aom_img_flip
void aom_img_flip(aom_image_t *img)
Flip the image vertically (top for bottom)
AOM_IMG_FMT_I42016
@ AOM_IMG_FMT_I42016
Definition: aom_image.h:56
aom_image::temporal_id
int temporal_id
Definition: aom_image.h:219
AOM_CICP_MC_FCC
@ AOM_CICP_MC_FCC
Definition: aom_image.h:114
aom_image::csp
aom_chroma_sample_position_t csp
Definition: aom_image.h:186
aom_metadata_array_t
struct aom_metadata_array aom_metadata_array_t
Array of aom_metadata structs for an image.
Definition: aom_image.h:169
AOM_CICP_MC_IDENTITY
@ AOM_CICP_MC_IDENTITY
Definition: aom_image.h:110
aom_image::bit_depth
unsigned int bit_depth
Definition: aom_image.h:192
aom_image::h
unsigned int h
Definition: aom_image.h:191
aom_img_get_metadata
const aom_metadata_t * aom_img_get_metadata(const aom_image_t *img, size_t index)
Return a metadata payload stored within the image metadata array.
AOM_CICP_CP_BT_470_M
@ AOM_CICP_CP_BT_470_M
Definition: aom_image.h:68
AOM_CICP_MC_CHROMAT_CL
@ AOM_CICP_MC_CHROMAT_CL
Definition: aom_image.h:125
aom_image::d_w
unsigned int d_w
Definition: aom_image.h:195
aom_metadata::insert_flag
aom_metadata_insert_flags_t insert_flag
Definition: aom_image.h:176
AOM_CICP_MC_CHROMAT_NCL
@ AOM_CICP_MC_CHROMAT_NCL
Definition: aom_image.h:123
AOM_CICP_TC_SMPTE_2084
@ AOM_CICP_TC_SMPTE_2084
Definition: aom_image.h:102
aom_color_range
aom_color_range
List of supported color range.
Definition: aom_image.h:131
AOM_CICP_TC_BT_470_M
@ AOM_CICP_TC_BT_470_M
Definition: aom_image.h:89
AOM_CICP_CP_RESERVED_0
@ AOM_CICP_CP_RESERVED_0
Definition: aom_image.h:64
aom_matrix_coefficients
aom_matrix_coefficients
List of supported matrix coefficients.
Definition: aom_image.h:109
AOM_MIF_ANY_FRAME
@ AOM_MIF_ANY_FRAME
Definition: aom_image.h:165
AOM_CICP_TC_SRGB
@ AOM_CICP_TC_SRGB
Definition: aom_image.h:99
AOM_IMG_FMT_PLANAR
#define AOM_IMG_FMT_PLANAR
Definition: aom_image.h:35
AOM_CICP_MC_BT_709
@ AOM_CICP_MC_BT_709
Definition: aom_image.h:111
aom_image::sz
size_t sz
Definition: aom_image.h:215
AOM_CICP_TC_RESERVED_19
@ AOM_CICP_TC_RESERVED_19
Definition: aom_image.h:105
AOM_CICP_MC_SMPTE_240
@ AOM_CICP_MC_SMPTE_240
Definition: aom_image.h:117
aom_image
Image Descriptor.
Definition: aom_image.h:180
AOM_IMG_FMT_UV_FLIP
#define AOM_IMG_FMT_UV_FLIP
Definition: aom_image.h:36
aom_image::range
aom_color_range_t range
Definition: aom_image.h:187
aom_image::stride
int stride[3]
Definition: aom_image.h:214
AOM_CICP_TC_BT_601
@ AOM_CICP_TC_BT_601
Definition: aom_image.h:91
aom_matrix_coefficients_t
enum aom_matrix_coefficients aom_matrix_coefficients_t
List of supported matrix coefficients.
aom_image::fb_priv
void * fb_priv
Definition: aom_image.h:235
AOM_CICP_TC_BT_470_B_G
@ AOM_CICP_TC_BT_470_B_G
Definition: aom_image.h:90
aom_image::r_w
unsigned int r_w
Definition: aom_image.h:199
aom_image::r_h
unsigned int r_h
Definition: aom_image.h:200
AOM_IMG_FMT_AOMYV12
@ AOM_IMG_FMT_AOMYV12
Definition: aom_image.h:46
aom_img_plane_height
int aom_img_plane_height(const aom_image_t *img, int plane)
Get the height of a plane.
AOM_CICP_CP_GENERIC_FILM
@ AOM_CICP_CP_GENERIC_FILM
Definition: aom_image.h:72
AOM_CICP_MC_RESERVED_15
@ AOM_CICP_MC_RESERVED_15
Definition: aom_image.h:127
AOM_CICP_CP_RESERVED_23
@ AOM_CICP_CP_RESERVED_23
Definition: aom_image.h:80
AOM_CICP_TC_RESERVED_0
@ AOM_CICP_TC_RESERVED_0
Definition: aom_image.h:85
aom_image::img_data_owner
int img_data_owner
Definition: aom_image.h:229
AOM_IMG_FMT_HIGHBITDEPTH
#define AOM_IMG_FMT_HIGHBITDEPTH
Definition: aom_image.h:38
AOM_MIF_NON_KEY_FRAME
@ AOM_MIF_NON_KEY_FRAME
Definition: aom_image.h:163
aom_image::mc
aom_matrix_coefficients_t mc
Definition: aom_image.h:184
AOM_IMG_FMT_NV12
@ AOM_IMG_FMT_NV12
Definition: aom_image.h:54
aom_image::cp
aom_color_primaries_t cp
Definition: aom_image.h:182
aom_image::img_data
unsigned char * img_data
Definition: aom_image.h:228
AOM_CICP_CP_UNSPECIFIED
@ AOM_CICP_CP_UNSPECIFIED
Definition: aom_image.h:66