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 #include "config.h"
21 #include "stdio.h"
23
25 {
26 static char unknown_format[20];
27 switch(format)
28 {
37 // case IMGFMT_RGB32: return "RGB 32-bit";
50 // case IMGFMT_BGR32: return "BGR 32-bit";
66 case IMGFMT_Y8A:
return "Planar Y8 with alpha";
140 }
141 snprintf(unknown_format,20,
"Unknown 0x%04x",format);
142 return unknown_format;
143 }
144
146 {
147 int xs = 0, ys = 0;
148 int bpp;
149 int err = 0;
151 if ((format & 0xff0000f0) == 0x34000050)
153 if ((format & 0xf00000ff) == 0x50000034) {
154 switch (format >> 24) {
155 case 0x50:
156 break;
157 case 0x51:
158 bits = 16;
159 break;
160 case 0x52:
161 bits = 10;
162 break;
163 case 0x53:
164 bits = 9;
165 break;
166 default:
167 err = 1;
168 break;
169 }
170 switch (format & 0x00ffffff) {
171 case 0x00343434: // 444
172 xs = 0;
173 ys = 0;
174 break;
175 case 0x00323234: // 422
176 xs = 1;
177 ys = 0;
178 break;
179 case 0x00303234: // 420
180 xs = 1;
181 ys = 1;
182 break;
183 case 0x00313134: // 411
184 xs = 2;
185 ys = 0;
186 break;
187 case 0x00303434: // 440
188 xs = 0;
189 ys = 1;
190 break;
191 default:
192 err = 1;
193 break;
194 }
195 } else switch (format) {
197 xs = 0;
198 ys = 0;
199 break;
201 xs = 1;
202 ys = 0;
203 break;
208 xs = 1;
209 ys = 1;
210 break;
213 xs = 2;
214 ys = 2;
215 break;
218 xs = 31;
219 ys = 31;
220 break;
221 default:
222 err = 1;
223 break;
224 }
225 if (x_shift) *x_shift = xs;
226 if (y_shift) *y_shift = ys;
227 if (component_bits) *component_bits =
bits;
228 bpp = 8 + ((16 >> xs) >> ys);
230 bpp += 8;
231 bpp *= (bits + 7) >> 3;
232 return err ? 0 : bpp;
233 }