Annotation of embedaddon/php/ext/gd/libgd/webpimg.h, revision 1.1
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
! 87: * bit row aligment).
! 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>