00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00016 #ifdef __cplusplus
00017 extern "C" {
00018 #endif
00019
00020 #ifndef VPX_IMAGE_H
00021 #define VPX_IMAGE_H
00022
00031 #define VPX_IMAGE_ABI_VERSION (1)
00034 #define VPX_IMG_FMT_PLANAR 0x100
00035 #define VPX_IMG_FMT_UV_FLIP 0x200
00036 #define VPX_IMG_FMT_HAS_ALPHA 0x400
00040 typedef enum vpx_img_fmt {
00041 VPX_IMG_FMT_NONE,
00042 VPX_IMG_FMT_RGB24,
00043 VPX_IMG_FMT_RGB32,
00044 VPX_IMG_FMT_RGB565,
00045 VPX_IMG_FMT_RGB555,
00046 VPX_IMG_FMT_UYVY,
00047 VPX_IMG_FMT_YUY2,
00048 VPX_IMG_FMT_YVYU,
00049 VPX_IMG_FMT_BGR24,
00050 VPX_IMG_FMT_RGB32_LE,
00051 VPX_IMG_FMT_ARGB,
00052 VPX_IMG_FMT_ARGB_LE,
00053 VPX_IMG_FMT_RGB565_LE,
00054 VPX_IMG_FMT_RGB555_LE,
00055 VPX_IMG_FMT_YV12 = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 1,
00056 VPX_IMG_FMT_I420 = VPX_IMG_FMT_PLANAR | 2,
00057 VPX_IMG_FMT_VPXYV12 = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 3,
00058 VPX_IMG_FMT_VPXI420 = VPX_IMG_FMT_PLANAR | 4,
00059 VPX_IMG_FMT_I422 = VPX_IMG_FMT_PLANAR | 5,
00060 VPX_IMG_FMT_I444 = VPX_IMG_FMT_PLANAR | 6,
00061 VPX_IMG_FMT_444A = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_HAS_ALPHA | 7
00062 } vpx_img_fmt_t;
00064 #if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
00065 #define IMG_FMT_PLANAR VPX_IMG_FMT_PLANAR
00066 #define IMG_FMT_UV_FLIP VPX_IMG_FMT_UV_FLIP
00067 #define IMG_FMT_HAS_ALPHA VPX_IMG_FMT_HAS_ALPHA
00072 #define img_fmt vpx_img_fmt
00073
00076 #define img_fmt_t vpx_img_fmt_t
00077
00078 #define IMG_FMT_NONE VPX_IMG_FMT_NONE
00079 #define IMG_FMT_RGB24 VPX_IMG_FMT_RGB24
00080 #define IMG_FMT_RGB32 VPX_IMG_FMT_RGB32
00081 #define IMG_FMT_RGB565 VPX_IMG_FMT_RGB565
00082 #define IMG_FMT_RGB555 VPX_IMG_FMT_RGB555
00083 #define IMG_FMT_UYVY VPX_IMG_FMT_UYVY
00084 #define IMG_FMT_YUY2 VPX_IMG_FMT_YUY2
00085 #define IMG_FMT_YVYU VPX_IMG_FMT_YVYU
00086 #define IMG_FMT_BGR24 VPX_IMG_FMT_BGR24
00087 #define IMG_FMT_RGB32_LE VPX_IMG_FMT_RGB32_LE
00088 #define IMG_FMT_ARGB VPX_IMG_FMT_ARGB
00089 #define IMG_FMT_ARGB_LE VPX_IMG_FMT_ARGB_LE
00090 #define IMG_FMT_RGB565_LE VPX_IMG_FMT_RGB565_LE
00091 #define IMG_FMT_RGB555_LE VPX_IMG_FMT_RGB555_LE
00092 #define IMG_FMT_YV12 VPX_IMG_FMT_YV12
00093 #define IMG_FMT_I420 VPX_IMG_FMT_I420
00094 #define IMG_FMT_VPXYV12 VPX_IMG_FMT_VPXYV12
00095 #define IMG_FMT_VPXI420 VPX_IMG_FMT_VPXI420
00096 #endif
00097
00099 typedef struct vpx_image {
00100 vpx_img_fmt_t fmt;
00102
00103 unsigned int w;
00104 unsigned int h;
00106
00107 unsigned int d_w;
00108 unsigned int d_h;
00110
00111 unsigned int x_chroma_shift;
00112 unsigned int y_chroma_shift;
00114
00115 #define VPX_PLANE_PACKED 0
00116 #define VPX_PLANE_Y 0
00117 #define VPX_PLANE_U 1
00118 #define VPX_PLANE_V 2
00119 #define VPX_PLANE_ALPHA 3
00120 #if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
00121 #define PLANE_PACKED VPX_PLANE_PACKED
00122 #define PLANE_Y VPX_PLANE_Y
00123 #define PLANE_U VPX_PLANE_U
00124 #define PLANE_V VPX_PLANE_V
00125 #define PLANE_ALPHA VPX_PLANE_ALPHA
00126 #endif
00127 unsigned char *planes[4];
00128 int stride[4];
00130 int bps;
00132
00133
00134
00135 void *user_priv;
00138
00139 unsigned char *img_data;
00140 int img_data_owner;
00141 int self_allocd;
00142 } vpx_image_t;
00145 typedef struct vpx_image_rect {
00146 unsigned int x;
00147 unsigned int y;
00148 unsigned int w;
00149 unsigned int h;
00150 } vpx_image_rect_t;
00170 vpx_image_t *vpx_img_alloc(vpx_image_t *img,
00171 vpx_img_fmt_t fmt,
00172 unsigned int d_w,
00173 unsigned int d_h,
00174 unsigned int align);
00175
00195 vpx_image_t *vpx_img_wrap(vpx_image_t *img,
00196 vpx_img_fmt_t fmt,
00197 unsigned int d_w,
00198 unsigned int d_h,
00199 unsigned int align,
00200 unsigned char *img_data);
00201
00202
00216 int vpx_img_set_rect(vpx_image_t *img,
00217 unsigned int x,
00218 unsigned int y,
00219 unsigned int w,
00220 unsigned int h);
00221
00222
00230 void vpx_img_flip(vpx_image_t *img);
00231
00238 void vpx_img_free(vpx_image_t *img);
00239
00240 #endif
00241 #ifdef __cplusplus
00242 }
00243 #endif