img_format.h
Go to the documentation of this file.
1 /*
2  * This file is part of MPlayer.
3  *
4  * MPlayer is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * MPlayer 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
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with MPlayer; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18 
19 #ifndef MPLAYER_IMG_FORMAT_H
20 #define MPLAYER_IMG_FORMAT_H
21 
22 #include "config.h"
23 
24 /* RGB/BGR Formats */
25 
26 #define IMGFMT_RGB_MASK 0xFFFFFF00
27 #define IMGFMT_RGB (('R'<<24)|('G'<<16)|('B'<<8))
28 #define IMGFMT_RGB1 (IMGFMT_RGB|1)
29 #define IMGFMT_RGB4 (IMGFMT_RGB|4)
30 #define IMGFMT_RGB4_CHAR (IMGFMT_RGB|4|128) // RGB4 with 1 pixel per byte
31 #define IMGFMT_RGB8 (IMGFMT_RGB|8)
32 #define IMGFMT_RGB12 (IMGFMT_RGB|12)
33 #define IMGFMT_RGB15 (IMGFMT_RGB|15)
34 #define IMGFMT_RGB16 (IMGFMT_RGB|16)
35 #define IMGFMT_RGB24 (IMGFMT_RGB|24)
36 #define IMGFMT_RGB32 (IMGFMT_RGB|32)
37 #define IMGFMT_RGB48LE (IMGFMT_RGB|48)
38 #define IMGFMT_RGB48BE (IMGFMT_RGB|48|128)
39 #define IMGFMT_RGB64LE (IMGFMT_RGB|64)
40 #define IMGFMT_RGB64BE (IMGFMT_RGB|64|128)
41 
42 #define IMGFMT_BGR_MASK 0xFFFFFF00
43 #define IMGFMT_BGR (('B'<<24)|('G'<<16)|('R'<<8))
44 #define IMGFMT_BGR1 (IMGFMT_BGR|1)
45 #define IMGFMT_BGR4 (IMGFMT_BGR|4)
46 #define IMGFMT_BGR4_CHAR (IMGFMT_BGR|4|128) // BGR4 with 1 pixel per byte
47 #define IMGFMT_BGR8 (IMGFMT_BGR|8)
48 #define IMGFMT_BGR12 (IMGFMT_BGR|12)
49 #define IMGFMT_BGR15 (IMGFMT_BGR|15)
50 #define IMGFMT_BGR16 (IMGFMT_BGR|16)
51 #define IMGFMT_BGR24 (IMGFMT_BGR|24)
52 #define IMGFMT_BGR32 (IMGFMT_BGR|32)
53 
54 #define IMGFMT_GBR24P (('G'<<24)|('B'<<16)|('R'<<8)|24)
55 #define IMGFMT_GBR12PLE (('G'<<24)|('B'<<16)|('R'<<8)|36)
56 #define IMGFMT_GBR12PBE (('G'<<24)|('B'<<16)|('R'<<8)|36|128)
57 #define IMGFMT_GBR14PLE (('G'<<24)|('B'<<16)|('R'<<8)|42)
58 #define IMGFMT_GBR14PBE (('G'<<24)|('B'<<16)|('R'<<8)|42|128)
59 
60 #if HAVE_BIGENDIAN
61 #define IMGFMT_ABGR IMGFMT_RGB32
62 #define IMGFMT_BGRA (IMGFMT_RGB32|128)
63 #define IMGFMT_ARGB IMGFMT_BGR32
64 #define IMGFMT_RGBA (IMGFMT_BGR32|128)
65 #define IMGFMT_RGB64NE IMGFMT_RGB64BE
66 #define IMGFMT_RGB48NE IMGFMT_RGB48BE
67 #define IMGFMT_RGB12BE IMGFMT_RGB12
68 #define IMGFMT_RGB12LE (IMGFMT_RGB12|128)
69 #define IMGFMT_RGB15BE IMGFMT_RGB15
70 #define IMGFMT_RGB15LE (IMGFMT_RGB15|128)
71 #define IMGFMT_RGB16BE IMGFMT_RGB16
72 #define IMGFMT_RGB16LE (IMGFMT_RGB16|128)
73 #define IMGFMT_BGR12BE IMGFMT_BGR12
74 #define IMGFMT_BGR12LE (IMGFMT_BGR12|128)
75 #define IMGFMT_BGR15BE IMGFMT_BGR15
76 #define IMGFMT_BGR15LE (IMGFMT_BGR15|128)
77 #define IMGFMT_BGR16BE IMGFMT_BGR16
78 #define IMGFMT_BGR16LE (IMGFMT_BGR16|128)
79 #define IMGFMT_GBR12P IMGFMT_GBR12PBE
80 #define IMGFMT_GBR14P IMGFMT_GBR14PBE
81 #else
82 #define IMGFMT_ABGR (IMGFMT_BGR32|128)
83 #define IMGFMT_BGRA IMGFMT_BGR32
84 #define IMGFMT_ARGB (IMGFMT_RGB32|128)
85 #define IMGFMT_RGBA IMGFMT_RGB32
86 #define IMGFMT_RGB64NE IMGFMT_RGB64LE
87 #define IMGFMT_RGB48NE IMGFMT_RGB48LE
88 #define IMGFMT_RGB12BE (IMGFMT_RGB12|128)
89 #define IMGFMT_RGB12LE IMGFMT_RGB12
90 #define IMGFMT_RGB15BE (IMGFMT_RGB15|128)
91 #define IMGFMT_RGB15LE IMGFMT_RGB15
92 #define IMGFMT_RGB16BE (IMGFMT_RGB16|128)
93 #define IMGFMT_RGB16LE IMGFMT_RGB16
94 #define IMGFMT_BGR12BE (IMGFMT_BGR12|128)
95 #define IMGFMT_BGR12LE IMGFMT_BGR12
96 #define IMGFMT_BGR15BE (IMGFMT_BGR15|128)
97 #define IMGFMT_BGR15LE IMGFMT_BGR15
98 #define IMGFMT_BGR16BE (IMGFMT_BGR16|128)
99 #define IMGFMT_BGR16LE IMGFMT_BGR16
100 #define IMGFMT_GBR12P IMGFMT_GBR12PLE
101 #define IMGFMT_GBR14P IMGFMT_GBR14PLE
102 #endif
103 
104 /* old names for compatibility */
105 #define IMGFMT_RG4B IMGFMT_RGB4_CHAR
106 #define IMGFMT_BG4B IMGFMT_BGR4_CHAR
107 
108 #define IMGFMT_IS_RGB(fmt) (((fmt)&IMGFMT_RGB_MASK)==IMGFMT_RGB)
109 #define IMGFMT_IS_BGR(fmt) (((fmt)&IMGFMT_BGR_MASK)==IMGFMT_BGR)
110 
111 #define IMGFMT_RGB_DEPTH(fmt) ((fmt)&0x7F)
112 #define IMGFMT_BGR_DEPTH(fmt) ((fmt)&0x7F)
113 
114 
115 /* Planar YUV Formats */
116 
117 #define IMGFMT_YVU9 0x39555659
118 #define IMGFMT_IF09 0x39304649
119 #define IMGFMT_YV12 0x32315659
120 #define IMGFMT_I420 0x30323449
121 #define IMGFMT_IYUV 0x56555949
122 #define IMGFMT_CLPL 0x4C504C43
123 #define IMGFMT_Y800 0x30303859
124 #define IMGFMT_Y8 0x20203859
125 #define IMGFMT_NV12 0x3231564E
126 #define IMGFMT_NV21 0x3132564E
127 #define IMGFMT_Y16_LE 0x20363159
128 
129 /* unofficial Planar Formats, FIXME if official 4CC exists */
130 #define IMGFMT_444P 0x50343434
131 #define IMGFMT_422P 0x50323234
132 #define IMGFMT_411P 0x50313134
133 #define IMGFMT_440P 0x50303434
134 #define IMGFMT_HM12 0x32314D48
135 #define IMGFMT_Y16_BE 0x59313620
136 
137 // Gray with alpha
138 #define IMGFMT_Y8A 0x59320008
139 // 4:2:0 planar with alpha
140 #define IMGFMT_420A 0x41303234
141 // 4:2:2 planar with alpha
142 #define IMGFMT_422A 0x41323234
143 // 4:4:4 planar with alpha
144 #define IMGFMT_444A 0x41343434
145 
146 #define IMGFMT_444P16_LE 0x51343434
147 #define IMGFMT_444P16_BE 0x34343451
148 #define IMGFMT_444P14_LE 0x54343434
149 #define IMGFMT_444P14_BE 0x34343454
150 #define IMGFMT_444P12_LE 0x55343434
151 #define IMGFMT_444P12_BE 0x34343455
152 #define IMGFMT_444P10_LE 0x52343434
153 #define IMGFMT_444P10_BE 0x34343452
154 #define IMGFMT_444P9_LE 0x53343434
155 #define IMGFMT_444P9_BE 0x34343453
156 #define IMGFMT_422P16_LE 0x51323234
157 #define IMGFMT_422P16_BE 0x34323251
158 #define IMGFMT_422P14_LE 0x54323234
159 #define IMGFMT_422P14_BE 0x34323254
160 #define IMGFMT_422P12_LE 0x55323234
161 #define IMGFMT_422P12_BE 0x34323255
162 #define IMGFMT_422P10_LE 0x52323234
163 #define IMGFMT_422P10_BE 0x34323252
164 #define IMGFMT_422P9_LE 0x53323234
165 #define IMGFMT_422P9_BE 0x34323253
166 #define IMGFMT_420P16_LE 0x51303234
167 #define IMGFMT_420P16_BE 0x34323051
168 #define IMGFMT_420P14_LE 0x54303234
169 #define IMGFMT_420P14_BE 0x34323054
170 #define IMGFMT_420P12_LE 0x55303234
171 #define IMGFMT_420P12_BE 0x34323055
172 #define IMGFMT_420P10_LE 0x52303234
173 #define IMGFMT_420P10_BE 0x34323052
174 #define IMGFMT_420P9_LE 0x53303234
175 #define IMGFMT_420P9_BE 0x34323053
176 #if HAVE_BIGENDIAN
177 #define IMGFMT_444P16 IMGFMT_444P16_BE
178 #define IMGFMT_444P14 IMGFMT_444P14_BE
179 #define IMGFMT_444P12 IMGFMT_444P12_BE
180 #define IMGFMT_444P10 IMGFMT_444P10_BE
181 #define IMGFMT_444P9 IMGFMT_444P9_BE
182 #define IMGFMT_422P16 IMGFMT_422P16_BE
183 #define IMGFMT_422P14 IMGFMT_422P14_BE
184 #define IMGFMT_422P12 IMGFMT_422P12_BE
185 #define IMGFMT_422P10 IMGFMT_422P10_BE
186 #define IMGFMT_422P9 IMGFMT_422P9_BE
187 #define IMGFMT_420P16 IMGFMT_420P16_BE
188 #define IMGFMT_420P14 IMGFMT_420P14_BE
189 #define IMGFMT_420P12 IMGFMT_420P12_BE
190 #define IMGFMT_420P10 IMGFMT_420P10_BE
191 #define IMGFMT_420P9 IMGFMT_420P9_BE
192 #define IMGFMT_Y16 IMGFMT_Y16_BE
193 #define IMGFMT_IS_YUVP16_NE(fmt) IMGFMT_IS_YUVP16_BE(fmt)
194 #else
195 #define IMGFMT_444P16 IMGFMT_444P16_LE
196 #define IMGFMT_444P14 IMGFMT_444P14_LE
197 #define IMGFMT_444P12 IMGFMT_444P12_LE
198 #define IMGFMT_444P10 IMGFMT_444P10_LE
199 #define IMGFMT_444P9 IMGFMT_444P9_LE
200 #define IMGFMT_422P16 IMGFMT_422P16_LE
201 #define IMGFMT_422P14 IMGFMT_422P14_LE
202 #define IMGFMT_422P12 IMGFMT_422P12_LE
203 #define IMGFMT_422P10 IMGFMT_422P10_LE
204 #define IMGFMT_422P9 IMGFMT_422P9_LE
205 #define IMGFMT_420P16 IMGFMT_420P16_LE
206 #define IMGFMT_420P14 IMGFMT_420P14_LE
207 #define IMGFMT_420P12 IMGFMT_420P12_LE
208 #define IMGFMT_420P10 IMGFMT_420P10_LE
209 #define IMGFMT_420P9 IMGFMT_420P9_LE
210 #define IMGFMT_Y16 IMGFMT_Y16_LE
211 #define IMGFMT_IS_YUVP16_NE(fmt) IMGFMT_IS_YUVP16_LE(fmt)
212 #endif
213 
214 #define IMGFMT_IS_YUVP16_LE(fmt) (((fmt - 0x51000034) & 0xfc0000ff) == 0)
215 #define IMGFMT_IS_YUVP16_BE(fmt) (((fmt - 0x34000051) & 0xff0000fc) == 0)
216 #define IMGFMT_IS_YUVP16(fmt) (IMGFMT_IS_YUVP16_LE(fmt) || IMGFMT_IS_YUVP16_BE(fmt))
217 
218 /**
219  * \brief Find the corresponding full 16 bit format, i.e. IMGFMT_420P10_LE -> IMGFMT_420P16_LE
220  * \return normalized format ID or 0 if none exists.
221  */
222 static inline int normalize_yuvp16(int fmt) {
223  if (IMGFMT_IS_YUVP16_LE(fmt))
224  return (fmt & 0x00ffffff) | 0x51000000;
225  if (IMGFMT_IS_YUVP16_BE(fmt))
226  return (fmt & 0xffffff00) | 0x00000051;
227  return 0;
228 }
229 
230 /* Packed YUV Formats */
231 
232 #define IMGFMT_IUYV 0x56595549 // Interlaced UYVY
233 #define IMGFMT_IY41 0x31435949 // Interlaced Y41P
234 #define IMGFMT_IYU1 0x31555949
235 #define IMGFMT_IYU2 0x32555949
236 #define IMGFMT_UYVY 0x59565955
237 #define IMGFMT_UYNV 0x564E5955 // Exactly same as UYVY
238 #define IMGFMT_cyuv 0x76757963 // upside-down UYVY
239 #define IMGFMT_Y422 0x32323459 // Exactly same as UYVY
240 #define IMGFMT_YUY2 0x32595559
241 #define IMGFMT_YUNV 0x564E5559 // Exactly same as YUY2
242 #define IMGFMT_YVYU 0x55595659
243 #define IMGFMT_Y41P 0x50313459
244 #define IMGFMT_Y211 0x31313259
245 #define IMGFMT_Y41T 0x54313459 // Y41P, Y lsb = transparency
246 #define IMGFMT_Y42T 0x54323459 // UYVY, Y lsb = transparency
247 #define IMGFMT_V422 0x32323456 // upside-down UYVY?
248 #define IMGFMT_V655 0x35353656
249 #define IMGFMT_CLJR 0x524A4C43
250 #define IMGFMT_YUVP 0x50565559 // 10-bit YUYV
251 #define IMGFMT_UYVP 0x50565955 // 10-bit UYVY
252 
253 /* Compressed Formats */
254 #define IMGFMT_MPEGPES (('M'<<24)|('P'<<16)|('E'<<8)|('S'))
255 #define IMGFMT_MJPEG (('M')|('J'<<8)|('P'<<16)|('G'<<24))
256 /* Formats that are understood by zoran chips, we include
257  * non-interlaced, interlaced top-first, interlaced bottom-first */
258 #define IMGFMT_ZRMJPEGNI (('Z'<<24)|('R'<<16)|('N'<<8)|('I'))
259 #define IMGFMT_ZRMJPEGIT (('Z'<<24)|('R'<<16)|('I'<<8)|('T'))
260 #define IMGFMT_ZRMJPEGIB (('Z'<<24)|('R'<<16)|('I'<<8)|('B'))
261 
262 // I think that this code could not be used by any other codec/format
263 #define IMGFMT_XVMC 0x1DC70000
264 #define IMGFMT_XVMC_MASK 0xFFFF0000
265 #define IMGFMT_IS_XVMC(fmt) (((fmt)&IMGFMT_XVMC_MASK)==IMGFMT_XVMC)
266 //these are chroma420
267 #define IMGFMT_XVMC_MOCO_MPEG2 (IMGFMT_XVMC|0x02)
268 #define IMGFMT_XVMC_IDCT_MPEG2 (IMGFMT_XVMC|0x82)
269 
270 // VDPAU specific format.
271 #define IMGFMT_VDPAU 0x1DC80000
272 #define IMGFMT_VDPAU_MASK 0xFFFF0000
273 #define IMGFMT_IS_VDPAU(fmt) (((fmt)&IMGFMT_VDPAU_MASK)==IMGFMT_VDPAU)
274 #define IMGFMT_VDPAU_MPEG1 (IMGFMT_VDPAU|0x01)
275 #define IMGFMT_VDPAU_MPEG2 (IMGFMT_VDPAU|0x02)
276 #define IMGFMT_VDPAU_H264 (IMGFMT_VDPAU|0x03)
277 #define IMGFMT_VDPAU_WMV3 (IMGFMT_VDPAU|0x04)
278 #define IMGFMT_VDPAU_VC1 (IMGFMT_VDPAU|0x05)
279 #define IMGFMT_VDPAU_MPEG4 (IMGFMT_VDPAU|0x06)
280 
281 #define IMGFMT_IS_HWACCEL(fmt) (IMGFMT_IS_VDPAU(fmt) || IMGFMT_IS_XVMC(fmt))
282 
283 typedef struct {
284  void* data;
285  int size;
286  int id; // stream id. usually 0x1E0
287  int timestamp; // pts, 90000 Hz counter based
288 } vo_mpegpes_t;
289 
290 const char *ff_vo_format_name(int format);
291 
292 /**
293  * Calculates the scale shifts for the chroma planes for planar YUV
294  *
295  * \param component_bits bits per component
296  * \return bits-per-pixel for format if successful (i.e. format is 3 or 4-planes planar YUV), 0 otherwise
297  */
298 int ff_mp_get_chroma_shift(int format, int *x_shift, int *y_shift, int *component_bits);
299 
300 #endif /* MPLAYER_IMG_FORMAT_H */
const char * fmt
Definition: avisynth_c.h:669
void * data
Definition: img_format.h:284
const char * ff_vo_format_name(int format)
Definition: img_format.c:24
#define IMGFMT_IS_YUVP16_BE(fmt)
Definition: img_format.h:215
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate.The lists are not just lists
#define IMGFMT_IS_YUVP16_LE(fmt)
Definition: img_format.h:214
int ff_mp_get_chroma_shift(int format, int *x_shift, int *y_shift, int *component_bits)
Calculates the scale shifts for the chroma planes for planar YUV.
Definition: img_format.c:145
static int normalize_yuvp16(int fmt)
Find the corresponding full 16 bit format, i.e.
Definition: img_format.h:222