FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavutil
pixdesc.h
Go to the documentation of this file.
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
#include "
pixfmt.h
"
27
28
typedef
struct
AVComponentDescriptor
{
29
uint16_t
plane
:2;
///< which of the 4 planes contains the component
30
31
/**
32
* Number of elements between 2 horizontally consecutive pixels minus 1.
33
* Elements are bits for bitstream formats, bytes otherwise.
34
*/
35
uint16_t
step_minus1
:3;
36
37
/**
38
* Number of elements before the component of the first pixel plus 1.
39
* Elements are bits for bitstream formats, bytes otherwise.
40
*/
41
uint16_t
offset_plus1
:3;
42
uint16_t
shift
:3;
///< number of least significant bits that must be shifted away to get the value
43
uint16_t
depth_minus1
:4;
///< number of bits in the component minus 1
44
}
AVComponentDescriptor
;
45
46
/**
47
* Descriptor that unambiguously describes how the bits of a pixel are
48
* stored in the up to 4 data planes of an image. It also stores the
49
* subsampling factors and number of components.
50
*
51
* @note This is separate of the colorspace (RGB, YCbCr, YPbPr, JPEG-style YUV
52
* and all the YUV variants) AVPixFmtDescriptor just stores how values
53
* are stored not what these values represent.
54
*/
55
typedef
struct
AVPixFmtDescriptor
{
56
const
char
*
name
;
57
uint8_t
nb_components
;
///< The number of components each pixel has, (1-4)
58
59
/**
60
* Amount to shift the luma width right to find the chroma width.
61
* For YV12 this is 1 for example.
62
* chroma_width = -((-luma_width) >> log2_chroma_w)
63
* The note above is needed to ensure rounding up.
64
* This value only refers to the chroma components.
65
*/
66
uint8_t
log2_chroma_w
;
///< chroma_width = -((-luma_width )>>log2_chroma_w)
67
68
/**
69
* Amount to shift the luma height right to find the chroma height.
70
* For YV12 this is 1 for example.
71
* chroma_height= -((-luma_height) >> log2_chroma_h)
72
* The note above is needed to ensure rounding up.
73
* This value only refers to the chroma components.
74
*/
75
uint8_t
log2_chroma_h
;
76
uint8_t
flags
;
77
78
/**
79
* Parameters that describe how pixels are packed.
80
* If the format has 2 or 4 components, then alpha is last.
81
* If the format has 1 or 2 components, then luma is 0.
82
* If the format has 3 or 4 components,
83
* if the RGB flag is set then 0 is red, 1 is green and 2 is blue;
84
* otherwise 0 is luma, 1 is chroma-U and 2 is chroma-V.
85
*/
86
AVComponentDescriptor
comp
[4];
87
}
AVPixFmtDescriptor
;
88
89
#define PIX_FMT_BE 1
///< Pixel format is big-endian.
90
#define PIX_FMT_PAL 2
///< Pixel format has a palette in data[1], values are indexes in this palette.
91
#define PIX_FMT_BITSTREAM 4
///< All values of a component are bit-wise packed end to end.
92
#define PIX_FMT_HWACCEL 8
///< Pixel format is an HW accelerated format.
93
#define PIX_FMT_PLANAR 16
///< At least one pixel component is not in the first data plane
94
#define PIX_FMT_RGB 32
///< The pixel format contains RGB-like data (as opposed to YUV/grayscale)
95
/**
96
* The pixel format is "pseudo-paletted". This means that FFmpeg treats it as
97
* paletted internally, but the palette is generated by the decoder and is not
98
* stored in the file.
99
*/
100
#define PIX_FMT_PSEUDOPAL 64
101
102
#define PIX_FMT_ALPHA 128
///< The pixel format has an alpha channel
103
104
105
#if FF_API_PIX_FMT_DESC
106
/**
107
* The array of all the pixel format descriptors.
108
*/
109
extern
const
AVPixFmtDescriptor
av_pix_fmt_descriptors
[];
110
#endif
111
112
/**
113
* Read a line from an image, and write the values of the
114
* pixel format component c to dst.
115
*
116
* @param data the array containing the pointers to the planes of the image
117
* @param linesize the array containing the linesizes of the image
118
* @param desc the pixel format descriptor for the image
119
* @param x the horizontal coordinate of the first pixel to read
120
* @param y the vertical coordinate of the first pixel to read
121
* @param w the width of the line to read, that is the number of
122
* values to write to dst
123
* @param read_pal_component if not zero and the format is a paletted
124
* format writes the values corresponding to the palette
125
* component c in data[1] to dst, rather than the palette indexes in
126
* data[0]. The behavior is undefined if the format is not paletted.
127
*/
128
void
av_read_image_line
(uint16_t *
dst
,
const
uint8_t
*
data
[4],
const
int
linesize[4],
129
const
AVPixFmtDescriptor
*desc,
int
x,
int
y,
int
c
,
int
w,
int
read_pal_component);
130
131
/**
132
* Write the values from src to the pixel format component c of an
133
* image line.
134
*
135
* @param src array containing the values to write
136
* @param data the array containing the pointers to the planes of the
137
* image to write into. It is supposed to be zeroed.
138
* @param linesize the array containing the linesizes of the image
139
* @param desc the pixel format descriptor for the image
140
* @param x the horizontal coordinate of the first pixel to write
141
* @param y the vertical coordinate of the first pixel to write
142
* @param w the width of the line to write, that is the number of
143
* values to write to the image line
144
*/
145
void
av_write_image_line
(
const
uint16_t *src,
uint8_t
*
data
[4],
const
int
linesize[4],
146
const
AVPixFmtDescriptor
*desc,
int
x,
int
y,
int
c
,
int
w);
147
148
/**
149
* Return the pixel format corresponding to name.
150
*
151
* If there is no pixel format with name name, then looks for a
152
* pixel format with the name corresponding to the native endian
153
* format of name.
154
* For example in a little-endian system, first looks for "gray16",
155
* then for "gray16le".
156
*
157
* Finally if no pixel format has been found, returns AV_PIX_FMT_NONE.
158
*/
159
enum
AVPixelFormat
av_get_pix_fmt
(
const
char
*
name
);
160
161
/**
162
* Return the short name for a pixel format, NULL in case pix_fmt is
163
* unknown.
164
*
165
* @see av_get_pix_fmt(), av_get_pix_fmt_string()
166
*/
167
const
char
*
av_get_pix_fmt_name
(
enum
AVPixelFormat
pix_fmt
);
168
169
/**
170
* Print in buf the string corresponding to the pixel format with
171
* number pix_fmt, or an header if pix_fmt is negative.
172
*
173
* @param buf the buffer where to write the string
174
* @param buf_size the size of buf
175
* @param pix_fmt the number of the pixel format to print the
176
* corresponding info string, or a negative value to print the
177
* corresponding header.
178
*/
179
char
*
av_get_pix_fmt_string
(
char
*buf,
int
buf_size,
enum
AVPixelFormat
pix_fmt
);
180
181
/**
182
* Return the number of bits per pixel used by the pixel format
183
* described by pixdesc.
184
*
185
* The returned number of bits refers to the number of bits actually
186
* used for storing the pixel information, that is padding bits are
187
* not counted.
188
*/
189
int
av_get_bits_per_pixel
(
const
AVPixFmtDescriptor
*pixdesc);
190
191
/**
192
* Return the number of bits per pixel for the pixel format
193
* described by pixdesc, including any padding or unused bits.
194
*/
195
int
av_get_padded_bits_per_pixel
(
const
AVPixFmtDescriptor
*pixdesc);
196
197
/**
198
* @return a pixel format descriptor for provided pixel format or NULL if
199
* this pixel format is unknown.
200
*/
201
const
AVPixFmtDescriptor
*
av_pix_fmt_desc_get
(
enum
AVPixelFormat
pix_fmt
);
202
203
/**
204
* Iterate over all pixel format descriptors known to libavutil.
205
*
206
* @param prev previous descriptor. NULL to get the first descriptor.
207
*
208
* @return next descriptor or NULL after the last descriptor
209
*/
210
const
AVPixFmtDescriptor
*
av_pix_fmt_desc_next
(
const
AVPixFmtDescriptor
*prev);
211
212
/**
213
* @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc
214
* is not a valid pointer to a pixel format descriptor.
215
*/
216
enum
AVPixelFormat
av_pix_fmt_desc_get_id
(
const
AVPixFmtDescriptor
*desc);
217
218
/**
219
* Utility function to access log2_chroma_w log2_chroma_h from
220
* the pixel format AVPixFmtDescriptor.
221
*
222
* See avcodec_get_chroma_sub_sample() for a function that asserts a
223
* valid pixel format instead of returning an error code.
224
* Its recommanded that you use avcodec_get_chroma_sub_sample unless
225
* you do check the return code!
226
*
227
* @param[in] pix_fmt the pixel format
228
* @param[out] h_shift store log2_chroma_h
229
* @param[out] v_shift store log2_chroma_w
230
*
231
* @return 0 on success, AVERROR(ENOSYS) on invalid or unknown pixel format
232
*/
233
int
av_pix_fmt_get_chroma_sub_sample
(
enum
AVPixelFormat
pix_fmt
,
234
int
*h_shift,
int
*v_shift);
235
236
237
#endif
/* AVUTIL_PIXDESC_H */
Generated on Sat May 25 2013 03:58:50 for FFmpeg by
1.8.2