summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demuxer.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-12-22 21:01:01 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-12-22 21:01:01 +0000
commit61d797672169a892c7b0d45e687fb9a76925c0cd (patch)
tree11a80a8ff74984e59bd24b2bae0bdfa7713f827d /libmpdemux/demuxer.c
parent6da94a060f342b3c7f6e838846e922811c1fb683 (diff)
downloadmpv-61d797672169a892c7b0d45e687fb9a76925c0cd.tar.bz2
mpv-61d797672169a892c7b0d45e687fb9a76925c0cd.tar.xz
XMMS Input plugin support
based on patches by Balatoni Denes <pnis@coder.hu> changes by me: glib dependency removed, files merged, code simplified, some bugfixes git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8529 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demuxer.c')
-rw-r--r--libmpdemux/demuxer.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index 020571840c..0fc2780641 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -132,6 +132,7 @@ extern void demux_close_avi(demuxer_t *demuxer);
extern void demux_close_rawdv(demuxer_t* demuxer);
extern void demux_close_pva(demuxer_t* demuxer);
extern void demux_close_smjpeg(demuxer_t* demuxer);
+extern void demux_close_xmms(demuxer_t* demuxer);
#ifdef USE_TV
#include "tv.h"
@@ -194,6 +195,11 @@ void free_demuxer(demuxer_t *demuxer){
case DEMUXER_TYPE_AVI_NI:
case DEMUXER_TYPE_AVI_NINI:
demux_close_avi(demuxer); return;
+#ifdef HAVE_XMMS
+ case DEMUXER_TYPE_XMMS:
+ demux_close_xmms(demuxer); break;
+#endif
+
}
// free streams:
for(i=0;i<256;i++){
@@ -269,6 +275,7 @@ int demux_rawdv_fill_buffer(demuxer_t *demuxer);
int demux_y4m_fill_buffer(demuxer_t *demux);
int demux_audio_fill_buffer(demux_stream_t *ds);
int demux_pva_fill_buffer(demuxer_t *demux);
+int demux_xmms_fill_buffer(demuxer_t *demux,demux_stream_t *ds);
extern int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds);
extern int demux_ogg_fill_buffer(demuxer_t *d);
@@ -303,6 +310,9 @@ int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds){
#endif
case DEMUXER_TYPE_Y4M: return demux_y4m_fill_buffer(demux);
case DEMUXER_TYPE_AUDIO: return demux_audio_fill_buffer(ds);
+#ifdef HAVE_XMMS
+ case DEMUXER_TYPE_XMMS: return demux_xmms_fill_buffer(demux,ds);
+#endif
case DEMUXER_TYPE_DEMUXERS: return demux_demuxers_fill_buffer(demux,ds);
#ifdef HAVE_OGGVORBIS
case DEMUXER_TYPE_OGG: return demux_ogg_fill_buffer(demux);
@@ -533,6 +543,7 @@ extern int demux_rawaudio_open(demuxer_t* demuxer);
extern int smjpeg_check_file(demuxer_t *demuxer);
extern int demux_open_smjpeg(demuxer_t* demuxer);
extern int bmp_check_file(demuxer_t *demuxer);
+extern int demux_xmms_open(demuxer_t* demuxer);
extern demuxer_t* init_avi_with_ogg(demuxer_t* demuxer);
@@ -850,6 +861,19 @@ if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_AUDIO){
demuxer = NULL;
}
}
+#ifdef HAVE_XMMS
+//=============== Try to open as XMMS file: =================
+if(file_format==DEMUXER_TYPE_UNKNOWN){
+ demuxer=new_demuxer(stream,DEMUXER_TYPE_XMMS,audio_id,video_id,dvdsub_id);
+ if(demux_xmms_open(demuxer)){
+ mp_msg(MSGT_DEMUXER,MSGL_INFO,MSGTR_DetectedAudiofile);
+ file_format=DEMUXER_TYPE_XMMS;
+ } else {
+ free_demuxer(demuxer);
+ demuxer = NULL;
+ }
+}
+#endif
//=============== Try to open as a RTP stream: ===========
if(file_format==DEMUXER_TYPE_RTP) {
demuxer=new_demuxer(stream,DEMUXER_TYPE_RTP,audio_id,video_id,dvdsub_id);
@@ -1107,6 +1131,7 @@ extern void demux_audio_seek(demuxer_t *demuxer,float rel_seek_secs,int flags);
extern void demux_demuxers_seek(demuxer_t *demuxer,float rel_seek_secs,int flags);
extern void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags);
extern void demux_rawaudio_seek(demuxer_t *demuxer,float rel_seek_secs,int flags);
+extern void demux_xmms_seek(demuxer_t *demuxer,float rel_seek_secs,int flags);
int demux_seek(demuxer_t *demuxer,float rel_seek_secs,int flags){
demux_stream_t *d_audio=demuxer->audio;
@@ -1188,6 +1213,10 @@ switch(demuxer->file_format){
#endif
case DEMUXER_TYPE_RAWAUDIO:
demux_rawaudio_seek(demuxer,rel_seek_secs,flags); break;
+#ifdef HAVE_XMMS
+ case DEMUXER_TYPE_XMMS:
+ demux_xmms_seek(demuxer,rel_seek_secs,flags); break;
+#endif
} // switch(demuxer->file_format)
@@ -1248,6 +1277,7 @@ char* demux_info_get(demuxer_t *demuxer, char *opt) {
extern int demux_mpg_control(demuxer_t *demuxer, int cmd, void *arg);
extern int demux_asf_control(demuxer_t *demuxer, int cmd, void *arg);
extern int demux_avi_control(demuxer_t *demuxer, int cmd, void *arg);
+extern int demux_xmms_control(demuxer_t *demuxer, int cmd, void *arg);
int demux_control(demuxer_t *demuxer, int cmd, void *arg) {
switch(demuxer->type) {
@@ -1260,7 +1290,10 @@ int demux_control(demuxer_t *demuxer, int cmd, void *arg) {
case DEMUXER_TYPE_AVI_NI:
case DEMUXER_TYPE_AVI_NINI:
return demux_avi_control(demuxer,cmd,arg);
-
+#ifdef HAVE_XMMS
+ case DEMUXER_TYPE_XMMS:
+ return demux_xmms_control(demuxer,cmd,arg);
+#endif
default:
return DEMUXER_CTRL_NOTIMPL;
}