Mercurial > mm7
comparison lib/libavutil/imgutils.h @ 2134:992d2e6f907d
preparation for libavcodec
author | zipi |
---|---|
date | Tue, 31 Dec 2013 14:52:14 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2133:e378232bfd36 | 2134:992d2e6f907d |
---|---|
1 /* | |
2 * This file is part of FFmpeg. | |
3 * | |
4 * FFmpeg is free software; you can redistribute it and/or | |
5 * modify it under the terms of the GNU Lesser General Public | |
6 * License as published by the Free Software Foundation; either | |
7 * version 2.1 of the License, or (at your option) any later version. | |
8 * | |
9 * FFmpeg is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 * Lesser General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU Lesser General Public | |
15 * License along with FFmpeg; if not, write to the Free Software | |
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
17 */ | |
18 | |
19 #ifndef AVUTIL_IMGUTILS_H | |
20 #define AVUTIL_IMGUTILS_H | |
21 | |
22 /** | |
23 * @file | |
24 * misc image utilities | |
25 * | |
26 * @addtogroup lavu_picture | |
27 * @{ | |
28 */ | |
29 | |
30 #include "avutil.h" | |
31 #include "pixdesc.h" | |
32 | |
33 /** | |
34 * Compute the max pixel step for each plane of an image with a | |
35 * format described by pixdesc. | |
36 * | |
37 * The pixel step is the distance in bytes between the first byte of | |
38 * the group of bytes which describe a pixel component and the first | |
39 * byte of the successive group in the same plane for the same | |
40 * component. | |
41 * | |
42 * @param max_pixsteps an array which is filled with the max pixel step | |
43 * for each plane. Since a plane may contain different pixel | |
44 * components, the computed max_pixsteps[plane] is relative to the | |
45 * component in the plane with the max pixel step. | |
46 * @param max_pixstep_comps an array which is filled with the component | |
47 * for each plane which has the max pixel step. May be NULL. | |
48 */ | |
49 void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], | |
50 const AVPixFmtDescriptor *pixdesc); | |
51 | |
52 /** | |
53 * Compute the size of an image line with format pix_fmt and width | |
54 * width for the plane plane. | |
55 * | |
56 * @return the computed size in bytes | |
57 */ | |
58 int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane); | |
59 | |
60 /** | |
61 * Fill plane linesizes for an image with pixel format pix_fmt and | |
62 * width width. | |
63 * | |
64 * @param linesizes array to be filled with the linesize for each plane | |
65 * @return >= 0 in case of success, a negative error code otherwise | |
66 */ | |
67 int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); | |
68 | |
69 /** | |
70 * Fill plane data pointers for an image with pixel format pix_fmt and | |
71 * height height. | |
72 * | |
73 * @param data pointers array to be filled with the pointer for each image plane | |
74 * @param ptr the pointer to a buffer which will contain the image | |
75 * @param linesizes the array containing the linesize for each | |
76 * plane, should be filled by av_image_fill_linesizes() | |
77 * @return the size in bytes required for the image buffer, a negative | |
78 * error code in case of failure | |
79 */ | |
80 int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height, | |
81 uint8_t *ptr, const int linesizes[4]); | |
82 | |
83 /** | |
84 * Allocate an image with size w and h and pixel format pix_fmt, and | |
85 * fill pointers and linesizes accordingly. | |
86 * The allocated image buffer has to be freed by using | |
87 * av_freep(&pointers[0]). | |
88 * | |
89 * @param align the value to use for buffer size alignment | |
90 * @return the size in bytes required for the image buffer, a negative | |
91 * error code in case of failure | |
92 */ | |
93 int av_image_alloc(uint8_t *pointers[4], int linesizes[4], | |
94 int w, int h, enum AVPixelFormat pix_fmt, int align); | |
95 | |
96 /** | |
97 * Copy image plane from src to dst. | |
98 * That is, copy "height" number of lines of "bytewidth" bytes each. | |
99 * The first byte of each successive line is separated by *_linesize | |
100 * bytes. | |
101 * | |
102 * bytewidth must be contained by both absolute values of dst_linesize | |
103 * and src_linesize, otherwise the function behavior is undefined. | |
104 * | |
105 * @param dst_linesize linesize for the image plane in dst | |
106 * @param src_linesize linesize for the image plane in src | |
107 */ | |
108 void av_image_copy_plane(uint8_t *dst, int dst_linesize, | |
109 const uint8_t *src, int src_linesize, | |
110 int bytewidth, int height); | |
111 | |
112 /** | |
113 * Copy image in src_data to dst_data. | |
114 * | |
115 * @param dst_linesizes linesizes for the image in dst_data | |
116 * @param src_linesizes linesizes for the image in src_data | |
117 */ | |
118 void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], | |
119 const uint8_t *src_data[4], const int src_linesizes[4], | |
120 enum AVPixelFormat pix_fmt, int width, int height); | |
121 | |
122 /** | |
123 * Setup the data pointers and linesizes based on the specified image | |
124 * parameters and the provided array. | |
125 * | |
126 * The fields of the given image are filled in by using the src | |
127 * address which points to the image data buffer. Depending on the | |
128 * specified pixel format, one or multiple image data pointers and | |
129 * line sizes will be set. If a planar format is specified, several | |
130 * pointers will be set pointing to the different picture planes and | |
131 * the line sizes of the different planes will be stored in the | |
132 * lines_sizes array. Call with src == NULL to get the required | |
133 * size for the src buffer. | |
134 * | |
135 * To allocate the buffer and fill in the dst_data and dst_linesize in | |
136 * one call, use av_image_alloc(). | |
137 * | |
138 * @param dst_data data pointers to be filled in | |
139 * @param dst_linesizes linesizes for the image in dst_data to be filled in | |
140 * @param src buffer which will contain or contains the actual image data, can be NULL | |
141 * @param pix_fmt the pixel format of the image | |
142 * @param width the width of the image in pixels | |
143 * @param height the height of the image in pixels | |
144 * @param align the value used in src for linesize alignment | |
145 * @return the size in bytes required for src, a negative error code | |
146 * in case of failure | |
147 */ | |
148 int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], | |
149 const uint8_t *src, | |
150 enum AVPixelFormat pix_fmt, int width, int height, int align); | |
151 | |
152 /** | |
153 * Return the size in bytes of the amount of data required to store an | |
154 * image with the given parameters. | |
155 * | |
156 * @param[in] align the assumed linesize alignment | |
157 */ | |
158 int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align); | |
159 | |
160 /** | |
161 * Copy image data from an image into a buffer. | |
162 * | |
163 * av_image_get_buffer_size() can be used to compute the required size | |
164 * for the buffer to fill. | |
165 * | |
166 * @param dst a buffer into which picture data will be copied | |
167 * @param dst_size the size in bytes of dst | |
168 * @param src_data pointers containing the source image data | |
169 * @param src_linesizes linesizes for the image in src_data | |
170 * @param pix_fmt the pixel format of the source image | |
171 * @param width the width of the source image in pixels | |
172 * @param height the height of the source image in pixels | |
173 * @param align the assumed linesize alignment for dst | |
174 * @return the number of bytes written to dst, or a negative value | |
175 * (error code) on error | |
176 */ | |
177 int av_image_copy_to_buffer(uint8_t *dst, int dst_size, | |
178 const uint8_t * const src_data[4], const int src_linesize[4], | |
179 enum AVPixelFormat pix_fmt, int width, int height, int align); | |
180 | |
181 /** | |
182 * Check if the given dimension of an image is valid, meaning that all | |
183 * bytes of the image can be addressed with a signed int. | |
184 * | |
185 * @param w the width of the picture | |
186 * @param h the height of the picture | |
187 * @param log_offset the offset to sum to the log level for logging with log_ctx | |
188 * @param log_ctx the parent logging context, it may be NULL | |
189 * @return >= 0 if valid, a negative error code otherwise | |
190 */ | |
191 int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); | |
192 | |
193 int avpriv_set_systematic_pal2(uint32_t pal[256], enum AVPixelFormat pix_fmt); | |
194 | |
195 /** | |
196 * @} | |
197 */ | |
198 | |
199 | |
200 #endif /* AVUTIL_IMGUTILS_H */ |