1 /*
2 * pixel format descriptor
3 * Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at>
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 #ifndef AVUTIL_PIXDESC_H
23 #define AVUTIL_PIXDESC_H
24
25 #include <inttypes.h>
26
30
32 /**
33 * Which of the 4 planes contains the component.
34 */
36
37 /**
38 * Number of elements between 2 horizontally consecutive pixels.
39 * Elements are bits for bitstream formats, bytes otherwise.
40 */
42
43 /**
44 * Number of elements before the component of the first pixel.
45 * Elements are bits for bitstream formats, bytes otherwise.
46 */
48
49 /**
50 * Number of least significant bits that must be shifted away
51 * to get the value.
52 */
54
55 /**
56 * Number of bits in the component.
57 */
59
60 #if FF_API_PLUS1_MINUS1
61 /** deprecated, use step instead */
63
64 /** deprecated, use depth instead */
66
67 /** deprecated, use offset instead */
69 #endif
71
72 /**
73 * Descriptor that unambiguously describes how the bits of a pixel are
74 * stored in the up to 4 data planes of an image. It also stores the
75 * subsampling factors and number of components.
76 *
77 * @note This is separate of the colorspace (RGB, YCbCr, YPbPr, JPEG-style YUV
78 * and all the YUV variants) AVPixFmtDescriptor just stores how values
79 * are stored not what these values represent.
80 */
84
85 /**
86 * Amount to shift the luma width right to find the chroma width.
87 * For YV12 this is 1 for example.
88 * chroma_width = AV_CEIL_RSHIFT(luma_width, log2_chroma_w)
89 * The note above is needed to ensure rounding up.
90 * This value only refers to the chroma components.
91 */
93
94 /**
95 * Amount to shift the luma height right to find the chroma height.
96 * For YV12 this is 1 for example.
97 * chroma_height= AV_CEIL_RSHIFT(luma_height, log2_chroma_h)
98 * The note above is needed to ensure rounding up.
99 * This value only refers to the chroma components.
100 */
102
103 /**
104 * Combination of AV_PIX_FMT_FLAG_... flags.
105 */
107
108 /**
109 * Parameters that describe how pixels are packed.
110 * If the format has 1 or 2 components, then luma is 0.
111 * If the format has 3 or 4 components:
112 * if the RGB flag is set then 0 is red, 1 is green and 2 is blue;
113 * otherwise 0 is luma, 1 is chroma-U and 2 is chroma-V.
114 *
115 * If present, the Alpha channel is always the last component.
116 */
118
119 /**
120 * Alternative comma-separated names.
121 */
124
125 /**
126 * Pixel format is big-endian.
127 */
128 #define AV_PIX_FMT_FLAG_BE (1 << 0)
129 /**
130 * Pixel format has a palette in data[1], values are indexes in this palette.
131 */
132 #define AV_PIX_FMT_FLAG_PAL (1 << 1)
133 /**
134 * All values of a component are bit-wise packed end to end.
135 */
136 #define AV_PIX_FMT_FLAG_BITSTREAM (1 << 2)
137 /**
138 * Pixel format is an HW accelerated format.
139 */
140 #define AV_PIX_FMT_FLAG_HWACCEL (1 << 3)
141 /**
142 * At least one pixel component is not in the first data plane.
143 */
144 #define AV_PIX_FMT_FLAG_PLANAR (1 << 4)
145 /**
146 * The pixel format contains RGB-like data (as opposed to YUV/grayscale).
147 */
148 #define AV_PIX_FMT_FLAG_RGB (1 << 5)
149
150 /**
151 * The pixel format is "pseudo-paletted". This means that it contains a
152 * fixed palette in the 2nd plane but the palette is fixed/constant for each
153 * PIX_FMT. This allows interpreting the data as if it was PAL8, which can
154 * in some cases be simpler. Or the data can be interpreted purely based on
155 * the pixel format without using the palette.
156 * An example of a pseudo-paletted format is AV_PIX_FMT_GRAY8
157 *
158 * @deprecated This flag is deprecated, and will be removed. When it is removed,
159 * the extra palette allocation in AVFrame.data[1] is removed as well. Only
160 * actual paletted formats (as indicated by AV_PIX_FMT_FLAG_PAL) will have a
161 * palette. Starting with FFmpeg versions which have this flag deprecated, the
162 * extra "pseudo" palette is already ignored, and API users are not required to
163 * allocate a palette for AV_PIX_FMT_FLAG_PSEUDOPAL formats (it was required
164 * before the deprecation, though).
165 */
166 #define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6)
167
168 /**
169 * The pixel format has an alpha channel. This is set on all formats that
170 * support alpha in some way. The exception is AV_PIX_FMT_PAL8, which can
171 * carry alpha as part of the palette. Details are explained in the
172 * AVPixelFormat enum, and are also encoded in the corresponding
173 * AVPixFmtDescriptor.
174 *
175 * The alpha is always straight, never pre-multiplied.
176 *
177 * If a codec or a filter does not support alpha, it should set all alpha to
178 * opaque, or use the equivalent pixel formats without alpha component, e.g.
179 * AV_PIX_FMT_RGB0 (or AV_PIX_FMT_RGB24 etc.) instead of AV_PIX_FMT_RGBA.
180 */
181 #define AV_PIX_FMT_FLAG_ALPHA (1 << 7)
182
183 /**
184 * The pixel format is following a Bayer pattern
185 */
186 #define AV_PIX_FMT_FLAG_BAYER (1 << 8)
187
188 /**
189 * The pixel format contains IEEE-754 floating point values. Precision (double,
190 * single, or half) should be determined by the pixel size (64, 32, or 16 bits).
191 */
192 #define AV_PIX_FMT_FLAG_FLOAT (1 << 9)
193
194 /**
195 * Return the number of bits per pixel used by the pixel format
196 * described by pixdesc. Note that this is not the same as the number
197 * of bits per sample.
198 *
199 * The returned number of bits refers to the number of bits actually
200 * used for storing the pixel information, that is padding bits are
201 * not counted.
202 */
204
205 /**
206 * Return the number of bits per pixel for the pixel format
207 * described by pixdesc, including any padding or unused bits.
208 */
210
211 /**
212 * @return a pixel format descriptor for provided pixel format or NULL if
213 * this pixel format is unknown.
214 */
216
217 /**
218 * Iterate over all pixel format descriptors known to libavutil.
219 *
220 * @param prev previous descriptor. NULL to get the first descriptor.
221 *
222 * @return next descriptor or NULL after the last descriptor
223 */
225
226 /**
227 * @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc
228 * is not a valid pointer to a pixel format descriptor.
229 */
231
232 /**
233 * Utility function to access log2_chroma_w log2_chroma_h from
234 * the pixel format AVPixFmtDescriptor.
235 *
236 * @param[in] pix_fmt the pixel format
237 * @param[out] h_shift store log2_chroma_w (horizontal/width shift)
238 * @param[out] v_shift store log2_chroma_h (vertical/height shift)
239 *
240 * @return 0 on success, AVERROR(ENOSYS) on invalid or unknown pixel format
241 */
243 int *h_shift, int *v_shift);
244
245 /**
246 * @return number of planes in pix_fmt, a negative AVERROR if pix_fmt is not a
247 * valid pixel format.
248 */
250
251 /**
252 * @return the name for provided color range or NULL if unknown.
253 */
255
256 /**
257 * @return the AVColorRange value for name or an AVError if not found.
258 */
260
261 /**
262 * @return the name for provided color primaries or NULL if unknown.
263 */
265
266 /**
267 * @return the AVColorPrimaries value for name or an AVError if not found.
268 */
270
271 /**
272 * @return the name for provided color transfer or NULL if unknown.
273 */
275
276 /**
277 * @return the AVColorTransferCharacteristic value for name or an AVError if not found.
278 */
280
281 /**
282 * @return the name for provided color space or NULL if unknown.
283 */
285
286 /**
287 * @return the AVColorSpace value for name or an AVError if not found.
288 */
290
291 /**
292 * @return the name for provided chroma location or NULL if unknown.
293 */
295
296 /**
297 * @return the AVChromaLocation value for name or an AVError if not found.
298 */
300
301 /**
302 * Return the pixel format corresponding to name.
303 *
304 * If there is no pixel format with name name, then looks for a
305 * pixel format with the name corresponding to the native endian
306 * format of name.
307 * For example in a little-endian system, first looks for "gray16",
308 * then for "gray16le".
309 *
310 * Finally if no pixel format has been found, returns AV_PIX_FMT_NONE.
311 */
313
314 /**
315 * Return the short name for a pixel format, NULL in case pix_fmt is
316 * unknown.
317 *
318 * @see av_get_pix_fmt(), av_get_pix_fmt_string()
319 */
321
322 /**
323 * Print in buf the string corresponding to the pixel format with
324 * number pix_fmt, or a header if pix_fmt is negative.
325 *
326 * @param buf the buffer where to write the string
327 * @param buf_size the size of buf
328 * @param pix_fmt the number of the pixel format to print the
329 * corresponding info string, or a negative value to print the
330 * corresponding header.
331 */
334
335 /**
336 * Read a line from an image, and write the values of the
337 * pixel format component c to dst.
338 *
339 * @param data the array containing the pointers to the planes of the image
340 * @param linesize the array containing the linesizes of the image
341 * @param desc the pixel format descriptor for the image
342 * @param x the horizontal coordinate of the first pixel to read
343 * @param y the vertical coordinate of the first pixel to read
344 * @param w the width of the line to read, that is the number of
345 * values to write to dst
346 * @param read_pal_component if not zero and the format is a paletted
347 * format writes the values corresponding to the palette
348 * component c in data[1] to dst, rather than the palette indexes in
349 * data[0]. The behavior is undefined if the format is not paletted.
350 */
353 int x,
int y,
int c,
int w,
int read_pal_component);
354
355 /**
356 * Write the values from src to the pixel format component c of an
357 * image line.
358 *
359 * @param src array containing the values to write
360 * @param data the array containing the pointers to the planes of the
361 * image to write into. It is supposed to be zeroed.
362 * @param linesize the array containing the linesizes of the image
363 * @param desc the pixel format descriptor for the image
364 * @param x the horizontal coordinate of the first pixel to write
365 * @param y the vertical coordinate of the first pixel to write
366 * @param w the width of the line to write, that is the number of
367 * values to write to the image line
368 */
371 int x,
int y,
int c,
int w);
372
373 /**
374 * Utility function to swap the endianness of a pixel format.
375 *
376 * @param[in] pix_fmt the pixel format
377 *
378 * @return pixel format with swapped endianness if it exists,
379 * otherwise AV_PIX_FMT_NONE
380 */
382
383 #define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */
384 #define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */
385 #define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */
386 #define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */
387 #define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */
388 #define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
389
390 /**
391 * Compute what kind of losses will occur when converting from one specific
392 * pixel format to another.
393 * When converting from one pixel format to another, information loss may occur.
394 * For example, when converting from RGB24 to GRAY, the color information will
395 * be lost. Similarly, other losses occur when converting from some formats to
396 * other formats. These losses can involve loss of chroma, but also loss of
397 * resolution, loss of color depth, loss due to the color space conversion, loss
398 * of the alpha bits or loss due to color quantization.
399 * av_get_fix_fmt_loss() informs you about the various types of losses
400 * which will occur when converting from one pixel format to another.
401 *
402 * @param[in] dst_pix_fmt destination pixel format
403 * @param[in] src_pix_fmt source pixel format
404 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
405 * @return Combination of flags informing you what kind of losses will occur
406 * (maximum loss for an invalid dst_pix_fmt).
407 */
410 int has_alpha);
411
412 /**
413 * Compute what kind of losses will occur when converting from one specific
414 * pixel format to another.
415 * When converting from one pixel format to another, information loss may occur.
416 * For example, when converting from RGB24 to GRAY, the color information will
417 * be lost. Similarly, other losses occur when converting from some formats to
418 * other formats. These losses can involve loss of chroma, but also loss of
419 * resolution, loss of color depth, loss due to the color space conversion, loss
420 * of the alpha bits or loss due to color quantization.
421 * av_get_fix_fmt_loss() informs you about the various types of losses
422 * which will occur when converting from one pixel format to another.
423 *
424 * @param[in] dst_pix_fmt destination pixel format
425 * @param[in] src_pix_fmt source pixel format
426 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
427 * @return Combination of flags informing you what kind of losses will occur
428 * (maximum loss for an invalid dst_pix_fmt).
429 */
431 enum AVPixelFormat src_pix_fmt,
int has_alpha,
int *loss_ptr);
432
433 #endif /* AVUTIL_PIXDESC_H */
attribute_deprecated int offset_plus1
deprecated, use offset instead
int plane
Which of the 4 planes contains the component.
static enum AVPixelFormat pix_fmt
const char * alias
Alternative comma-separated names.
ptrdiff_t const GLvoid * data
void av_read_image_line(uint16_t *dst, const uint8_t *data[4], const int linesize[4], const AVPixFmtDescriptor *desc, int x, int y, int c, int w, int read_pal_component)
Read a line from an image, and write the values of the pixel format component c to dst...
const char * av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
AVColorTransferCharacteristic
Color Transfer Characteristic.
Macro definitions for various function/variable attributes.
int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, int has_alpha)
Compute what kind of losses will occur when converting from one specific pixel format to another...
enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
Utility function to swap the endianness of a pixel format.
int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
Return the number of bits per pixel used by the pixel format described by pixdesc.
void av_write_image_line(const uint16_t *src, uint8_t *data[4], const int linesize[4], const AVPixFmtDescriptor *desc, int x, int y, int c, int w)
Write the values from src to the pixel format component c of an image line.
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
AVColorSpace
YUV colorspace type.
int av_chroma_location_from_name(const char *name)
int av_color_transfer_from_name(const char *name)
int av_color_range_from_name(const char *name)
AVColorRange
MPEG vs JPEG YUV range.
AVColorPrimaries
Chromaticity coordinates of the source primaries.
int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
Utility function to access log2_chroma_w log2_chroma_h from the pixel format AVPixFmtDescriptor.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
const char * av_color_range_name(enum AVColorRange range)
const char * av_color_primaries_name(enum AVColorPrimaries primaries)
Libavutil version macros.
uint64_t flags
Combination of AV_PIX_FMT_FLAG_...
uint8_t nb_components
The number of components each pixel has, (1-4)
const AVPixFmtDescriptor * av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
Iterate over all pixel format descriptors known to libavutil.
const char * av_color_space_name(enum AVColorSpace space)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
char * av_get_pix_fmt_string(char *buf, int buf_size, enum AVPixelFormat pix_fmt)
Print in buf the string corresponding to the pixel format with number pix_fmt, or a header if pix_fmt...
attribute_deprecated int step_minus1
deprecated, use step instead
enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
const char * av_chroma_location_name(enum AVChromaLocation location)
int shift
Number of least significant bits that must be shifted away to get the value.
int offset
Number of elements before the component of the first pixel.
#define attribute_deprecated
int av_color_primaries_from_name(const char *name)
int av_color_space_from_name(const char *name)
attribute_deprecated int depth_minus1
deprecated, use depth instead
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
Return the number of bits per pixel for the pixel format described by pixdesc, including any padding ...
AVChromaLocation
Location of chroma samples.
int depth
Number of bits in the component.
AVPixelFormat
Pixel format.
enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
Compute what kind of losses will occur when converting from one specific pixel format to another...
enum AVPixelFormat av_get_pix_fmt(const char *name)
Return the pixel format corresponding to name.
int step
Number of elements between 2 horizontally consecutive pixels.