Annotation of embedaddon/php/ext/gd/libgd/webpimg.h, revision 1.1.1.2

1.1       misho       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 reponsible 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
1.1.1.2 ! misho      87:  *                   bit row alignment).
1.1       misho      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_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>