190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*
2f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber *
4f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Use of this source code is governed by a BSD-style license
5f71323e297a928af368937089d3ed71239786f86Andreas Huber *  that can be found in the LICENSE file in the root of the source
6f71323e297a928af368937089d3ed71239786f86Andreas Huber *  tree. An additional intellectual property rights grant can be found
7f71323e297a928af368937089d3ed71239786f86Andreas Huber *  in the file PATENTS.  All contributing project authors may
8f71323e297a928af368937089d3ed71239786f86Andreas Huber *  be found in the AUTHORS file in the root of the source tree.
990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1279f15823c34ae1e423108295e416213200bb280fAndreas Huber/*!\file
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * \brief Describes the vpx image descriptor and associated operations
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber *
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */
16b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifndef VPX_VPX_IMAGE_H_
17b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#define VPX_VPX_IMAGE_H_
18b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifdef __cplusplus
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern "C" {
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /*!\brief Current ABI version number
24ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
25ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \internal
26ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * If this file is altered in any way that changes the ABI, this value
27ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * must be bumped.  Examples include, but are not limited to, changing
28ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * types, removing or reassigning enums, adding/removing/rearranging
29ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * fields to structures
30ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   */
31b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#define VPX_IMAGE_ABI_VERSION (2) /**<\hideinitializer*/
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
34f71323e297a928af368937089d3ed71239786f86Andreas Huber#define VPX_IMG_FMT_PLANAR     0x100  /**< Image is a planar format */
35f71323e297a928af368937089d3ed71239786f86Andreas Huber#define VPX_IMG_FMT_UV_FLIP    0x200  /**< V plane precedes U plane in memory */
3679f15823c34ae1e423108295e416213200bb280fAndreas Huber#define VPX_IMG_FMT_HAS_ALPHA  0x400  /**< Image has an alpha channel component */
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
39ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /*!\brief List of supported image formats */
40ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  typedef enum vpx_img_fmt {
41ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_NONE,
42ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_RGB24,   /**< 24 bit per pixel packed RGB */
43ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_RGB32,   /**< 32 bit per pixel packed 0RGB */
44ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_RGB565,  /**< 16 bit per pixel, 565 */
45ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_RGB555,  /**< 16 bit per pixel, 555 */
46ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_UYVY,    /**< UYVY packed YUV */
47ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_YUY2,    /**< YUYV packed YUV */
48ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_YVYU,    /**< YVYU packed YUV */
49ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_BGR24,   /**< 24 bit per pixel packed BGR */
50ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_RGB32_LE, /**< 32 bit packed BGR0 */
51ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_ARGB,     /**< 32 bit packed ARGB, alpha=255 */
52ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_ARGB_LE,  /**< 32 bit packed BGRA, alpha=255 */
53ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_RGB565_LE,  /**< 16 bit per pixel, gggbbbbb rrrrrggg */
54ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_RGB555_LE,  /**< 16 bit per pixel, gggbbbbb 0rrrrrgg */
55ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_YV12    = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 1, /**< planar YVU */
56ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_I420    = VPX_IMG_FMT_PLANAR | 2,
57ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_VPXYV12 = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 3, /** < planar 4:2:0 format with vpx color space */
58ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_VPXI420 = VPX_IMG_FMT_PLANAR | 4,
59ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_I422    = VPX_IMG_FMT_PLANAR | 5,
60ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_I444    = VPX_IMG_FMT_PLANAR | 6,
61ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    VPX_IMG_FMT_444A    = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_HAS_ALPHA | 7
62ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  } vpx_img_fmt_t; /**< alias for enum vpx_img_fmt */
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
64f71323e297a928af368937089d3ed71239786f86Andreas Huber#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
65f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_PLANAR         VPX_IMG_FMT_PLANAR     /**< \deprecated Use #VPX_IMG_FMT_PLANAR */
66f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_UV_FLIP        VPX_IMG_FMT_UV_FLIP    /**< \deprecated Use #VPX_IMG_FMT_UV_FLIP */
67f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_HAS_ALPHA      VPX_IMG_FMT_HAS_ALPHA  /**< \deprecated Use #VPX_IMG_FMT_HAS_ALPHA */
68f71323e297a928af368937089d3ed71239786f86Andreas Huber
69ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /*!\brief Deprecated list of supported image formats
70ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \deprecated New code should use #vpx_img_fmt
71ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   */
72f71323e297a928af368937089d3ed71239786f86Andreas Huber#define img_fmt   vpx_img_fmt
73ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /*!\brief alias for enum img_fmt.
74ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \deprecated New code should use #vpx_img_fmt_t
75ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   */
76f71323e297a928af368937089d3ed71239786f86Andreas Huber#define img_fmt_t vpx_img_fmt_t
77f71323e297a928af368937089d3ed71239786f86Andreas Huber
78f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_NONE       VPX_IMG_FMT_NONE       /**< \deprecated Use #VPX_IMG_FMT_NONE */
79f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_RGB24      VPX_IMG_FMT_RGB24      /**< \deprecated Use #VPX_IMG_FMT_RGB24 */
80f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_RGB32      VPX_IMG_FMT_RGB32      /**< \deprecated Use #VPX_IMG_FMT_RGB32 */
81f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_RGB565     VPX_IMG_FMT_RGB565     /**< \deprecated Use #VPX_IMG_FMT_RGB565 */
82f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_RGB555     VPX_IMG_FMT_RGB555     /**< \deprecated Use #VPX_IMG_FMT_RGB555 */
83f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_UYVY       VPX_IMG_FMT_UYVY       /**< \deprecated Use #VPX_IMG_FMT_UYVY */
84f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_YUY2       VPX_IMG_FMT_YUY2       /**< \deprecated Use #VPX_IMG_FMT_YUY2 */
85f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_YVYU       VPX_IMG_FMT_YVYU       /**< \deprecated Use #VPX_IMG_FMT_YVYU */
86f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_BGR24      VPX_IMG_FMT_BGR24      /**< \deprecated Use #VPX_IMG_FMT_BGR24 */
87f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_RGB32_LE   VPX_IMG_FMT_RGB32_LE   /**< \deprecated Use #VPX_IMG_FMT_RGB32_LE */
88f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_ARGB       VPX_IMG_FMT_ARGB       /**< \deprecated Use #VPX_IMG_FMT_ARGB */
89f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_ARGB_LE    VPX_IMG_FMT_ARGB_LE    /**< \deprecated Use #VPX_IMG_FMT_ARGB_LE */
90f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_RGB565_LE  VPX_IMG_FMT_RGB565_LE  /**< \deprecated Use #VPX_IMG_FMT_RGB565_LE */
91f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_RGB555_LE  VPX_IMG_FMT_RGB555_LE  /**< \deprecated Use #VPX_IMG_FMT_RGB555_LE */
92f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_YV12       VPX_IMG_FMT_YV12       /**< \deprecated Use #VPX_IMG_FMT_YV12 */
93f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_I420       VPX_IMG_FMT_I420       /**< \deprecated Use #VPX_IMG_FMT_I420 */
94f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_VPXYV12    VPX_IMG_FMT_VPXYV12    /**< \deprecated Use #VPX_IMG_FMT_VPXYV12 */
95f71323e297a928af368937089d3ed71239786f86Andreas Huber#define IMG_FMT_VPXI420    VPX_IMG_FMT_VPXI420    /**< \deprecated Use #VPX_IMG_FMT_VPXI420 */
96f71323e297a928af368937089d3ed71239786f86Andreas Huber#endif /* VPX_CODEC_DISABLE_COMPAT */
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
98ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /**\brief Image Descriptor */
99ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  typedef struct vpx_image {
100ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    vpx_img_fmt_t fmt; /**< Image Format */
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
102ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    /* Image storage dimensions */
103ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int  w;   /**< Stored image width */
104ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int  h;   /**< Stored image height */
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
106ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    /* Image display dimensions */
107ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int  d_w;   /**< Displayed image width */
108ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int  d_h;   /**< Displayed image height */
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
110ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    /* Chroma subsampling info */
111ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int  x_chroma_shift;   /**< subsampling order, X */
112ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int  y_chroma_shift;   /**< subsampling order, Y */
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
114ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    /* Image data pointers. */
115f71323e297a928af368937089d3ed71239786f86Andreas Huber#define VPX_PLANE_PACKED 0   /**< To be used for all packed formats */
116f71323e297a928af368937089d3ed71239786f86Andreas Huber#define VPX_PLANE_Y      0   /**< Y (Luminance) plane */
117f71323e297a928af368937089d3ed71239786f86Andreas Huber#define VPX_PLANE_U      1   /**< U (Chroma) plane */
118f71323e297a928af368937089d3ed71239786f86Andreas Huber#define VPX_PLANE_V      2   /**< V (Chroma) plane */
11979f15823c34ae1e423108295e416213200bb280fAndreas Huber#define VPX_PLANE_ALPHA  3   /**< A (Transparency) plane */
120f71323e297a928af368937089d3ed71239786f86Andreas Huber#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
121f71323e297a928af368937089d3ed71239786f86Andreas Huber#define PLANE_PACKED     VPX_PLANE_PACKED
122f71323e297a928af368937089d3ed71239786f86Andreas Huber#define PLANE_Y          VPX_PLANE_Y
123f71323e297a928af368937089d3ed71239786f86Andreas Huber#define PLANE_U          VPX_PLANE_U
124f71323e297a928af368937089d3ed71239786f86Andreas Huber#define PLANE_V          VPX_PLANE_V
125f71323e297a928af368937089d3ed71239786f86Andreas Huber#define PLANE_ALPHA      VPX_PLANE_ALPHA
126f71323e297a928af368937089d3ed71239786f86Andreas Huber#endif
127ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned char *planes[4];  /**< pointer to the top left pixel for each plane */
128ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    int      stride[4];  /**< stride between rows for each plane */
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
130ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    int     bps; /**< bits per sample (for packed formats) */
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
132ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    /* The following member may be set by the application to associate data
133ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang     * with this image.
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber     */
135ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    void    *user_priv; /**< may be set by the application to associate data
136ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                         *   with this image. */
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
138ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    /* The following members should be treated as private. */
139ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned char *img_data;       /**< private */
140ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    int      img_data_owner; /**< private */
141ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    int      self_allocd;    /**< private */
142b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
143b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian    void    *fb_priv; /**< Frame buffer data associated with the image. */
144ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  } vpx_image_t; /**< alias for struct vpx_image */
145ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
146ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /**\brief Representation of a rectangle on a surface */
147ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  typedef struct vpx_image_rect {
148ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int x; /**< leftmost column */
149ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int y; /**< topmost row */
150ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int w; /**< width */
151ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int h; /**< height */
152ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  } vpx_image_rect_t; /**< alias for struct vpx_image_rect */
153ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
154ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /*!\brief Open a descriptor, allocating storage for the underlying image
155ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
156ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * Returns a descriptor for storing an image of the given format. The
157ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * storage for the descriptor is allocated on the heap.
158ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
159ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    img       Pointer to storage for descriptor. If this parameter
160ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *                         is NULL, the storage for the descriptor will be
161ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *                         allocated on the heap.
162ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    fmt       Format for the image
163ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    d_w       Width of the image
164ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    d_h       Height of the image
165ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    align     Alignment, in bytes, of the image buffer and
166ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *                         each row in the image(stride).
167ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
168ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \return Returns a pointer to the initialized image descriptor. If the img
169ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *         parameter is non-null, the value of the img parameter will be
170ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *         returned.
171ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   */
172ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  vpx_image_t *vpx_img_alloc(vpx_image_t  *img,
173ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                             vpx_img_fmt_t fmt,
174ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                             unsigned int d_w,
175ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                             unsigned int d_h,
176ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                             unsigned int align);
177ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
178ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /*!\brief Open a descriptor, using existing storage for the underlying image
179ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
180ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * Returns a descriptor for storing an image of the given format. The
181ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * storage for descriptor has been allocated elsewhere, and a descriptor is
182ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * desired to "wrap" that storage.
183ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
184ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    img       Pointer to storage for descriptor. If this parameter
185ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *                         is NULL, the storage for the descriptor will be
186ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *                         allocated on the heap.
187ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    fmt       Format for the image
188ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    d_w       Width of the image
189ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    d_h       Height of the image
190ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    align     Alignment, in bytes, of each row in the image.
191ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    img_data  Storage to use for the image
192ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
193ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \return Returns a pointer to the initialized image descriptor. If the img
194ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *         parameter is non-null, the value of the img parameter will be
195ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *         returned.
196ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   */
197ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  vpx_image_t *vpx_img_wrap(vpx_image_t  *img,
198ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                            vpx_img_fmt_t fmt,
199ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                            unsigned int d_w,
200ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                            unsigned int d_h,
201ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                            unsigned int align,
202ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                            unsigned char      *img_data);
203ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
204ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
205ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /*!\brief Set the rectangle identifying the displayed portion of the image
206ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
207ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * Updates the displayed rectangle (aka viewport) on the image surface to
208ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * match the specified coordinates and size.
209ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
210ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    img       Image descriptor
211ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    x         leftmost column
212ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    y         topmost row
213ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    w         width
214ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    h         height
215ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
216ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \return 0 if the requested rectangle is valid, nonzero otherwise.
217ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   */
218ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  int vpx_img_set_rect(vpx_image_t  *img,
219ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                       unsigned int  x,
220ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                       unsigned int  y,
221ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                       unsigned int  w,
222ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                       unsigned int  h);
223ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
224ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
225ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /*!\brief Flip the image vertically (top for bottom)
226ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
227ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * Adjusts the image descriptor's pointers and strides to make the image
228ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * be referenced upside-down.
229ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
230ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    img       Image descriptor
231ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   */
232ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  void vpx_img_flip(vpx_image_t *img);
233ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
234ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  /*!\brief Close an image descriptor
235ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
236ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * Frees all allocated storage associated with an image descriptor.
237ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   *
238ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   * \param[in]    img       Image descriptor
239ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang   */
240ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  void vpx_img_free(vpx_image_t *img);
24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifdef __cplusplus
243b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian}  // extern "C"
24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
245b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
246b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif  // VPX_VPX_IMAGE_H_
247