Annotation of embedaddon/php/ext/gd/libgd/webpimg.h, revision 1.1.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>