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