Mercurial > mplayer.hg
annotate codec-cfg.c @ 10579:f25d93203a71
From: Kir Kostuchenko <kir@users.sourceforge.net>
Hi, I found that command line options brightness, hue, contrast and
saturation does not works, becouse mplayer apply it, before open tv
(kernel says invalid ioctl). Here are simple fix. Please apply.
author | gabucino |
---|---|
date | Tue, 12 Aug 2003 11:32:51 +0000 |
parents | 880e5d24c4c3 |
children | 0e5e55232e9d |
rev | line source |
---|---|
319 | 1 /* |
2 * codec.conf parser | |
3 * by Szabolcs Berecz <szabi@inf.elte.hu> | |
4 * (C) 2001 | |
4676 | 5 * |
6 * to compile tester app: gcc -Iloader/ -DTESTING -o codec-cfg codec-cfg.c | |
7 * to compile CODECS2HTML: gcc -Iloader/ -DCODECS2HTML -o codecs2html codecs-cfg.c | |
8 * | |
9 * TODO: implement informat in CODECS2HTML too | |
319 | 10 */ |
303 | 11 |
319 | 12 #define DEBUG |
303 | 13 |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
14 //disable asserts |
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
15 #define NDEBUG |
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
16 |
297 | 17 #include <stdio.h> |
18 #include <stdlib.h> | |
19 #include <fcntl.h> | |
20 #include <unistd.h> | |
21 #include <errno.h> | |
22 #include <ctype.h> | |
23 #include <assert.h> | |
24 #include <string.h> | |
25 | |
5284
0a58c2ef1da1
added missing #include config.h, removed LIBVO2 ifdef.
arpi
parents:
5263
diff
changeset
|
26 #include "config.h" |
5937 | 27 #include "mp_msg.h" |
5284
0a58c2ef1da1
added missing #include config.h, removed LIBVO2 ifdef.
arpi
parents:
5263
diff
changeset
|
28 |
2052 | 29 // for mmioFOURCC: |
1305
0a8237e28ce0
Use FOURCC macro to encode fcc values. Avoids accessing 32-bit data from
jkeil
parents:
1297
diff
changeset
|
30 #include "wine/avifmt.h" |
0a8237e28ce0
Use FOURCC macro to encode fcc values. Avoids accessing 32-bit data from
jkeil
parents:
1297
diff
changeset
|
31 |
408 | 32 #include "libvo/img_format.h" |
297 | 33 #include "codec-cfg.h" |
34 | |
8467
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
35 #ifndef CODECS2HTML |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
36 #include "codecs.conf.h" |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
37 #endif |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
38 |
5937 | 39 #define PRINT_LINENUM mp_msg(MSGT_CODECCFG,MSGL_ERR," at line %d\n", line_num) |
328 | 40 |
319 | 41 #define MAX_NR_TOKEN 16 |
297 | 42 |
43 #define MAX_LINE_LEN 1000 | |
44 | |
45 #define RET_EOF -1 | |
46 #define RET_EOL -2 | |
47 | |
328 | 48 #define TYPE_VIDEO 0 |
49 #define TYPE_AUDIO 1 | |
297 | 50 |
303 | 51 static int add_to_fourcc(char *s, char *alias, unsigned int *fourcc, |
297 | 52 unsigned int *map) |
53 { | |
319 | 54 int i, j, freeslots; |
55 unsigned int tmp; | |
56 | |
57 /* find first unused slot */ | |
58 for (i = 0; i < CODECS_MAX_FOURCC && fourcc[i] != 0xffffffff; i++) | |
59 /* NOTHING */; | |
60 freeslots = CODECS_MAX_FOURCC - i; | |
61 if (!freeslots) | |
328 | 62 goto err_out_too_many; |
319 | 63 |
64 do { | |
1305
0a8237e28ce0
Use FOURCC macro to encode fcc values. Avoids accessing 32-bit data from
jkeil
parents:
1297
diff
changeset
|
65 tmp = mmioFOURCC(s[0], s[1], s[2], s[3]); |
319 | 66 for (j = 0; j < i; j++) |
67 if (tmp == fourcc[j]) | |
328 | 68 goto err_out_duplicated; |
319 | 69 fourcc[i] = tmp; |
2681 | 70 map[i] = alias ? mmioFOURCC(alias[0], alias[1], alias[2], alias[3]) : tmp; |
319 | 71 s += 4; |
72 i++; | |
73 } while ((*(s++) == ',') && --freeslots); | |
74 | |
75 if (!freeslots) | |
328 | 76 goto err_out_too_many; |
319 | 77 if (*(--s) != '\0') |
361 | 78 goto err_out_parse_error; |
319 | 79 return 1; |
328 | 80 err_out_duplicated: |
10520
880e5d24c4c3
FourCC is the preferred spelling according to iive and arpi.
diego
parents:
10501
diff
changeset
|
81 mp_msg(MSGT_CODECCFG,MSGL_ERR,"duplicated FourCC"); |
319 | 82 return 0; |
328 | 83 err_out_too_many: |
10520
880e5d24c4c3
FourCC is the preferred spelling according to iive and arpi.
diego
parents:
10501
diff
changeset
|
84 mp_msg(MSGT_CODECCFG,MSGL_ERR,"too many FourCCs/formats..."); |
361 | 85 return 0; |
86 err_out_parse_error: | |
5937 | 87 mp_msg(MSGT_CODECCFG,MSGL_ERR,"parse error"); |
319 | 88 return 0; |
89 } | |
90 | |
7770 | 91 static int add_to_format(char *s, char *alias,unsigned int *fourcc, unsigned int *fourccmap) |
319 | 92 { |
93 int i, j; | |
361 | 94 char *endptr; |
297 | 95 |
96 /* find first unused slot */ | |
97 for (i = 0; i < CODECS_MAX_FOURCC && fourcc[i] != 0xffffffff; i++) | |
98 /* NOTHING */; | |
99 if (i == CODECS_MAX_FOURCC) { | |
10520
880e5d24c4c3
FourCC is the preferred spelling according to iive and arpi.
diego
parents:
10501
diff
changeset
|
100 mp_msg(MSGT_CODECCFG,MSGL_ERR,"too many FourCCs/formats..."); |
297 | 101 return 0; |
102 } | |
103 | |
7770 | 104 fourcc[i]=strtoul(s,&endptr,0); |
361 | 105 if (*endptr != '\0') { |
10501 | 106 mp_msg(MSGT_CODECCFG,MSGL_ERR,"parse error (format ID not a number?)"); |
361 | 107 return 0; |
108 } | |
7770 | 109 |
110 if(alias){ | |
111 fourccmap[i]=strtoul(alias,&endptr,0); | |
112 if (*endptr != '\0') { | |
10501 | 113 mp_msg(MSGT_CODECCFG,MSGL_ERR,"parse error (format ID alias not a number?)"); |
7770 | 114 return 0; |
115 } | |
116 } else | |
117 fourccmap[i]=fourcc[i]; | |
118 | |
319 | 119 for (j = 0; j < i; j++) |
120 if (fourcc[j] == fourcc[i]) { | |
7770 | 121 mp_msg(MSGT_CODECCFG,MSGL_ERR,"duplicated format ID"); |
319 | 122 return 0; |
123 } | |
300 | 124 |
297 | 125 return 1; |
126 } | |
127 | |
408 | 128 static struct { |
129 const char *name; | |
130 const unsigned int num; | |
131 } fmt_table[] = { | |
415 | 132 {"YV12", IMGFMT_YV12}, |
133 {"I420", IMGFMT_I420}, | |
134 {"IYUV", IMGFMT_IYUV}, | |
6489
37fb529873d7
yvu9 support, 0l to me becouse i forget to commit it (0l becouse i've drinken 1litre of bier, yet ;)
alex
parents:
6343
diff
changeset
|
135 {"YVU9", IMGFMT_YVU9}, |
6526 | 136 {"IF09", IMGFMT_IF09}, |
6863 | 137 {"444P", IMGFMT_444P}, |
138 {"422P", IMGFMT_422P}, | |
139 {"411P", IMGFMT_411P}, | |
408 | 140 |
415 | 141 {"YUY2", IMGFMT_YUY2}, |
142 {"UYVY", IMGFMT_UYVY}, | |
143 {"YVYU", IMGFMT_YVYU}, | |
408 | 144 |
7770 | 145 {"RGB4", IMGFMT_RGB|4}, |
415 | 146 {"RGB8", IMGFMT_RGB|8}, |
147 {"RGB15", IMGFMT_RGB|15}, | |
148 {"RGB16", IMGFMT_RGB|16}, | |
149 {"RGB24", IMGFMT_RGB|24}, | |
150 {"RGB32", IMGFMT_RGB|32}, | |
7770 | 151 {"BGR4", IMGFMT_BGR|4}, |
415 | 152 {"BGR8", IMGFMT_BGR|8}, |
153 {"BGR15", IMGFMT_BGR|15}, | |
154 {"BGR16", IMGFMT_BGR|16}, | |
155 {"BGR24", IMGFMT_BGR|24}, | |
156 {"BGR32", IMGFMT_BGR|32}, | |
7770 | 157 {"RGB1", IMGFMT_RGB|1}, |
158 {"BGR1", IMGFMT_BGR|1}, | |
1871 | 159 |
160 {"MPES", IMGFMT_MPEGPES}, | |
10316 | 161 |
162 {"IDCT_MPEG2",IMGFMT_XVMC_IDCT_MPEG2}, | |
163 {"MOCO_MPEG2",IMGFMT_XVMC_MOCO_MPEG2}, | |
164 | |
415 | 165 {NULL, 0} |
297 | 166 }; |
408 | 167 |
607 | 168 |
4675 | 169 static int add_to_inout(char *sfmt, char *sflags, unsigned int *outfmt, |
607 | 170 unsigned char *outflags) |
171 { | |
172 | |
299 | 173 static char *flagstr[] = { |
174 "flip", | |
175 "noflip", | |
176 "yuvhack", | |
5249 | 177 "query", |
6103 | 178 "static", |
299 | 179 NULL |
180 }; | |
181 | |
319 | 182 int i, j, freeslots; |
297 | 183 unsigned char flags; |
184 | |
185 for (i = 0; i < CODECS_MAX_OUTFMT && outfmt[i] != 0xffffffff; i++) | |
186 /* NOTHING */; | |
319 | 187 freeslots = CODECS_MAX_OUTFMT - i; |
188 if (!freeslots) | |
328 | 189 goto err_out_too_many; |
297 | 190 |
319 | 191 flags = 0; |
361 | 192 if(sflags) { |
193 do { | |
194 for (j = 0; flagstr[j] != NULL; j++) | |
195 if (!strncmp(sflags, flagstr[j], | |
196 strlen(flagstr[j]))) | |
197 break; | |
198 if (flagstr[j] == NULL) | |
199 goto err_out_parse_error; | |
200 flags|=(1<<j); | |
201 sflags+=strlen(flagstr[j]); | |
202 } while (*(sflags++) == ','); | |
203 | |
204 if (*(--sflags) != '\0') | |
205 goto err_out_parse_error; | |
206 } | |
297 | 207 |
208 do { | |
408 | 209 for (j = 0; fmt_table[j].name != NULL; j++) |
210 if (!strncmp(sfmt, fmt_table[j].name, strlen(fmt_table[j].name))) | |
297 | 211 break; |
408 | 212 if (fmt_table[j].name == NULL) |
361 | 213 goto err_out_parse_error; |
408 | 214 outfmt[i] = fmt_table[j].num; |
297 | 215 outflags[i] = flags; |
299 | 216 ++i; |
408 | 217 sfmt+=strlen(fmt_table[j].name); |
319 | 218 } while ((*(sfmt++) == ',') && --freeslots); |
219 | |
220 if (!freeslots) | |
328 | 221 goto err_out_too_many; |
319 | 222 |
361 | 223 if (*(--sfmt) != '\0') |
224 goto err_out_parse_error; | |
299 | 225 |
297 | 226 return 1; |
328 | 227 err_out_too_many: |
5937 | 228 mp_msg(MSGT_CODECCFG,MSGL_ERR,"too many out..."); |
361 | 229 return 0; |
230 err_out_parse_error: | |
5937 | 231 mp_msg(MSGT_CODECCFG,MSGL_ERR,"parse error"); |
319 | 232 return 0; |
297 | 233 } |
234 | |
7180
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
6927
diff
changeset
|
235 #if 0 |
303 | 236 static short get_driver(char *s,int audioflag) |
297 | 237 { |
301 | 238 static char *audiodrv[] = { |
1293 | 239 "null", |
301 | 240 "mp3lib", |
241 "pcm", | |
242 "libac3", | |
243 "acm", | |
244 "alaw", | |
245 "msgsm", | |
246 "dshow", | |
401 | 247 "dvdpcm", |
1528
a444bd456fcc
ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents:
1488
diff
changeset
|
248 "hwac3", |
1828 | 249 "libvorbis", |
1929 | 250 "ffmpeg", |
2415 | 251 "libmad", |
3787 | 252 "msadpcm", |
3400 | 253 "liba52", |
254 "g72x", | |
3787 | 255 "imaadpcm", |
4854
4a6dde59834c
fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents:
4676
diff
changeset
|
256 "dk4adpcm", |
4a6dde59834c
fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents:
4676
diff
changeset
|
257 "dk3adpcm", |
4450
3da8c5706371
added skeleton decoders for RoQ audio and video format decoders
melanson
parents:
4301
diff
changeset
|
258 "roqaudio", |
5190
59df6b778d78
Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents:
5029
diff
changeset
|
259 "faad", |
6343
d253cf4f43a9
realvideo support by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents:
6200
diff
changeset
|
260 "realaud", |
6927 | 261 "libdv", |
301 | 262 NULL |
263 }; | |
264 static char *videodrv[] = { | |
1293 | 265 "null", |
301 | 266 "libmpeg2", |
267 "vfw", | |
268 "odivx", | |
269 "dshow", | |
1248 | 270 "ffmpeg", |
1297 | 271 "vfwex", |
1349 | 272 "divx4", |
1488 | 273 "raw", |
5193
abea2deab4d6
MPlayer now has a Microsoft RLE decoder to call its own...only supports
melanson
parents:
5190
diff
changeset
|
274 "msrle", |
2379 | 275 "xanim", |
2827
b4d46817f050
ms video1 (cram) codecs by Mike Melanson <melanson@pcisys.net>
arpi
parents:
2681
diff
changeset
|
276 "msvidc", |
3172 | 277 "fli", |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
3408
diff
changeset
|
278 "cinepak", |
3687
7fb817c9060b
This commit adds initial support for Quicktime Animation (RLE) video. It
melanson
parents:
3667
diff
changeset
|
279 "qtrle", |
3804
53ed66a4f0bf
NuppelVideo decoder added, based on Panagiotis Issaris' patch
alex
parents:
3798
diff
changeset
|
280 "nuv", |
3969 | 281 "cyuv", |
4227 | 282 "qtsmc", |
4301
8f43b10f387f
added skeleton for Duck Truemotion v1 decoder (doesn't do anything yet)
melanson
parents:
4227
diff
changeset
|
283 "ducktm1", |
4450
3da8c5706371
added skeleton decoders for RoQ audio and video format decoders
melanson
parents:
4301
diff
changeset
|
284 "roqvideo", |
4615
b1fe5f58cd82
Added native codec support for QT RPZA data, courtesy of Roberto Togni
melanson
parents:
4450
diff
changeset
|
285 "qtrpza", |
4656 | 286 "mpng", |
5029 | 287 "ijpg", |
5263 | 288 "zlib", |
5478 | 289 "mpegpes", |
6343
d253cf4f43a9
realvideo support by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents:
6200
diff
changeset
|
290 "realvid", |
6701
522713337297
Support for Xvid using their new api. If divx4 compatiblity is disabeled
albeu
parents:
6565
diff
changeset
|
291 "xvid", |
6927 | 292 "libdv", |
301 | 293 NULL |
294 }; | |
295 char **drv=audioflag?audiodrv:videodrv; | |
296 int i; | |
6863 | 297 |
1293 | 298 for(i=0;drv[i];i++) if(!strcmp(s,drv[i])) return i; |
301 | 299 |
1293 | 300 return -1; |
297 | 301 } |
7180
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
6927
diff
changeset
|
302 #endif |
297 | 303 |
328 | 304 static int validate_codec(codecs_t *c, int type) |
319 | 305 { |
5937 | 306 unsigned int i; |
7770 | 307 char *tmp_name = c->name; |
328 | 308 |
3408 | 309 for (i = 0; i < strlen(tmp_name) && isalnum(tmp_name[i]); i++) |
328 | 310 /* NOTHING */; |
3408 | 311 |
312 if (i < strlen(tmp_name)) { | |
5937 | 313 mp_msg(MSGT_CODECCFG,MSGL_ERR,"\ncodec(%s) name is not valid!\n", c->name); |
328 | 314 return 0; |
315 } | |
3408 | 316 |
328 | 317 if (!c->info) |
3408 | 318 c->info = strdup(c->name); |
319 | |
320 #if 0 | |
328 | 321 if (c->fourcc[0] == 0xffffffff) { |
10520
880e5d24c4c3
FourCC is the preferred spelling according to iive and arpi.
diego
parents:
10501
diff
changeset
|
322 mp_msg(MSGT_CODECCFG,MSGL_ERR,"\ncodec(%s) does not have FourCC/format!\n", c->name); |
328 | 323 return 0; |
324 } | |
3408 | 325 |
326 /* XXX fix this: shitty with 'null' codec */ | |
328 | 327 if (!c->driver) { |
5937 | 328 mp_msg(MSGT_CODECCFG,MSGL_ERR,"\ncodec(%s) does not have a driver!\n", c->name); |
328 | 329 return 0; |
330 } | |
3408 | 331 #endif |
332 | |
333 #if 0 | |
328 | 334 #warning codec->driver == 4;... <- ezt nem kellene belehegeszteni... |
335 #warning HOL VANNAK DEFINIALVA???????????? | |
336 if (!c->dll && (c->driver == 4 || | |
337 (c->driver == 2 && type == TYPE_VIDEO))) { | |
5937 | 338 mp_msg(MSGT_CODECCFG,MSGL_ERR,"\ncodec(%s) needs a 'dll'!\n", c->name); |
328 | 339 return 0; |
340 } | |
341 #warning guid.f1 lehet 0? honnan lehet tudni, hogy nem adtak meg? | |
342 // if (!(codec->flags & CODECS_FLAG_AUDIO) && codec->driver == 4) | |
343 | |
344 if (type == TYPE_VIDEO) | |
345 if (c->outfmt[0] == 0xffffffff) { | |
5937 | 346 mp_msg(MSGT_CODECCFG,MSGL_ERR,"\ncodec(%s) needs an 'outfmt'!\n", c->name); |
328 | 347 return 0; |
348 } | |
329 | 349 #endif |
319 | 350 return 1; |
351 } | |
352 | |
353 static int add_comment(char *s, char **d) | |
354 { | |
355 int pos; | |
356 | |
357 if (!*d) | |
358 pos = 0; | |
359 else { | |
360 pos = strlen(*d); | |
361 (*d)[pos++] = '\n'; | |
362 } | |
363 if (!(*d = (char *) realloc(*d, pos + strlen(s) + 1))) { | |
10501 | 364 mp_msg(MSGT_CODECCFG,MSGL_FATAL,"Can't allocate memory for comment. "); |
319 | 365 return 0; |
366 } | |
367 strcpy(*d + pos, s); | |
368 return 1; | |
369 } | |
297 | 370 |
361 | 371 static short get_cpuflags(char *s) |
372 { | |
373 static char *flagstr[] = { | |
374 "mmx", | |
375 "sse", | |
376 "3dnow", | |
377 NULL | |
378 }; | |
379 int i; | |
380 short flags = 0; | |
381 | |
382 do { | |
383 for (i = 0; flagstr[i]; i++) | |
384 if (!strncmp(s, flagstr[i], strlen(flagstr[i]))) | |
385 break; | |
386 if (!flagstr[i]) | |
387 goto err_out_parse_error; | |
388 flags |= 1<<i; | |
389 s += strlen(flagstr[i]); | |
390 } while (*(s++) == ','); | |
391 | |
392 if (*(--s) != '\0') | |
393 goto err_out_parse_error; | |
394 | |
395 return flags; | |
396 err_out_parse_error: | |
397 return 0; | |
398 } | |
399 | |
328 | 400 static FILE *fp; |
401 static int line_num = 0; | |
402 static char *line; | |
403 static char *token[MAX_NR_TOKEN]; | |
6200
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
404 static int read_nextline = 1; |
328 | 405 |
406 static int get_token(int min, int max) | |
297 | 407 { |
328 | 408 static int line_pos; |
409 int i; | |
410 char c; | |
411 | |
412 if (max >= MAX_NR_TOKEN) { | |
5937 | 413 mp_msg(MSGT_CODECCFG,MSGL_ERR,"get_token(): max >= MAX_NR_TOKEN!"); |
328 | 414 goto out_eof; |
415 } | |
416 | |
417 memset(token, 0x00, sizeof(*token) * max); | |
418 | |
419 if (read_nextline) { | |
420 if (!fgets(line, MAX_LINE_LEN, fp)) | |
421 goto out_eof; | |
422 line_pos = 0; | |
423 ++line_num; | |
424 read_nextline = 0; | |
425 } | |
426 for (i = 0; i < max; i++) { | |
427 while (isspace(line[line_pos])) | |
428 ++line_pos; | |
429 if (line[line_pos] == '\0' || line[line_pos] == '#' || | |
430 line[line_pos] == ';') { | |
431 read_nextline = 1; | |
432 if (i >= min) | |
433 goto out_ok; | |
434 goto out_eol; | |
435 } | |
436 token[i] = line + line_pos; | |
437 c = line[line_pos]; | |
438 if (c == '"' || c == '\'') { | |
439 token[i]++; | |
440 while (line[++line_pos] != c && line[line_pos]) | |
441 /* NOTHING */; | |
442 } else { | |
443 for (/* NOTHING */; !isspace(line[line_pos]) && | |
444 line[line_pos]; line_pos++) | |
445 /* NOTHING */; | |
446 } | |
447 if (!line[line_pos]) { | |
448 read_nextline = 1; | |
449 if (i >= min - 1) | |
450 goto out_ok; | |
451 goto out_eol; | |
452 } | |
453 line[line_pos] = '\0'; | |
454 line_pos++; | |
455 } | |
456 out_ok: | |
457 return i; | |
458 out_eof: | |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
459 read_nextline = 1; |
328 | 460 return RET_EOF; |
461 out_eol: | |
462 return RET_EOL; | |
463 } | |
464 | |
465 static codecs_t *video_codecs=NULL; | |
466 static codecs_t *audio_codecs=NULL; | |
467 static int nr_vcodecs = 0; | |
468 static int nr_acodecs = 0; | |
469 | |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
470 int parse_codec_cfg(char *cfgfile) |
328 | 471 { |
472 codecs_t *codec = NULL; // current codec | |
473 codecs_t **codecsp = NULL;// points to audio_codecs or to video_codecs | |
335 | 474 char *endptr; // strtoul()... |
328 | 475 int *nr_codecsp; |
476 int codec_type; /* TYPE_VIDEO/TYPE_AUDIO */ | |
297 | 477 int tmp, i; |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
478 |
8205
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
479 // in case we call it a second time |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
480 if(video_codecs!=NULL)free(video_codecs); |
8205
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
481 video_codecs=NULL; |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
482 |
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
483 if(audio_codecs!=NULL)free(audio_codecs); |
8205
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
484 audio_codecs=NULL; |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
485 |
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
486 nr_vcodecs = 0; |
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
487 nr_acodecs = 0; |
297 | 488 |
8467
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
489 if(cfgfile==NULL) { |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
490 #ifdef CODECS2HTML |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
491 return 0; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
492 #else |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
493 video_codecs = builtin_video_codecs; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
494 audio_codecs = builtin_audio_codecs; |
8472 | 495 nr_vcodecs = sizeof(builtin_video_codecs)/sizeof(codecs_t); |
496 nr_acodecs = sizeof(builtin_audio_codecs)/sizeof(codecs_t); | |
8467
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
497 return 1; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
498 #endif |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
499 } |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
500 |
5937 | 501 mp_msg(MSGT_CODECCFG,MSGL_INFO,"Reading %s: ", cfgfile); |
297 | 502 |
301 | 503 if ((fp = fopen(cfgfile, "r")) == NULL) { |
10501 | 504 mp_msg(MSGT_CODECCFG,MSGL_ERR,"Can't open '%s': %s\n", cfgfile, strerror(errno)); |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
505 return 0; |
297 | 506 } |
507 | |
301 | 508 if ((line = (char *) malloc(MAX_LINE_LEN + 1)) == NULL) { |
10501 | 509 mp_msg(MSGT_CODECCFG,MSGL_FATAL,"Can't get memory for 'line': %s\n", strerror(errno)); |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
510 return 0; |
297 | 511 } |
6200
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
512 read_nextline = 1; |
297 | 513 |
328 | 514 /* |
6200
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
515 * this only catches release lines at the start of |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
516 * codecs.conf, before audiocodecs and videocodecs. |
328 | 517 */ |
518 while ((tmp = get_token(1, 1)) == RET_EOL) | |
519 /* NOTHING */; | |
361 | 520 if (tmp == RET_EOF) |
521 goto out; | |
6200
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
522 if (!strcmp(token[0], "release")) { |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
523 if (get_token(1, 2) < 0) |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
524 goto err_out_parse_error; |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
525 tmp = atoi(token[0]); |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
526 if (tmp < CODEC_CFG_MIN) |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
527 goto err_out_release_num; |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
528 while ((tmp = get_token(1, 1)) == RET_EOL) |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
529 /* NOTHING */; |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
530 if (tmp == RET_EOF) |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
531 goto out; |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
532 } else |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
533 goto err_out_release_num; |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
534 |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
535 /* |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
536 * check if the next block starts with 'audiocodec' or |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
537 * with 'videocodec' |
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
538 */ |
361 | 539 if (!strcmp(token[0], "audiocodec") || !strcmp(token[0], "videocodec")) |
328 | 540 goto loop_enter; |
361 | 541 goto err_out_parse_error; |
328 | 542 |
319 | 543 while ((tmp = get_token(1, 1)) != RET_EOF) { |
297 | 544 if (tmp == RET_EOL) |
545 continue; | |
328 | 546 if (!strcmp(token[0], "audiocodec") || |
547 !strcmp(token[0], "videocodec")) { | |
548 if (!validate_codec(codec, codec_type)) | |
549 goto err_out_not_valid; | |
550 loop_enter: | |
551 if (*token[0] == 'v') { | |
552 codec_type = TYPE_VIDEO; | |
553 nr_codecsp = &nr_vcodecs; | |
554 codecsp = &video_codecs; | |
555 } else if (*token[0] == 'a') { | |
556 codec_type = TYPE_AUDIO; | |
557 nr_codecsp = &nr_acodecs; | |
558 codecsp = &audio_codecs; | |
361 | 559 #ifdef DEBUG |
328 | 560 } else { |
5937 | 561 mp_msg(MSGT_CODECCFG,MSGL_ERR,"picsba\n"); |
328 | 562 goto err_out; |
361 | 563 #endif |
328 | 564 } |
565 if (!(*codecsp = (codecs_t *) realloc(*codecsp, | |
332 | 566 sizeof(codecs_t) * (*nr_codecsp + 2)))) { |
10501 | 567 mp_msg(MSGT_CODECCFG,MSGL_FATAL,"Can't realloc '*codecsp': %s\n", strerror(errno)); |
300 | 568 goto err_out; |
569 } | |
328 | 570 codec=*codecsp + *nr_codecsp; |
571 ++*nr_codecsp; | |
300 | 572 memset(codec,0,sizeof(codecs_t)); |
573 memset(codec->fourcc, 0xff, sizeof(codec->fourcc)); | |
574 memset(codec->outfmt, 0xff, sizeof(codec->outfmt)); | |
4675 | 575 memset(codec->infmt, 0xff, sizeof(codec->infmt)); |
300 | 576 |
319 | 577 if (get_token(1, 1) < 0) |
328 | 578 goto err_out_parse_error; |
579 for (i = 0; i < *nr_codecsp - 1; i++) { | |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
580 if(( (*codecsp)[i].name!=NULL) && |
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
581 (!strcmp(token[0], (*codecsp)[i].name)) ) { |
10501 | 582 mp_msg(MSGT_CODECCFG,MSGL_ERR,"Codec name '%s' isn't unique.", token[0]); |
361 | 583 goto err_out_print_linenum; |
319 | 584 } |
585 } | |
328 | 586 if (!(codec->name = strdup(token[0]))) { |
10501 | 587 mp_msg(MSGT_CODECCFG,MSGL_ERR,"Can't strdup -> 'name': %s\n", strerror(errno)); |
328 | 588 goto err_out; |
589 } | |
319 | 590 } else if (!strcmp(token[0], "info")) { |
328 | 591 if (codec->info || get_token(1, 1) < 0) |
592 goto err_out_parse_error; | |
593 if (!(codec->info = strdup(token[0]))) { | |
10501 | 594 mp_msg(MSGT_CODECCFG,MSGL_ERR,"Can't strdup -> 'info': %s\n", strerror(errno)); |
328 | 595 goto err_out; |
596 } | |
319 | 597 } else if (!strcmp(token[0], "comment")) { |
598 if (get_token(1, 1) < 0) | |
328 | 599 goto err_out_parse_error; |
361 | 600 add_comment(token[0], &codec->comment); |
319 | 601 } else if (!strcmp(token[0], "fourcc")) { |
602 if (get_token(1, 2) < 0) | |
328 | 603 goto err_out_parse_error; |
319 | 604 if (!add_to_fourcc(token[0], token[1], |
300 | 605 codec->fourcc, |
606 codec->fourccmap)) | |
361 | 607 goto err_out_print_linenum; |
319 | 608 } else if (!strcmp(token[0], "format")) { |
7770 | 609 if (get_token(1, 2) < 0) |
328 | 610 goto err_out_parse_error; |
7770 | 611 if (!add_to_format(token[0], token[1], |
612 codec->fourcc,codec->fourccmap)) | |
361 | 613 goto err_out_print_linenum; |
319 | 614 } else if (!strcmp(token[0], "driver")) { |
615 if (get_token(1, 1) < 0) | |
328 | 616 goto err_out_parse_error; |
7180
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
6927
diff
changeset
|
617 if (!(codec->drv = strdup(token[0]))) { |
10501 | 618 mp_msg(MSGT_CODECCFG,MSGL_ERR,"Can't strdup -> 'driver': %s\n", strerror(errno)); |
7180
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
6927
diff
changeset
|
619 goto err_out; |
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
6927
diff
changeset
|
620 } |
319 | 621 } else if (!strcmp(token[0], "dll")) { |
622 if (get_token(1, 1) < 0) | |
328 | 623 goto err_out_parse_error; |
624 if (!(codec->dll = strdup(token[0]))) { | |
10501 | 625 mp_msg(MSGT_CODECCFG,MSGL_ERR,"Can't strdup -> 'dll': %s\n", strerror(errno)); |
328 | 626 goto err_out; |
627 } | |
319 | 628 } else if (!strcmp(token[0], "guid")) { |
328 | 629 if (get_token(11, 11) < 0) |
630 goto err_out_parse_error; | |
335 | 631 codec->guid.f1=strtoul(token[0],&endptr,0); |
361 | 632 if ((*endptr != ',' || *(endptr + 1) != '\0') && |
633 *endptr != '\0') | |
335 | 634 goto err_out_parse_error; |
635 codec->guid.f2=strtoul(token[1],&endptr,0); | |
361 | 636 if ((*endptr != ',' || *(endptr + 1) != '\0') && |
637 *endptr != '\0') | |
335 | 638 goto err_out_parse_error; |
639 codec->guid.f3=strtoul(token[2],&endptr,0); | |
361 | 640 if ((*endptr != ',' || *(endptr + 1) != '\0') && |
641 *endptr != '\0') | |
335 | 642 goto err_out_parse_error; |
643 for (i = 0; i < 8; i++) { | |
644 codec->guid.f4[i]=strtoul(token[i + 3],&endptr,0); | |
361 | 645 if ((*endptr != ',' || *(endptr + 1) != '\0') && |
646 *endptr != '\0') | |
328 | 647 goto err_out_parse_error; |
297 | 648 } |
319 | 649 } else if (!strcmp(token[0], "out")) { |
650 if (get_token(1, 2) < 0) | |
328 | 651 goto err_out_parse_error; |
4675 | 652 if (!add_to_inout(token[0], token[1], codec->outfmt, |
300 | 653 codec->outflags)) |
361 | 654 goto err_out_print_linenum; |
4675 | 655 } else if (!strcmp(token[0], "in")) { |
656 if (get_token(1, 2) < 0) | |
657 goto err_out_parse_error; | |
658 if (!add_to_inout(token[0], token[1], codec->infmt, | |
659 codec->inflags)) | |
660 goto err_out_print_linenum; | |
319 | 661 } else if (!strcmp(token[0], "flags")) { |
662 if (get_token(1, 1) < 0) | |
328 | 663 goto err_out_parse_error; |
321 | 664 if (!strcmp(token[0], "seekable")) |
665 codec->flags |= CODECS_FLAG_SEEKABLE; | |
666 else | |
6565 | 667 if (!strcmp(token[0], "align16")) |
668 codec->flags |= CODECS_FLAG_ALIGN16; | |
669 else | |
328 | 670 goto err_out_parse_error; |
319 | 671 } else if (!strcmp(token[0], "status")) { |
672 if (get_token(1, 1) < 0) | |
328 | 673 goto err_out_parse_error; |
332 | 674 if (!strcasecmp(token[0], "working")) |
316 | 675 codec->status = CODECS_STATUS_WORKING; |
332 | 676 else if (!strcasecmp(token[0], "crashing")) |
316 | 677 codec->status = CODECS_STATUS_NOT_WORKING; |
332 | 678 else if (!strcasecmp(token[0], "untested")) |
316 | 679 codec->status = CODECS_STATUS_UNTESTED; |
332 | 680 else if (!strcasecmp(token[0], "buggy")) |
316 | 681 codec->status = CODECS_STATUS_PROBLEMS; |
682 else | |
328 | 683 goto err_out_parse_error; |
361 | 684 } else if (!strcmp(token[0], "cpuflags")) { |
685 if (get_token(1, 1) < 0) | |
686 goto err_out_parse_error; | |
687 if (!(codec->cpuflags = get_cpuflags(token[0]))) | |
688 goto err_out_parse_error; | |
297 | 689 } else |
328 | 690 goto err_out_parse_error; |
297 | 691 } |
328 | 692 if (!validate_codec(codec, codec_type)) |
693 goto err_out_not_valid; | |
5937 | 694 mp_msg(MSGT_CODECCFG,MSGL_INFO,"%d audio & %d video codecs\n", nr_acodecs, nr_vcodecs); |
895 | 695 if(video_codecs) video_codecs[nr_vcodecs].name = NULL; |
696 if(audio_codecs) audio_codecs[nr_acodecs].name = NULL; | |
297 | 697 out: |
698 free(line); | |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
699 line=NULL; |
297 | 700 fclose(fp); |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
701 return 1; |
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
702 |
328 | 703 err_out_parse_error: |
5937 | 704 mp_msg(MSGT_CODECCFG,MSGL_ERR,"parse error"); |
361 | 705 err_out_print_linenum: |
297 | 706 PRINT_LINENUM; |
707 err_out: | |
328 | 708 if (audio_codecs) |
709 free(audio_codecs); | |
710 if (video_codecs) | |
711 free(video_codecs); | |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
712 video_codecs=NULL; |
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
713 audio_codecs=NULL; |
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
714 |
328 | 715 free(line); |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
716 line=NULL; |
6200
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
717 line_num = 0; |
3798
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
718 fclose(fp); |
d1e3ad5bcd8f
fixed few segfaults, make parse_codec_cfg() return int
iive
parents:
3787
diff
changeset
|
719 return 0; |
328 | 720 err_out_not_valid: |
10501 | 721 mp_msg(MSGT_CODECCFG,MSGL_ERR,"Codec is not defined correctly."); |
361 | 722 goto err_out_print_linenum; |
6200
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
723 err_out_release_num: |
10501 | 724 mp_msg(MSGT_CODECCFG,MSGL_ERR,"This codecs.conf is too old and incompatible with this MPlayer release!"); |
6200
e604be87613d
codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6103
diff
changeset
|
725 goto err_out_print_linenum; |
297 | 726 } |
727 | |
332 | 728 codecs_t *find_audio_codec(unsigned int fourcc, unsigned int *fourccmap, |
729 codecs_t *start) | |
328 | 730 { |
332 | 731 return find_codec(fourcc, fourccmap, start, 1); |
328 | 732 } |
733 | |
332 | 734 codecs_t *find_video_codec(unsigned int fourcc, unsigned int *fourccmap, |
735 codecs_t *start) | |
328 | 736 { |
332 | 737 return find_codec(fourcc, fourccmap, start, 0); |
328 | 738 } |
739 | |
332 | 740 codecs_t* find_codec(unsigned int fourcc,unsigned int *fourccmap, |
741 codecs_t *start, int audioflag) | |
328 | 742 { |
743 int i, j; | |
744 codecs_t *c; | |
745 | |
628 | 746 #if 0 |
332 | 747 if (start) { |
748 for (/* NOTHING */; start->name; start++) { | |
749 for (j = 0; j < CODECS_MAX_FOURCC; j++) { | |
750 if (start->fourcc[j] == fourcc) { | |
751 if (fourccmap) | |
752 *fourccmap = start->fourccmap[j]; | |
753 return start; | |
754 } | |
755 } | |
756 } | |
628 | 757 } else |
758 #endif | |
759 { | |
332 | 760 if (audioflag) { |
761 i = nr_acodecs; | |
762 c = audio_codecs; | |
763 } else { | |
764 i = nr_vcodecs; | |
765 c = video_codecs; | |
766 } | |
895 | 767 if(!i) return NULL; |
332 | 768 for (/* NOTHING */; i--; c++) { |
628 | 769 if(start && c<=start) continue; |
332 | 770 for (j = 0; j < CODECS_MAX_FOURCC; j++) { |
7180
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
6927
diff
changeset
|
771 // FIXME: do NOT hardwire 'null' name here: |
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
6927
diff
changeset
|
772 if (c->fourcc[j]==fourcc || !strcmp(c->drv,"null")) { |
332 | 773 if (fourccmap) |
774 *fourccmap = c->fourccmap[j]; | |
775 return c; | |
776 } | |
328 | 777 } |
778 } | |
779 } | |
780 return NULL; | |
303 | 781 } |
782 | |
7505 | 783 void select_codec(char* codecname,int audioflag){ |
784 int i; | |
785 codecs_t *c; | |
786 // printf("select_codec('%s')\n",codecname); | |
787 if (audioflag) { | |
788 i = nr_acodecs; | |
789 c = audio_codecs; | |
790 } else { | |
791 i = nr_vcodecs; | |
792 c = video_codecs; | |
793 } | |
794 if(i) | |
795 for (/* NOTHING */; i--; c++) | |
796 if(!strcmp(c->name,codecname)) | |
797 c->flags|=CODECS_FLAG_SELECTED; | |
798 } | |
799 | |
5325
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
800 void codecs_reset_selection(int audioflag){ |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
801 int i; |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
802 codecs_t *c; |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
803 if (audioflag) { |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
804 i = nr_acodecs; |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
805 c = audio_codecs; |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
806 } else { |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
807 i = nr_vcodecs; |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
808 c = video_codecs; |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
809 } |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
810 if(i) |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
811 for (/* NOTHING */; i--; c++) |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
812 c->flags&=(~CODECS_FLAG_SELECTED); |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
813 } |
9c326f199060
tagging selected codec to avoid trying the same codec several times
arpi
parents:
5284
diff
changeset
|
814 |
1983 | 815 void list_codecs(int audioflag){ |
2050 | 816 int i; |
1983 | 817 codecs_t *c; |
818 | |
819 if (audioflag) { | |
820 i = nr_acodecs; | |
821 c = audio_codecs; | |
7193 | 822 mp_msg(MSGT_CODECCFG,MSGL_INFO,"ac: afm: status: info: [lib/dll]\n"); |
1983 | 823 } else { |
824 i = nr_vcodecs; | |
825 c = video_codecs; | |
7193 | 826 mp_msg(MSGT_CODECCFG,MSGL_INFO,"vc: vfm: status: info: [lib/dll]\n"); |
1983 | 827 } |
2050 | 828 if(!i) return; |
1983 | 829 for (/* NOTHING */; i--; c++) { |
1984 | 830 char* s="unknown "; |
831 switch(c->status){ | |
832 case CODECS_STATUS_WORKING: s="working ";break; | |
833 case CODECS_STATUS_PROBLEMS: s="problems";break; | |
834 case CODECS_STATUS_NOT_WORKING: s="crashing";break; | |
835 case CODECS_STATUS_UNTESTED: s="untested";break; | |
836 } | |
1983 | 837 if(c->dll) |
7193 | 838 mp_msg(MSGT_CODECCFG,MSGL_INFO,"%-11s %-9s %s %s [%s]\n",c->name,c->drv,s,c->info,c->dll); |
1983 | 839 else |
7193 | 840 mp_msg(MSGT_CODECCFG,MSGL_INFO,"%-11s %-9s %s %s\n",c->name,c->drv,s,c->info); |
1983 | 841 |
842 } | |
843 | |
844 } | |
845 | |
846 | |
847 | |
607 | 848 #ifdef CODECS2HTML |
8205
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
849 /* |
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
850 * Fake out GUI references when building the codecs2html utility. |
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
851 */ |
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
852 #ifdef HAVE_NEW_GUI |
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
853 void gtkMessageBox( int type,char * str ) { return; } |
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
854 int use_gui = 0; |
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
855 #endif |
607 | 856 |
857 void wrapline(FILE *f2,char *s){ | |
858 int c; | |
859 if(!s){ | |
860 fprintf(f2,"-"); | |
861 return; | |
862 } | |
863 while((c=*s++)){ | |
864 if(c==',') fprintf(f2,"<br>"); else fputc(c,f2); | |
865 } | |
866 } | |
867 | |
868 void parsehtml(FILE *f1,FILE *f2,codecs_t *codec,int section,int dshow){ | |
869 int c,d; | |
870 while((c=fgetc(f1))>=0){ | |
871 if(c!='%'){ | |
872 fputc(c,f2); | |
873 continue; | |
874 } | |
875 d=fgetc(f1); | |
876 | |
877 switch(d){ | |
878 case '.': | |
613 | 879 return; // end of section |
607 | 880 case 'n': |
881 wrapline(f2,codec->name); break; | |
882 case 'i': | |
883 wrapline(f2,codec->info); break; | |
884 case 'c': | |
885 wrapline(f2,codec->comment); break; | |
886 case 'd': | |
887 wrapline(f2,codec->dll); break; | |
888 case 'D': | |
8205
5c675b344bfb
This patch goes into the #ifdef CODECS2HTML section of
arpi
parents:
7770
diff
changeset
|
889 fprintf(f2,"%c",!strcmp(codec->drv,"dshow")?'+':'-'); break; |
607 | 890 case 'F': |
891 for(d=0;d<CODECS_MAX_FOURCC;d++) | |
1944
4d8123ae7b4b
Fixed vfwex section, null codec and other fourcc issues and improved codecs-in.html usability.
atmos4
parents:
1929
diff
changeset
|
892 if(!d || codec->fourcc[d]!=0xFFFFFFFF) |
4d8123ae7b4b
Fixed vfwex section, null codec and other fourcc issues and improved codecs-in.html usability.
atmos4
parents:
1929
diff
changeset
|
893 fprintf(f2,"%s%.4s",d?"<br>":"",(codec->fourcc[d]==0xFFFFFFFF || codec->fourcc[d]<0x20202020)?!d?"-":"":(char*) &codec->fourcc[d]); |
607 | 894 break; |
895 case 'f': | |
896 for(d=0;d<CODECS_MAX_FOURCC;d++) | |
897 if(codec->fourcc[d]!=0xFFFFFFFF) | |
898 fprintf(f2,"%s0x%X",d?"<br>":"",codec->fourcc[d]); | |
899 break; | |
900 case 'Y': | |
901 for(d=0;d<CODECS_MAX_OUTFMT;d++) | |
902 if(codec->outfmt[d]!=0xFFFFFFFF){ | |
903 for (c=0; fmt_table[c].name; c++) | |
904 if(fmt_table[c].num==codec->outfmt[d]) break; | |
905 if(fmt_table[c].name) | |
906 fprintf(f2,"%s%s",d?"<br>":"",fmt_table[c].name); | |
907 } | |
908 break; | |
909 default: | |
910 fputc(c,f2); | |
911 fputc(d,f2); | |
912 } | |
913 } | |
914 | |
915 } | |
916 | |
917 void skiphtml(FILE *f1){ | |
918 int c,d; | |
919 while((c=fgetc(f1))>=0){ | |
920 if(c!='%'){ | |
921 continue; | |
922 } | |
923 d=fgetc(f1); | |
924 if(d=='.') return; // end of section | |
925 } | |
926 } | |
927 | |
8467
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
928 static void print_int_array(const int* a, int size) |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
929 { |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
930 printf("{ "); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
931 while (size--) |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
932 if(abs(*a)<256) |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
933 printf("%d%s", *a++, size?", ":""); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
934 else |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
935 printf("0x%X%s", *a++, size?", ":""); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
936 printf(" }"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
937 } |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
938 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
939 static void print_char_array(const unsigned char* a, int size) |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
940 { |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
941 printf("{ "); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
942 while (size--) |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
943 if((*a)<10) |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
944 printf("%d%s", *a++, size?", ":""); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
945 else |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
946 printf("0x%02x%s", *a++, size?", ":""); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
947 printf(" }"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
948 } |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
949 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
950 static void print_string(const char* s) |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
951 { |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
952 if (!s) printf("NULL"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
953 else printf("\"%s\"", s); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
954 } |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
955 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
956 int main(int argc, char* argv[]) |
607 | 957 { |
4027 | 958 codecs_t *cl; |
607 | 959 FILE *f1; |
960 FILE *f2; | |
961 int c,d,i; | |
962 int pos; | |
963 int section=-1; | |
964 int nr_codecs; | |
965 int win32=-1; | |
966 int dshow=-1; | |
1944
4d8123ae7b4b
Fixed vfwex section, null codec and other fourcc issues and improved codecs-in.html usability.
atmos4
parents:
1929
diff
changeset
|
967 int win32ex=-1; |
607 | 968 |
8467
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
969 /* |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
970 * Take path to codecs.conf from command line, or fall back on |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
971 * etc/codecs.conf |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
972 */ |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
973 if (!(nr_codecs = parse_codec_cfg((argc>1)?argv[1]:"etc/codecs.conf"))) |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
974 exit(1); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
975 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
976 if (argc > 1) { |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
977 int i, j; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
978 const char* nm[2]; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
979 codecs_t* cod[2]; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
980 int nr[2]; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
981 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
982 nm[0] = "builtin_video_codecs"; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
983 cod[0] = video_codecs; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
984 nr[0] = nr_vcodecs; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
985 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
986 nm[1] = "builtin_audio_codecs"; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
987 cod[1] = audio_codecs; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
988 nr[1] = nr_acodecs; |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
989 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
990 printf("/* GENERATED FROM %s, DO NOT EDIT! */\n\n",argv[1]); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
991 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
992 for (i=0; i<2; i++) { |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
993 printf("codecs_t %s[] = {\n", nm[i]); |
8472 | 994 for (j = 0; j < nr[i]; j++) { |
8467
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
995 printf("{"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
996 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
997 print_int_array(cod[i][j].fourcc, CODECS_MAX_FOURCC); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
998 printf(", /* fourcc */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
999 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1000 print_int_array(cod[i][j].fourccmap, CODECS_MAX_FOURCC); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1001 printf(", /* fourccmap */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1002 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1003 print_int_array(cod[i][j].outfmt, CODECS_MAX_OUTFMT); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1004 printf(", /* outfmt */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1005 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1006 print_char_array(cod[i][j].outflags, CODECS_MAX_OUTFMT); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1007 printf(", /* outflags */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1008 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1009 print_int_array(cod[i][j].infmt, CODECS_MAX_INFMT); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1010 printf(", /* infmt */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1011 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1012 print_char_array(cod[i][j].inflags, CODECS_MAX_INFMT); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1013 printf(", /* inflags */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1014 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1015 print_string(cod[i][j].name); printf(", /* name */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1016 print_string(cod[i][j].info); printf(", /* info */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1017 print_string(cod[i][j].comment); printf(", /* comment */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1018 print_string(cod[i][j].dll); printf(", /* dll */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1019 print_string(cod[i][j].drv); printf(", /* drv */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1020 |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1021 printf("{ 0x%08lx, %hu, %hu,", |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1022 cod[i][j].guid.f1, |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1023 cod[i][j].guid.f2, |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1024 cod[i][j].guid.f3); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1025 print_char_array(cod[i][j].guid.f4, sizeof(cod[i][j].guid.f4)); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1026 printf(" }, /* GUID */\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1027 printf("%hd /* flags */, %hd /* status */, %hd /* cpuflags */ }\n", |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1028 cod[i][j].flags, |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1029 cod[i][j].status, |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1030 cod[i][j].cpuflags); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1031 if (j < nr[i]) printf(",\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1032 } |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1033 printf("};\n\n"); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1034 } |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1035 exit(0); |
3ca9cc46df5c
Fallback to builtin (generated from etc/codecs.conf at compile time)
arpi
parents:
8211
diff
changeset
|
1036 } |
607 | 1037 |
10286 | 1038 f1=fopen("DOCS/en/codecs-in.html","rb"); if(!f1) exit(1); |
1039 f2=fopen("DOCS/en/codecs-status.html","wb"); if(!f2) exit(1); | |
607 | 1040 |
1041 while((c=fgetc(f1))>=0){ | |
1042 if(c!='%'){ | |
1043 fputc(c,f2); | |
1044 continue; | |
1045 } | |
1046 d=fgetc(f1); | |
1047 if(d>='0' && d<='9'){ | |
1048 // begin section | |
1049 section=d-'0'; | |
1050 printf("BEGIN %d\n",section); | |
1051 if(section>=5){ | |
1052 // audio | |
4027 | 1053 cl = audio_codecs; |
607 | 1054 nr_codecs = nr_acodecs; |
1055 dshow=7;win32=4; | |
1056 } else { | |
1057 // video | |
4027 | 1058 cl = video_codecs; |
607 | 1059 nr_codecs = nr_vcodecs; |
1944
4d8123ae7b4b
Fixed vfwex section, null codec and other fourcc issues and improved codecs-in.html usability.
atmos4
parents:
1929
diff
changeset
|
1060 dshow=4;win32=2;win32ex=6; |
607 | 1061 } |
1062 pos=ftell(f1); | |
1063 for(i=0;i<nr_codecs;i++){ | |
1064 fseek(f1,pos,SEEK_SET); | |
1065 switch(section){ | |
1066 case 0: | |
1067 case 5: | |
1068 if(cl[i].status==CODECS_STATUS_WORKING) | |
8211 | 1069 // if(!(!strcmp(cl[i].drv,"vfw") || !strcmp(cl[i].drv,"dshow") || !strcmp(cl[i].drv,"vfwex") || !strcmp(cl[i].drv,"acm"))) |
607 | 1070 parsehtml(f1,f2,&cl[i],section,dshow); |
1071 break; | |
8211 | 1072 #if 0 |
607 | 1073 case 1: |
1074 case 6: | |
1075 if(cl[i].status==CODECS_STATUS_WORKING) | |
8211 | 1076 if((!strcmp(cl[i].drv,"vfw") || !strcmp(cl[i].drv,"dshow") || !strcmp(cl[i].drv,"vfwex") || !strcmp(cl[i].drv,"acm"))) |
607 | 1077 parsehtml(f1,f2,&cl[i],section,dshow); |
1078 break; | |
8211 | 1079 #endif |
607 | 1080 case 2: |
1081 case 7: | |
1082 if(cl[i].status==CODECS_STATUS_PROBLEMS) | |
1083 parsehtml(f1,f2,&cl[i],section,dshow); | |
1084 break; | |
1085 case 3: | |
1086 case 8: | |
1087 if(cl[i].status==CODECS_STATUS_NOT_WORKING) | |
1088 parsehtml(f1,f2,&cl[i],section,dshow); | |
1089 break; | |
1090 case 4: | |
1091 case 9: | |
1092 if(cl[i].status==CODECS_STATUS_UNTESTED) | |
1093 parsehtml(f1,f2,&cl[i],section,dshow); | |
1094 break; | |
1095 default: | |
1096 printf("Warning! unimplemented section: %d\n",section); | |
1097 } | |
1098 } | |
1099 fseek(f1,pos,SEEK_SET); | |
1100 skiphtml(f1); | |
1101 //void parsehtml(FILE *f1,FILE *f2,codecs_t *codec,int section,int dshow){ | |
1102 | |
1103 continue; | |
1104 } | |
1105 fputc(c,f2); | |
1106 fputc(d,f2); | |
1107 } | |
1108 | |
1109 fclose(f2); | |
1110 fclose(f1); | |
1111 return 0; | |
1112 } | |
1113 | |
1114 #endif | |
1115 | |
297 | 1116 #ifdef TESTING |
1117 int main(void) | |
1118 { | |
4676 | 1119 codecs_t *c; |
328 | 1120 int i,j, nr_codecs, state; |
297 | 1121 |
4676 | 1122 if (!(parse_codec_cfg("etc/codecs.conf"))) |
319 | 1123 return 0; |
4676 | 1124 if (!video_codecs) |
328 | 1125 printf("no videoconfig.\n"); |
4676 | 1126 if (!audio_codecs) |
328 | 1127 printf("no audioconfig.\n"); |
1128 | |
1129 printf("videocodecs:\n"); | |
4676 | 1130 c = video_codecs; |
328 | 1131 nr_codecs = nr_vcodecs; |
1132 state = 0; | |
1133 next: | |
1134 if (c) { | |
4676 | 1135 printf("number of %scodecs: %d\n", state==0?"video":"audio", |
1136 nr_codecs); | |
328 | 1137 for(i=0;i<nr_codecs;i++, c++){ |
4676 | 1138 printf("\n============== %scodec %02d ===============\n", |
1139 state==0?"video":"audio",i); | |
328 | 1140 printf("name='%s'\n",c->name); |
1141 printf("info='%s'\n",c->info); | |
1142 printf("comment='%s'\n",c->comment); | |
1143 printf("dll='%s'\n",c->dll); | |
361 | 1144 printf("flags=%X driver=%d status=%d cpuflags=%d\n", |
1145 c->flags, c->driver, c->status, c->cpuflags); | |
300 | 1146 |
328 | 1147 for(j=0;j<CODECS_MAX_FOURCC;j++){ |
1148 if(c->fourcc[j]!=0xFFFFFFFF){ | |
361 | 1149 printf("fourcc %02d: %08X (%.4s) ===> %08X (%.4s)\n",j,c->fourcc[j],(char *) &c->fourcc[j],c->fourccmap[j],(char *) &c->fourccmap[j]); |
328 | 1150 } |
1151 } | |
1152 | |
1153 for(j=0;j<CODECS_MAX_OUTFMT;j++){ | |
1154 if(c->outfmt[j]!=0xFFFFFFFF){ | |
361 | 1155 printf("outfmt %02d: %08X (%.4s) flags: %d\n",j,c->outfmt[j],(char *) &c->outfmt[j],c->outflags[j]); |
328 | 1156 } |
1157 } | |
300 | 1158 |
4676 | 1159 for(j=0;j<CODECS_MAX_INFMT;j++){ |
1160 if(c->infmt[j]!=0xFFFFFFFF){ | |
1161 printf("infmt %02d: %08X (%.4s) flags: %d\n",j,c->infmt[j],(char *) &c->infmt[j],c->inflags[j]); | |
1162 } | |
1163 } | |
1164 | |
328 | 1165 printf("GUID: %08lX %04X %04X",c->guid.f1,c->guid.f2,c->guid.f3); |
1166 for(j=0;j<8;j++) printf(" %02X",c->guid.f4[j]); | |
1167 printf("\n"); | |
300 | 1168 |
328 | 1169 |
1170 } | |
1171 } | |
1172 if (!state) { | |
1173 printf("audiocodecs:\n"); | |
4676 | 1174 c = audio_codecs; |
328 | 1175 nr_codecs = nr_acodecs; |
1176 state = 1; | |
1177 goto next; | |
1178 } | |
297 | 1179 return 0; |
1180 } | |
1181 | |
1182 #endif |