root/ext/gd/libgd/webpimg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*===========================================================================*
   2  - Copyright 2010 Google Inc.
   3  -
   4  - This code is licensed under the same terms as WebM:
   5  - Software License Agreement:  http://www.webmproject.org/license/software/
   6  - Additional IP Rights Grant:  http://www.webmproject.org/license/additional/
   7  *===========================================================================*/
   8 
   9 /*
  10  * Encoding/Decoding of WebP still image compression format.
  11  *
  12  * 1. WebPDecode: Takes an array of bytes (string) corresponding to the WebP
  13  *                encoded image and generates output in the YUV format with
  14  *                the color components U, V subsampled to 1/2 resolution along
  15  *                each dimension.
  16  *
  17  * 2. YUV420toRGBA: Converts from YUV (with color subsampling) such as produced
  18  *                  by the WebPDecode routine into 32 bits per pixel RGBA data
  19  *                  array. This data array can be directly used by the Leptonica
  20  *                  Pix in-memory image format.
  21  *
  22  * 3. WebPEncode: Takes a Y, U, V data buffers (with color components U and V
  23  *                subsampled to 1/2 resolution) and generates the WebP string
  24  *
  25  * 4. RGBAToYUV420: Generates Y, U, V data (with color subsampling) from 32 bits
  26  *                  per pixel RGBA data buffer. The resulting YUV data can be
  27  *                  directly fed into the WebPEncode routine.
  28  *
  29  * 5. AdjustColorspace:
  30  *
  31  * 6. AdjustColorspaceBack:
  32  */
  33 
  34 #ifndef THIRD_PARTY_VP8_VP8IMG_H_
  35 #define THIRD_PARTY_VP8_VP8IMG_H_
  36 
  37 #ifdef __cplusplus
  38 extern "C" {
  39 #endif  /* __cplusplus */
  40 
  41 typedef unsigned char uint8;
  42 typedef unsigned int uint32;
  43 typedef enum WebPResultType {
  44   webp_success = 0,
  45   webp_failure = -1
  46 } WebPResult;
  47 
  48 /* Takes an array of bytes (string) corresponding to the WebP
  49  * encoded image and generates output in the YUV format with
  50  * the color components U, V subsampled to 1/2 resolution along
  51  * each dimension.
  52  * Input:
  53  *      1. data: the WebP data stream (array of bytes)
  54  *      2. data_size: count of bytes in the WebP data stream
  55  *
  56  * Output:
  57  *      3. p_Y/p_U/p_V : pointer to the Y/U/V data buffer (this routine will
  58  *                       allocate memory for the buffer, fill the buffer with
  59  *                       appropriate data and transfer owner ship of the buffer
  60  *                       to caller. Caller is responsible for freeing the memory).
  61  *                       Note that the memory for Y, U, V buffers is alloacted
  62  *                       in one chunk, hence one should call free(*p_Y) only.
  63  *                       Do not try to free the U and V buffers.
  64  *
  65  *      6. p_width: this routine returns the width of the decoded image here
  66  *      7. p_height: this routine returns the width of the decoded image here
  67  * Return: success/failure
  68  */
  69 WebPResult WebPDecode(const uint8* data,
  70                       int data_size,
  71                       uint8** p_Y,
  72                       uint8** p_U,
  73                       uint8** p_V,
  74                       int* p_width,
  75                       int* p_height);
  76 
  77 /* WebPEncode: Takes a Y, U, V data buffers (with color components U and V
  78  *             subsampled to 1/2 resolution) and generates the WebP string.
  79  * Input:
  80  *      1, 2, 3. Y, U, V: The input YUV data buffers
  81  *      4, 5. y_width, y_height: The width and height of the image whose data
  82  *                               is in Y, U, V. This matches the Y plane. The U
  83  *                               and V planes typically have 1/2 width and
  84  *                               height.
  85  *      6. y_stride: The width (in bytes) of one row of Y data. This may not
  86  *                   match width if there is end of row padding (e.g., for 32
  87  *                   bit row alignment).
  88  *      7. QP: the quantization parameter. This parameter controls the
  89  *             compression vs quality tradeoff. Use smaller numbers for better
  90  *             quality (compression will be lesser) and vice versa. 20 is a
  91  *             good optimal value.
  92  * Output:
  93  *      8. p_out: the output array of bytes corresponding to the encoded WebP
  94  *                image. This routine allocates memory for the buffer, fills it
  95  *                with appropriate values and transfers ownership to caller.
  96  *                Caller responsible for freeing of memory.
  97  * Return: success/failure
  98  */
  99 WebPResult WebPEncode(const uint8* Y,
 100                       const uint8* U,
 101                       const uint8* V,
 102                       int y_width,
 103                       int y_height,
 104                       int y_stride,
 105                       int uv_width,
 106                       int uv_height,
 107                       int uv_stride,
 108                       int QP,
 109                       unsigned char** p_out,
 110                       int* p_out_size_bytes,
 111                       double* psnr);
 112 
 113 /* Converts from YUV (with color subsampling) such as produced by the WebPDecode
 114  * routine into 32 bits per pixel RGBA data array. This data array can be
 115  * directly used by the Leptonica Pix in-memory image format.
 116  * Input:
 117  *      1, 2, 3. Y, U, V: the input data buffers
 118  *      4. pixwpl: the desired words per line corresponding to the supplied
 119  *                 output pixdata.
 120  *      5. width, height: the dimensions of the image whose data resides in Y,
 121  *                        U, V.
 122  * Output:
 123  *     6. pixdata: the output data buffer. Caller should allocate
 124  *                 height * pixwpl bytes of memory before calling this routine.
 125  */
 126 void YUV420toRGBA(uint8* Y,
 127                   uint8* U,
 128                   uint8* V,
 129                   int words_per_line,
 130                   int width,
 131                   int height,
 132                   uint32* pixdata);
 133 
 134 /* Generates Y, U, V data (with color subsampling) from 32 bits
 135  * per pixel RGBA data buffer. The resulting YUV data can be directly fed into
 136  * the WebPEncode routine.
 137  * Input:
 138  *    1. pix data input rgba data buffer
 139  *    2. words per line corresponding to pixdata
 140  *    3, 4. image width and height respectively
 141  * Output:
 142  *    5, 6, 7. Output YUV data buffers
 143  */
 144 void RGBAToYUV420(uint32* pixdata,
 145                   int words_per_line,
 146                   int width,
 147                   int height,
 148                   uint8* Y,
 149                   uint8* U,
 150                   uint8* V);
 151 
 152 /* This function adjust from YUV420J (jpeg decoding) to YUV420 (webp input)
 153  * Hints: http://en.wikipedia.org/wiki/YCbCr
 154  */
 155 void AdjustColorspace(uint8* Y, uint8* U, uint8* V, int width, int height);
 156 
 157 /* Inverse function: convert from YUV420 to YUV420J */
 158 void AdjustColorspaceBack(uint8* Y, uint8* U, uint8* V, int width, int height);
 159 
 160 /* Checks WebP image header and outputs height and width information of
 161  * the image
 162  *
 163  * Input:
 164  *      1. data: the WebP data stream (array of bytes)
 165  *      2. data_size: count of bytes in the WebP data stream
 166  *
 167  * Outut:
 168  *      width/height: width and height of the image
 169  *
 170  * Return: success/failure
 171  */
 172 WebPResult WebPGetInfo(const uint8* data,
 173                        int data_size,
 174                        int *width,
 175                        int *height);
 176 
 177 #ifdef __cplusplus
 178 }
 179 #endif  /* __cplusplus */
 180 
 181 #endif  /* THIRD_PARTY_VP8_VP8IMG_H_ */

/* [<][>][^][v][top][bottom][index][help] */