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