summaryrefslogtreecommitdiffstats
path: root/libmpdemux/extension.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-19 00:21:54 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-19 00:21:54 +0000
commit970435ce12de15022db3f920b293799462dd7518 (patch)
tree61d49faf24e71afdf7b097ba2431cbe7bb4974b8 /libmpdemux/extension.c
parent721a0b6362bd129bfccc9541030df14abe86405a (diff)
downloadmpv-970435ce12de15022db3f920b293799462dd7518.tar.bz2
mpv-970435ce12de15022db3f920b293799462dd7518.tar.xz
extension-based filetype detection for headerless files (mp3 vs mpeg, etc)
inspired by patch by Fabian Franz <FabianFranz@gmx.de> git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@9007 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/extension.c')
-rw-r--r--libmpdemux/extension.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/libmpdemux/extension.c b/libmpdemux/extension.c
new file mode 100644
index 0000000000..467df40f11
--- /dev/null
+++ b/libmpdemux/extension.c
@@ -0,0 +1,56 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "config.h"
+
+#include "stream.h"
+#include "demuxer.h"
+
+/*
+ * An autodetection based on the extension is not a good idea, but we don't care ;-)
+ */
+static struct {
+ char *extension;
+ int demuxer_type;
+} extensions_table[] = {
+ { "mpeg", DEMUXER_TYPE_MPEG_PS },
+ { "mpg", DEMUXER_TYPE_MPEG_PS },
+ { "mpe", DEMUXER_TYPE_MPEG_ES },
+ { "avi", DEMUXER_TYPE_AVI },
+ { "mov", DEMUXER_TYPE_MOV },
+ { "qt", DEMUXER_TYPE_MOV },
+ { "asx", DEMUXER_TYPE_ASF },
+ { "asf", DEMUXER_TYPE_ASF },
+ { "wmv", DEMUXER_TYPE_ASF },
+ { "wma", DEMUXER_TYPE_ASF },
+ { "viv", DEMUXER_TYPE_VIVO },
+ { "rm", DEMUXER_TYPE_REAL },
+ { "ra", DEMUXER_TYPE_REAL },
+ { "y4m", DEMUXER_TYPE_Y4M },
+ { "mp3", DEMUXER_TYPE_AUDIO },
+ { "ogg", DEMUXER_TYPE_OGG },
+ { "wav", DEMUXER_TYPE_AUDIO },
+ { "pls", DEMUXER_TYPE_PLAYLIST },
+ { "m3u", DEMUXER_TYPE_PLAYLIST }
+};
+
+int demuxer_type_by_filename(char* filename){
+ int i;
+ char* extension=strrchr(filename,'.');
+ printf("Searching demuxer type for filename %s ext: %s\n",filename,extension);
+ if(extension) {
+ ++extension;
+// mp_msg(MSGT_CPLAYER,MSGL_DBG2,"Extension: %s\n", extension );
+ // Look for the extension in the extensions table
+ for( i=0 ; i<(sizeof(extensions_table)/sizeof(extensions_table[0])) ; i++ ) {
+ if( !strcasecmp(extension, extensions_table[i].extension) ) {
+ printf("\n!!! trying demuxer %d based on filename extension\n",extensions_table[i].demuxer_type);
+ return extensions_table[i].demuxer_type;
+ }
+ }
+ }
+ return DEMUXER_TYPE_UNKNOWN;
+}
+