annotate libmpdemux/extension.c @ 29613:7386b883fba6

Add support for lavf vqf demuxer and lavc TwinVQ decoder. Also make lavf the default demuxer for vqf. Ok'ed by Compn on IRC.
author vitor
date Mon, 07 Sep 2009 17:20:44 +0000
parents d643e4643313
children 1957c654b56d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29238
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
1 /*
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
2 * This file is part of MPlayer.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
3 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
5 * it under the terms of the GNU General Public License as published by
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
7 * (at your option) any later version.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
8 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
12 * GNU General Public License for more details.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
13 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
14 * You should have received a copy of the GNU General Public License along
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 29141
diff changeset
17 */
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
18
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
19 #include <stdio.h>
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
20 #include <stdlib.h>
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
21 #include <string.h>
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
22
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
23 #include "config.h"
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
24
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 20103
diff changeset
25 #include "stream/stream.h"
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
26 #include "demuxer.h"
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
27
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
28 /*
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
29 * An autodetection based on the extension is not a good idea, but we don't care ;-)
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
30 */
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
31 static struct {
19110
08888397444e marks several strings inside structs as const when they hold just
reynaldo
parents: 18931
diff changeset
32 const char *extension;
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
33 int demuxer_type;
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
34 } extensions_table[] = {
9134
f033fdd54da3 - mpeg extensions removed, it causes misdetction of renamed avi/asf files
arpi
parents: 9079
diff changeset
35 // { "mpeg", DEMUXER_TYPE_MPEG_PS },
f033fdd54da3 - mpeg extensions removed, it causes misdetction of renamed avi/asf files
arpi
parents: 9079
diff changeset
36 // { "mpg", DEMUXER_TYPE_MPEG_PS },
f033fdd54da3 - mpeg extensions removed, it causes misdetction of renamed avi/asf files
arpi
parents: 9079
diff changeset
37 // { "mpe", DEMUXER_TYPE_MPEG_PS },
9008
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
38 { "vob", DEMUXER_TYPE_MPEG_PS },
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
39 { "m2v", DEMUXER_TYPE_MPEG_PS },
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
40 { "avi", DEMUXER_TYPE_AVI },
29141
b0d5adf371fe libavformat is now the default for mov, update extension.c to match this.
reimar
parents: 27482
diff changeset
41 { "mp4", DEMUXER_TYPE_LAVF },
b0d5adf371fe libavformat is now the default for mov, update extension.c to match this.
reimar
parents: 27482
diff changeset
42 { "mov", DEMUXER_TYPE_LAVF },
b0d5adf371fe libavformat is now the default for mov, update extension.c to match this.
reimar
parents: 27482
diff changeset
43 { "qt", DEMUXER_TYPE_LAVF },
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
44 { "asx", DEMUXER_TYPE_ASF },
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
45 { "asf", DEMUXER_TYPE_ASF },
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
46 { "wmv", DEMUXER_TYPE_ASF },
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
47 { "wma", DEMUXER_TYPE_ASF },
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
48 { "viv", DEMUXER_TYPE_VIVO },
9008
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
49 { "vivo", DEMUXER_TYPE_VIVO },
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
50 { "rm", DEMUXER_TYPE_REAL },
9008
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
51 { "rmvb", DEMUXER_TYPE_REAL },
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
52 { "ra", DEMUXER_TYPE_REAL },
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
53 { "y4m", DEMUXER_TYPE_Y4M },
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
54 { "mp3", DEMUXER_TYPE_AUDIO },
9008
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
55 { "wav", DEMUXER_TYPE_AUDIO },
11004
d48eccbbb984 FLAC decoding support via imported libmpflac.
lumag
parents: 9134
diff changeset
56 { "flac", DEMUXER_TYPE_AUDIO },
d48eccbbb984 FLAC decoding support via imported libmpflac.
lumag
parents: 9134
diff changeset
57 { "fla", DEMUXER_TYPE_AUDIO },
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
58 { "ogg", DEMUXER_TYPE_OGG },
9008
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
59 { "ogm", DEMUXER_TYPE_OGG },
9134
f033fdd54da3 - mpeg extensions removed, it causes misdetction of renamed avi/asf files
arpi
parents: 9079
diff changeset
60 // { "pls", DEMUXER_TYPE_PLAYLIST },
f033fdd54da3 - mpeg extensions removed, it causes misdetction of renamed avi/asf files
arpi
parents: 9079
diff changeset
61 // { "m3u", DEMUXER_TYPE_PLAYLIST },
9008
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
62 { "xm", DEMUXER_TYPE_XMMS },
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
63 { "mod", DEMUXER_TYPE_XMMS },
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
64 { "s3m", DEMUXER_TYPE_XMMS },
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
65 { "it", DEMUXER_TYPE_XMMS },
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
66 { "mid", DEMUXER_TYPE_XMMS },
654bc667a450 - added some more
arpi
parents: 9006
diff changeset
67 { "midi", DEMUXER_TYPE_XMMS },
29613
7386b883fba6 Add support for lavf vqf demuxer and lavc TwinVQ decoder.
vitor
parents: 29238
diff changeset
68 { "vqf", DEMUXER_TYPE_LAVF },
12477
1550ef7117c4 Add detection of nsa streamed by aol ultravox server
rtognimp
parents: 12175
diff changeset
69 { "nsv", DEMUXER_TYPE_NSV },
13072
aad5a7c76f34 nut is only handled by lavf, speed up detection
alex
parents: 12477
diff changeset
70 { "nsa", DEMUXER_TYPE_NSV },
17580
65530e552f6f add mpc extension so that playback starts faster.
reimar
parents: 16363
diff changeset
71 { "mpc", DEMUXER_TYPE_MPC },
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 27101
diff changeset
72 #ifdef CONFIG_WIN32DLL
14693
37116118ab6a avisynth demuxer patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 13072
diff changeset
73 { "avs", DEMUXER_TYPE_AVS },
37116118ab6a avisynth demuxer patch by Gianluigi Tiesi <mplayer at netfarm.it>
faust3
parents: 13072
diff changeset
74 #endif
16363
8ffb17ddad95 10l, typo in last commit
reimar
parents: 16362
diff changeset
75 { "302", DEMUXER_TYPE_LAVF },
15035
20dd98ab393f filename-based detection for h264 ES
lorenm
parents: 14751
diff changeset
76 { "264", DEMUXER_TYPE_H264_ES },
15061
b5a2f518791d demux ac3 by means of lavf by default
nicodvb
parents: 15035
diff changeset
77 { "26l", DEMUXER_TYPE_H264_ES },
20103
9c7de33d0e17 WavPack files contain a complete, valid RIFF tag, so use extension (.wv)
reimar
parents: 19924
diff changeset
78 { "ac3", DEMUXER_TYPE_LAVF },
24429
73bcf011f744 added monkey audio file extensions to extension table
ben
parents: 22972
diff changeset
79 { "ape", DEMUXER_TYPE_LAVF },
73bcf011f744 added monkey audio file extensions to extension table
ben
parents: 22972
diff changeset
80 { "apl", DEMUXER_TYPE_LAVF },
27482
88c54359eb69 support E-AC-3 decoding using ffmpeg
aurel
parents: 27341
diff changeset
81 { "eac3",DEMUXER_TYPE_LAVF },
24429
73bcf011f744 added monkey audio file extensions to extension table
ben
parents: 22972
diff changeset
82 { "mac", DEMUXER_TYPE_LAVF },
27101
2b2ee1d4a62a add ffmdec and ffadpcmxa
compn
parents: 24429
diff changeset
83 { "str", DEMUXER_TYPE_LAVF },
22920
320d9b360a3b Start to separate bad-autodetection hacks from other stuff in extension-based
reimar
parents: 22919
diff changeset
84
320d9b360a3b Start to separate bad-autodetection hacks from other stuff in extension-based
reimar
parents: 22919
diff changeset
85 // At least the following are hacks against broken autodetection
320d9b360a3b Start to separate bad-autodetection hacks from other stuff in extension-based
reimar
parents: 22919
diff changeset
86 // that should not be there
320d9b360a3b Start to separate bad-autodetection hacks from other stuff in extension-based
reimar
parents: 22919
diff changeset
87
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
88 };
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
89
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
90 int demuxer_type_by_filename(char* filename){
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
91 int i;
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
92 char* extension=strrchr(filename,'.');
9079
b1ea14b9694b cosmetic for 0.90, printf->mp_msg (hm..probably arpi will piss of me?:)
alex
parents: 9008
diff changeset
93 mp_msg(MSGT_OPEN, MSGL_V, "Searching demuxer type for filename %s ext: %s\n",filename,extension);
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
94 if(extension) {
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
95 ++extension;
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
96 // mp_msg(MSGT_CPLAYER,MSGL_DBG2,"Extension: %s\n", extension );
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
97 // Look for the extension in the extensions table
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
98 for( i=0 ; i<(sizeof(extensions_table)/sizeof(extensions_table[0])) ; i++ ) {
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
99 if( !strcasecmp(extension, extensions_table[i].extension) ) {
9079
b1ea14b9694b cosmetic for 0.90, printf->mp_msg (hm..probably arpi will piss of me?:)
alex
parents: 9008
diff changeset
100 mp_msg(MSGT_OPEN, MSGL_V, "Trying demuxer %d based on filename extension\n",extensions_table[i].demuxer_type);
9006
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
101 return extensions_table[i].demuxer_type;
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
102 }
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
103 }
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
104 }
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
105 return DEMUXER_TYPE_UNKNOWN;
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
106 }
d00997f12257 extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
arpi
parents:
diff changeset
107