vpx_image.h 8.49 KB
 John Koleszar committed May 18, 2010 1 ``````/* `````` John Koleszar committed Sep 09, 2010 2 `````` * Copyright (c) 2010 The WebM project authors. All Rights Reserved. `````` John Koleszar committed May 18, 2010 3 `````` * `````` John Koleszar committed Jun 18, 2010 4 `````` * Use of this source code is governed by a BSD-style license `````` John Koleszar committed Jun 04, 2010 5 6 `````` * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found `````` John Koleszar committed Jun 18, 2010 7 `````` * in the file PATENTS. All contributing project authors may `````` John Koleszar committed Jun 04, 2010 8 `````` * be found in the AUTHORS file in the root of the source tree. `````` John Koleszar committed May 18, 2010 9 10 11 `````` */ `````` James Zern committed Feb 16, 2011 12 ``````/*!\file `````` John Koleszar committed May 18, 2010 13 14 15 `````` * \brief Describes the vpx image descriptor and associated operations * */ `````` James Zern committed Jan 23, 2014 16 17 18 ``````#ifndef VPX_VPX_IMAGE_H_ #define VPX_VPX_IMAGE_H_ `````` John Koleszar committed May 18, 2010 19 20 21 22 ``````#ifdef __cplusplus extern "C" { #endif `````` John Koleszar committed Jul 17, 2012 23 24 25 26 27 28 29 30 `````` /*!\brief Current ABI version number * * \internal * If this file is altered in any way that changes the ABI, this value * must be bumped. Examples include, but are not limited to, changing * types, removing or reassigning enums, adding/removing/rearranging * fields to structures */ `````` Frank Galligan committed Feb 13, 2014 31 ``````#define VPX_IMAGE_ABI_VERSION (2) /**<\hideinitializer*/ `````` John Koleszar committed May 18, 2010 32 33 `````` `````` Deb Mukherjee committed Sep 02, 2014 34 35 36 37 ``````#define VPX_IMG_FMT_PLANAR 0x100 /**< Image is a planar format. */ #define VPX_IMG_FMT_UV_FLIP 0x200 /**< V plane precedes U in memory. */ #define VPX_IMG_FMT_HAS_ALPHA 0x400 /**< Image has an alpha channel. */ #define VPX_IMG_FMT_HIGHBITDEPTH 0x800 /**< Image uses 16bit framebuffer. */ `````` John Koleszar committed May 18, 2010 38 `````` `````` John Koleszar committed Jul 17, 2012 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 `````` /*!\brief List of supported image formats */ typedef enum vpx_img_fmt { VPX_IMG_FMT_NONE, VPX_IMG_FMT_RGB24, /**< 24 bit per pixel packed RGB */ VPX_IMG_FMT_RGB32, /**< 32 bit per pixel packed 0RGB */ VPX_IMG_FMT_RGB565, /**< 16 bit per pixel, 565 */ VPX_IMG_FMT_RGB555, /**< 16 bit per pixel, 555 */ VPX_IMG_FMT_UYVY, /**< UYVY packed YUV */ VPX_IMG_FMT_YUY2, /**< YUYV packed YUV */ VPX_IMG_FMT_YVYU, /**< YVYU packed YUV */ VPX_IMG_FMT_BGR24, /**< 24 bit per pixel packed BGR */ VPX_IMG_FMT_RGB32_LE, /**< 32 bit packed BGR0 */ VPX_IMG_FMT_ARGB, /**< 32 bit packed ARGB, alpha=255 */ VPX_IMG_FMT_ARGB_LE, /**< 32 bit packed BGRA, alpha=255 */ VPX_IMG_FMT_RGB565_LE, /**< 16 bit per pixel, gggbbbbb rrrrrggg */ VPX_IMG_FMT_RGB555_LE, /**< 16 bit per pixel, gggbbbbb 0rrrrrgg */ VPX_IMG_FMT_YV12 = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 1, /**< planar YVU */ VPX_IMG_FMT_I420 = VPX_IMG_FMT_PLANAR | 2, VPX_IMG_FMT_VPXYV12 = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 3, /** < planar 4:2:0 format with vpx color space */ `````` John Koleszar committed May 06, 2013 58 59 60 `````` VPX_IMG_FMT_VPXI420 = VPX_IMG_FMT_PLANAR | 4, VPX_IMG_FMT_I422 = VPX_IMG_FMT_PLANAR | 5, VPX_IMG_FMT_I444 = VPX_IMG_FMT_PLANAR | 6, `````` Deb Mukherjee committed Oct 01, 2014 61 62 `````` VPX_IMG_FMT_I440 = VPX_IMG_FMT_PLANAR | 7, VPX_IMG_FMT_444A = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_HAS_ALPHA | 6, `````` Deb Mukherjee committed Sep 02, 2014 63 64 `````` VPX_IMG_FMT_I42016 = VPX_IMG_FMT_I420 | VPX_IMG_FMT_HIGHBITDEPTH, VPX_IMG_FMT_I42216 = VPX_IMG_FMT_I422 | VPX_IMG_FMT_HIGHBITDEPTH, `````` Deb Mukherjee committed Oct 01, 2014 65 66 `````` VPX_IMG_FMT_I44416 = VPX_IMG_FMT_I444 | VPX_IMG_FMT_HIGHBITDEPTH, VPX_IMG_FMT_I44016 = VPX_IMG_FMT_I440 | VPX_IMG_FMT_HIGHBITDEPTH `````` John Koleszar committed May 06, 2013 67 `````` } vpx_img_fmt_t; /**< alias for enum vpx_img_fmt */ `````` John Koleszar committed May 18, 2010 68 `````` `````` John Koleszar committed Jul 17, 2012 69 70 71 `````` /**\brief Image Descriptor */ typedef struct vpx_image { vpx_img_fmt_t fmt; /**< Image Format */ `````` John Koleszar committed May 18, 2010 72 `````` `````` John Koleszar committed Jul 17, 2012 73 `````` /* Image storage dimensions */ `````` Deb Mukherjee committed Jul 05, 2014 74 75 76 `````` unsigned int w; /**< Stored image width */ unsigned int h; /**< Stored image height */ unsigned int bit_depth; /**< Stored image bit-depth */ `````` John Koleszar committed May 18, 2010 77 `````` `````` John Koleszar committed Jul 17, 2012 78 79 80 `````` /* Image display dimensions */ unsigned int d_w; /**< Displayed image width */ unsigned int d_h; /**< Displayed image height */ `````` John Koleszar committed May 18, 2010 81 `````` `````` John Koleszar committed Jul 17, 2012 82 83 84 `````` /* Chroma subsampling info */ unsigned int x_chroma_shift; /**< subsampling order, X */ unsigned int y_chroma_shift; /**< subsampling order, Y */ `````` John Koleszar committed May 18, 2010 85 `````` `````` John Koleszar committed Jul 17, 2012 86 `````` /* Image data pointers. */ `````` John Koleszar committed May 24, 2010 87 88 89 90 ``````#define VPX_PLANE_PACKED 0 /**< To be used for all packed formats */ #define VPX_PLANE_Y 0 /**< Y (Luminance) plane */ #define VPX_PLANE_U 1 /**< U (Chroma) plane */ #define VPX_PLANE_V 2 /**< V (Chroma) plane */ `````` James Zern committed Feb 16, 2011 91 ``````#define VPX_PLANE_ALPHA 3 /**< A (Transparency) plane */ `````` John Koleszar committed Jul 17, 2012 92 93 `````` unsigned char *planes[4]; /**< pointer to the top left pixel for each plane */ int stride[4]; /**< stride between rows for each plane */ `````` John Koleszar committed May 18, 2010 94 `````` `````` John Koleszar committed Jul 17, 2012 95 `````` int bps; /**< bits per sample (for packed formats) */ `````` John Koleszar committed May 18, 2010 96 `````` `````` John Koleszar committed Jul 17, 2012 97 98 `````` /* The following member may be set by the application to associate data * with this image. `````` John Koleszar committed May 18, 2010 99 `````` */ `````` John Koleszar committed Jul 17, 2012 100 101 `````` void *user_priv; /**< may be set by the application to associate data * with this image. */ `````` John Koleszar committed May 18, 2010 102 `````` `````` John Koleszar committed Jul 17, 2012 103 104 105 106 `````` /* The following members should be treated as private. */ unsigned char *img_data; /**< private */ int img_data_owner; /**< private */ int self_allocd; /**< private */ `````` Frank Galligan committed Feb 13, 2014 107 108 `````` void *fb_priv; /**< Frame buffer data associated with the image. */ `````` John Koleszar committed Jul 17, 2012 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 `````` } vpx_image_t; /**< alias for struct vpx_image */ /**\brief Representation of a rectangle on a surface */ typedef struct vpx_image_rect { unsigned int x; /**< leftmost column */ unsigned int y; /**< topmost row */ unsigned int w; /**< width */ unsigned int h; /**< height */ } vpx_image_rect_t; /**< alias for struct vpx_image_rect */ /*!\brief Open a descriptor, allocating storage for the underlying image * * Returns a descriptor for storing an image of the given format. The * storage for the descriptor is allocated on the heap. * * \param[in] img Pointer to storage for descriptor. If this parameter * is NULL, the storage for the descriptor will be * allocated on the heap. * \param[in] fmt Format for the image * \param[in] d_w Width of the image * \param[in] d_h Height of the image `````` John Koleszar committed Nov 06, 2012 130 131 `````` * \param[in] align Alignment, in bytes, of the image buffer and * each row in the image(stride). `````` John Koleszar committed Jul 17, 2012 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 `````` * * \return Returns a pointer to the initialized image descriptor. If the img * parameter is non-null, the value of the img parameter will be * returned. */ vpx_image_t *vpx_img_alloc(vpx_image_t *img, vpx_img_fmt_t fmt, unsigned int d_w, unsigned int d_h, unsigned int align); /*!\brief Open a descriptor, using existing storage for the underlying image * * Returns a descriptor for storing an image of the given format. The * storage for descriptor has been allocated elsewhere, and a descriptor is * desired to "wrap" that storage. * * \param[in] img Pointer to storage for descriptor. If this parameter * is NULL, the storage for the descriptor will be * allocated on the heap. * \param[in] fmt Format for the image * \param[in] d_w Width of the image * \param[in] d_h Height of the image * \param[in] align Alignment, in bytes, of each row in the image. * \param[in] img_data Storage to use for the image * * \return Returns a pointer to the initialized image descriptor. If the img * parameter is non-null, the value of the img parameter will be * returned. */ vpx_image_t *vpx_img_wrap(vpx_image_t *img, vpx_img_fmt_t fmt, unsigned int d_w, unsigned int d_h, unsigned int align, unsigned char *img_data); /*!\brief Set the rectangle identifying the displayed portion of the image * * Updates the displayed rectangle (aka viewport) on the image surface to * match the specified coordinates and size. * * \param[in] img Image descriptor * \param[in] x leftmost column * \param[in] y topmost row * \param[in] w width * \param[in] h height * * \return 0 if the requested rectangle is valid, nonzero otherwise. */ int vpx_img_set_rect(vpx_image_t *img, unsigned int x, unsigned int y, unsigned int w, unsigned int h); /*!\brief Flip the image vertically (top for bottom) * * Adjusts the image descriptor's pointers and strides to make the image * be referenced upside-down. * * \param[in] img Image descriptor */ void vpx_img_flip(vpx_image_t *img); /*!\brief Close an image descriptor * * Frees all allocated storage associated with an image descriptor. * * \param[in] img Image descriptor */ void vpx_img_free(vpx_image_t *img); `````` John Koleszar committed May 18, 2010 206 207 `````` #ifdef __cplusplus `````` James Zern committed Jan 23, 2014 208 209 210 ``````} // extern "C" #endif `````` James Zern committed Dec 16, 2013 211 ``#endif // VPX_VPX_IMAGE_H_``