[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[34] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2009-12-08 14:40:30
|
Revision: 34 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=34&view=rev Author: nickols_k Date: 2009-12-08 14:40:21 +0000 (Tue, 08 Dec 2009) Log Message: ----------- minor redesign stream drivers architecture and print list of available ones Modified Paths: -------------- mplayerxp/configure mplayerxp/libmpdemux/Makefile mplayerxp/libmpdemux/cache2.c mplayerxp/libmpdemux/cddb.c mplayerxp/libmpdemux/network.c mplayerxp/libmpdemux/s_cdd.c mplayerxp/libmpdemux/s_dvdnav.c mplayerxp/libmpdemux/s_dvdread.c mplayerxp/libmpdemux/s_file.c mplayerxp/libmpdemux/s_ftp.c mplayerxp/libmpdemux/s_network.c mplayerxp/libmpdemux/s_oss.c mplayerxp/libmpdemux/s_rtsp.c mplayerxp/libmpdemux/s_tv.c mplayerxp/libmpdemux/s_udp.c mplayerxp/libmpdemux/s_vcd.c mplayerxp/libmpdemux/s_vcdnav.c mplayerxp/libmpdemux/stream.c mplayerxp/libmpdemux/stream.h mplayerxp/mplayer.c Removed Paths: ------------- mplayerxp/libmpdemux/s_dvdplay.c Modified: mplayerxp/configure =================================================================== --- mplayerxp/configure 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/configure 2009-12-08 14:40:21 UTC (rev 34) @@ -80,7 +80,6 @@ --disable-libcss Disable libcss support [autodetect] --disable-libdvdread Disable libdvdread support [autodetect] --disable-libdvdnav Disable libdvdnav support [autodetect] - --disable-libdvdplay Disable libdvdplay support [autodetect] --disable-vcd Disable VCD support [autodetect] Video: --enable-dga build with DGA1 or DGA2 support [autodetect] @@ -362,7 +361,6 @@ libcss libdvdread libdvdnav - libdvdplay png sdl sdl_image @@ -383,7 +381,6 @@ enable $AUTOCONF_LIST _dvdnavdir=/usr -_dvdplaydir=/usr _language=en _linux_devfs=no _bad_options= @@ -441,8 +438,6 @@ --disable-libdvdread) libdvdread=no ;; --enable-libdvdnav) libdvdnav=yes ;; --disable-libdvdnav) libdvdnav=no ;; - --enable-libdvdplay) libdvdplay=yes ;; - --disable-libdvdplay) libdvdplay=no ;; --enable-xinerama) xinerama=yes ;; --disable-xinerama) xinerama=no ;; --enable-alsa) alsa=yes ;; @@ -955,11 +950,6 @@ print_config USE_ mp_config.h mp_config.mak dvdnav enabled libdvdnav && _inputmodules="dvdnav $_inputmodules" || _noinputmodules="dvdnav $_noinputmodules" -enabled libdvdplay && require2 libdvdplay dvdplay/dvdplay.h dvdplay_open -ldvdplay -dvdplay=$libdvdplay -print_config USE_ mp_config.h mp_config.mak dvdplay -enabled libdvdplay && _inputmodules="dvdplay $_inputmodules" || _noinputmodules="dvdplay $_noinputmodules" - enabled libvcd && require2 libvcd libvcd/info.h vcdinfo_open -lvcdinfo print_config USE_ mp_config.h mp_config.mak libvcd enabled libvcd && _inputmodules="libvcd $_inputmodules" || _noinputmodules="libvcd $_noinputmodules" @@ -968,10 +958,10 @@ print_config USE_ mp_config.h mp_config.mak fastmemcpy test linux -o bsdos -o freebsd -o sunos && enable vcd || disable vcd -print_config HAVE_ mp_config.h mp_config.mak tv +print_config HAVE_ mp_config.h mp_config.mak vcd enabled vcd && _inputmodules="vcd $_inputmodules" || _noinputmodules="vcd $_noinputmodules" -print_config USE_ mp_config.h mp_config.mak tv +enabled tv && print_config USE_ mp_config.h mp_config.mak tv enabled tv && _inputmodules="tv $_inputmodules" || _noinputmodules="tv $_noinputmodules" enabled tv_v4l && require2 tv_v4l "stdlib.h linux/videodev.h" video_devdata Modified: mplayerxp/libmpdemux/Makefile =================================================================== --- mplayerxp/libmpdemux/Makefile 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/Makefile 2009-12-08 14:40:21 UTC (rev 34) @@ -5,11 +5,27 @@ DO_MAKE = @ for i in $(SUBDIRS); do $(MAKE) -C $$i $@ || exit; done -SRCS = s_cdd.c s_dvdplay.c s_dvdnav.c s_dvdread.c s_file.c s_tv.c url.c +SRCS = s_file.c +ifeq ($(HAVE_CDDA),yes) +SRCS += s_cdd.c +endif +ifeq ($(USE_DVDNAV),yes) +SRCS += s_dvdnav.c +endif +ifeq ($(USE_DVDREAD),yes) +SRCS += s_dvdread.c +endif +SRCS += s_tv.c url.c ifeq ($(USE_OSS_AUDIO),yes) SRCS += s_oss.c endif -SRCS += s_vcd.c s_vcdnav.c cache2.c dvdauth.c stream.c tvi_dummy.c tvi_v4l.c +ifeq ($(USE_LIBVCD),yes) +SRCS += s_vcdnav.c +endif +ifeq ($(HAVE_VCD),yes) +SRCS += s_vcd.c +endif +SRCS += cache2.c dvdauth.c stream.c tvi_dummy.c tvi_v4l.c SRCS += tvi_bsdbt848.c frequencies.c cdda.c cddb.c mrl.c SRCS += demuxer_r.c mp3_hdr.c video.c mpeg_hdr.c aviprint.c demux_asf.c Modified: mplayerxp/libmpdemux/cache2.c =================================================================== --- mplayerxp/libmpdemux/cache2.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/cache2.c 2009-12-08 14:40:21 UTC (rev 34) @@ -116,7 +116,7 @@ ,new_start,in_cache,START_FILEPOS(c),readpos,END_FILEPOS(c)); if(c->stream->eof || c->eof) nc_stream_reset(c->stream); c->stream->driver->seek(c->stream,new_start); - if(c->stream->_Errno) { MSG_WARN("c2_seek(drv:%s) error: %s\n",c->stream->driver->name,strerror(c->stream->_Errno)); c->stream->_Errno=0; } + if(c->stream->_Errno) { MSG_WARN("c2_seek(drv:%s) error: %s\n",c->stream->driver->mrl,strerror(c->stream->_Errno)); c->stream->_Errno=0; } if((c->packets[c->first].filepos=c->stream->driver->tell(c->stream))<0) seek_eof=1; c->last=c->first; if(c->packets[c->first].filepos < new_start-(off_t)c->stream->sector_size) @@ -172,7 +172,7 @@ c->eof=1; c->packets[cidx].state&=~CPF_EMPTY; c->packets[cidx].state&=~CPF_DONE; - if(c->stream->_Errno) { MSG_WARN("c2_fill_buffer(drv:%s) error: %s\n",c->stream->driver->name,strerror(c->stream->_Errno)); c->stream->_Errno=0; } + if(c->stream->_Errno) { MSG_WARN("c2_fill_buffer(drv:%s) error: %s\n",c->stream->driver->mrl,strerror(c->stream->_Errno)); c->stream->_Errno=0; } CACHE2_PACKET_TUNLOCK(cidx); break; } Modified: mplayerxp/libmpdemux/cddb.c =================================================================== --- mplayerxp/libmpdemux/cddb.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/cddb.c 2009-12-08 14:40:21 UTC (rev 34) @@ -488,7 +488,7 @@ } user_name = getenv("LOGNAME"); } - sprintf( cddb_data->cddb_hello, "&hello=%s+%s+%s+%s", user_name, host_name, "MPlayer", VERSION ); + sprintf( cddb_data->cddb_hello, "&hello=%s+%s+%s+%s", user_name, host_name, "MPlayerXP", VERSION ); } int __FASTCALL__ cddb_retrieve(cddb_data_t *cddb_data) { Modified: mplayerxp/libmpdemux/network.c =================================================================== --- mplayerxp/libmpdemux/network.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/network.c 2009-12-08 14:40:21 UTC (rev 34) @@ -816,7 +816,7 @@ fd = stream->fd; if( fd<0 ) { - fd = udp_open_socket( (streaming_ctrl->url) ); + fd = udp_open_socket( (streaming_ctrl->url) ); if( fd<0 ) return -1; stream->fd = fd; } @@ -827,7 +827,7 @@ streaming_ctrl->streaming_read = rtp_streaming_read; streaming_ctrl->streaming_read = rtp_streaming_read; streaming_ctrl->streaming_seek = nop_streaming_seek; - streaming_ctrl->prebuffer_size = 64*1024; // KBytes + streaming_ctrl->prebuffer_size = 64*1024; // KBytes streaming_ctrl->buffering = 0; streaming_ctrl->status = streaming_playing_e; return 0; Modified: mplayerxp/libmpdemux/s_cdd.c =================================================================== --- mplayerxp/libmpdemux/s_cdd.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_cdd.c 2009-12-08 14:40:21 UTC (rev 34) @@ -11,27 +11,44 @@ #include "mrl.h" static int track_idx=-1; -static int __FASTCALL__ cdd_open(stream_t *stream,const char *filename,unsigned flags) +static int __FASTCALL__ _cdda_open(stream_t *stream,const char *filename,unsigned flags) { const char *param; char *device; int retval; + UNUSED(flags); stream->type=STREAMTYPE_RAWAUDIO|STREAMTYPE_SEEKABLE; stream->sector_size=CD_FRAMESIZE_RAW; - if(!(strncmp(filename,"cdda://",7)==0 || strncmp(filename,"cddb://",7)==0)) return 0; - if(strcmp(&filename[7],"help") == 0) + if(strcmp(filename,"help") == 0) { - MSG_HINT("Usage: cdda://<@device><#trackno> or cddb://<@device><#trackno>\n"); + MSG_HINT("Usage: cdda://<@device><#trackno>\n"); return 0; } - param=mrl_parse_line(&filename[7],NULL,NULL,&device,NULL); - retval = - strncmp(filename,"cdda://",7)==0?open_cdda(stream,device ? device : DEFAULT_CDROM_DEVICE,param): - open_cddb(stream,device ? device : DEFAULT_CDROM_DEVICE,param); + param=mrl_parse_line(filename,NULL,NULL,&device,NULL); + retval = open_cdda(stream,device ? device : DEFAULT_CDROM_DEVICE,param); if(device) free(device); return retval; } +static int __FASTCALL__ _cddb_open(stream_t *stream,const char *filename,unsigned flags) +{ + const char *param; + char *device; + int retval; + UNUSED(flags); + stream->type=STREAMTYPE_RAWAUDIO|STREAMTYPE_SEEKABLE; + stream->sector_size=CD_FRAMESIZE_RAW; + if(strcmp(filename,"help") == 0) + { + MSG_HINT("Usage: cddb://<@device><#trackno>\n"); + return 0; + } + param=mrl_parse_line(filename,NULL,NULL,&device,NULL); + retval = open_cddb(stream,device ? device : DEFAULT_CDROM_DEVICE,param); + if(device) free(device); + return retval; +} + static int __FASTCALL__ cdd_read(stream_t*stream,stream_packet_t*sp) { sp->type=0; @@ -88,133 +105,28 @@ } return SCTRL_FALSE; } -#elif defined( HAVE_SDL ) -#include <SDL/SDL.h> -static SDL_CD* sdlcd; -static int __FASTCALL__ cdd_open(stream_t *stream,const char *filename,unsigned flags) -{ - int start_track = 0; - int end_track = 0; - const char *track; - char* end; - stream->type=STREAMTYPE_RAWAUDIO|STREAMTYPE_SEEKABLE; - stream->sector_size=2352; - if(!(strncmp(filename,"cdda://",7)==0 || strncmp(filename,"cddb://",7)==0)) return 0; - if(strcmp(&filename[7],"help") == 0) - { - MSG_HINT("Usage: cdda://<trackno> or cddb://<trackno>\n"); - return 0; - } - track=&filename[7]; - end = strchr(track,'-'); - if(!end) start_track = end_track = atoi(track); - else { - int st_len = end - track; - int ed_len = strlen(track) - 1 - st_len; - if(st_len) { - char st[st_len + 1]; - strncpy(st,track,st_len); - st[st_len] = '\0'; - start_track = atoi(st); - } - if(ed_len) { - char ed[ed_len + 1]; - strncpy(ed,end+1,ed_len); - ed[ed_len] = '\0'; - end_track = atoi(ed); - } - } - if (!SDL_WasInit(SDL_INIT_CDROM)) { - if (SDL_Init (SDL_INIT_CDROM)) { - MSG_ERR("SDL: Initializing of SDL failed: %s.\n", SDL_GetError()); - return -1; - } - } - /* TODO: selectable cd number */ - sdlcd = SDL_CDOpen(0); - if(CD_INDRIVE(SDL_CDStatus(sdlcd))) - SDL_CDPlayTracks(sdlcd,start_track,0,end_track-start_track,0); - return 1; -} - -static int __FASTCALL__ cdd_read(stream_t*stream,stream_packet_t*sp) +const stream_driver_t cdda_stream= { - return 0; -} + "cdda://", + "reads multimedia stream directly from Compact Disc Digital Audio system, or CD-DA", + _cdda_open, + cdd_read, + cdd_seek, + cdd_tell, + cdd_close, + cdd_ctrl +}; -static off_t __FASTCALL__ cdd_seek(stream_t*stream,off_t pos) +const stream_driver_t cddb_stream= { - return 0; -} - -static off_t __FASTCALL__ cdd_tell(stream_t*stream) -{ - return 0; -} -static void __FASTCALL__ cdd_close(stream_t*stream) -{ - SDL_CDStop(sdlcd); - SDL_CDClose(sdlcd); - if (SDL_WasInit(SDL_INIT_CDROM)); - SDL_QuitSubSystem(SDL_INIT_CDROM); -} - -static int __FASTCALL__ cdd_ctrl(stream_t *s,unsigned cmd,void *args) -{ - switch(cmd) - { - case SCTRL_AUD_GET_CHANNELS: - *(int *)args=2; - return SCTRL_OK; - case SCTRL_AUD_GET_SAMPLERATE: - *(int *)args = 44100; - return SCTRL_OK; - case SCTRL_AUD_GET_SAMPLESIZE: - *(int *)args=2; - return SCTRL_OK; - case SCTRL_AUD_GET_FORMAT: - *(int *)args=0x01; /* Raw PCM */ - return SCTRL_OK; - default: break; - } - return SCTRL_UNKNOWN; -} -#else -#include "demux_msg.h" -static int __FASTCALL__ cdd_open(stream_t *stream,const char *filename,unsigned flags) -{ - if(strncmp(filename,"cdda://",7)==0 || strncmp(filename,"cddb://",7)==0) - MSG_ERR("MplayerXP has been compiled without CDDA(B) support\n"); - return 0; -} - -static int __FASTCALL__ cdd_read(stream_t*stream,char *buf,unsigned size) -{ - return 0; -} - -static off_t __FASTCALL__ cdd_seek(stream_t*stream,off_t pos) -{ - return 0; -} - -static off_t __FASTCALL__ cdd_tell(stream_t*stream) -{ - return 0; -} -static void __FASTCALL__ cdd_close(stream_t*stream) {} - -static int __FASTCALL__ cdd_ctrl(stream_t *s,unsigned cmd,void *args) { return SCTRL_UNKNOWN; } -#endif - -const stream_driver_t cdd_stream= -{ - "cdd", - cdd_open, + "cddb://", + "reads multimedia stream from Compact Disc Database or CD-DB", + _cddb_open, cdd_read, cdd_seek, cdd_tell, cdd_close, cdd_ctrl }; +#endif Modified: mplayerxp/libmpdemux/s_dvdnav.c =================================================================== --- mplayerxp/libmpdemux/s_dvdnav.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_dvdnav.c 2009-12-08 14:40:21 UTC (rev 34) @@ -2,6 +2,7 @@ s_dvdnav - DVDNAV's stream interface */ #include "../mp_config.h" +#ifdef USE_DVDNAV #include <stdlib.h> #include <string.h> #include <math.h> @@ -14,7 +15,6 @@ #include "../mplayer.h" #include "demux_msg.h" -#ifdef USE_DVDNAV #include <dvdnav/dvdnav.h> #include <stdio.h> #include <unistd.h> @@ -171,6 +171,8 @@ return NULL; } return dvdnav_priv->dvdnav->vm->state.pgc->palette; +#else + UNUSED(stream); #endif return 0; } @@ -191,10 +193,9 @@ const char *param; char *dvd_device; int ntitles; - - if(strncmp(filename,"dvdnav://",9)!=0) return 0; + UNUSED(flags); stream->type = STREAMTYPE_SEEKABLE|STREAMTYPE_PROGRAM; - param=mrl_parse_line(&filename[9],NULL,NULL,&dvd_device,NULL); + param=mrl_parse_line(filename,NULL,NULL,&dvd_device,NULL); if(strcmp(param,"help") == 0) { MSG_HINT("Usage: dvdnav://<title>,<chapter>\n"); @@ -467,7 +468,7 @@ for (btnum = 0; btnum < pnavpci->hli.hl_gi.btn_ns; btnum++) { btni_t *btni = &(pnavpci->hli.btnit[btnum]); - if (priv->hlev.buttonN == btnum + 1) { + if (priv->hlev.buttonN == (unsigned)btnum + 1) { priv->hlev.sx = min (btni->x_start, btni->x_end); priv->hlev.ex = max (btni->x_start, btni->x_end); priv->hlev.sy = min (btni->y_start, btni->y_end); @@ -649,35 +650,11 @@ } return SCTRL_FALSE; } -#else -static int __FASTCALL__ __dvdnav_open(stream_t *stream,const char *filename,unsigned flags) -{ - if(strncmp(filename,"dvdnav://",9)==0) - MSG_ERR("MPlayerXP has been compiled without DVDNAV support\n"); - return 0; -} -static int __FASTCALL__ __dvdnav_read(stream_t *stream,stream_packet_t * sp) -{ - return 0; -} -static off_t __FASTCALL__ __dvdnav_seek(stream_t *stream,off_t pos) -{ - return 0; -} -static off_t __FASTCALL__ __dvdnav_tell(stream_t *stream) -{ - return 0; -} -static void __FASTCALL__ __dvdnav_close(stream_t *stream) -{ -} -static int __FASTCALL__ __dvdnav_ctrl(stream_t *s,unsigned cmd,void *args) { return SCTRL_UNKNOWN; } -#endif - const stream_driver_t dvdnav_stream= { - "dvdnav", + "dvdnav://", + "reads multimedia stream with using of libdvdnav library", __dvdnav_open, __dvdnav_read, __dvdnav_seek, @@ -685,3 +662,4 @@ __dvdnav_close, __dvdnav_ctrl }; +#endif Deleted: mplayerxp/libmpdemux/s_dvdplay.c =================================================================== --- mplayerxp/libmpdemux/s_dvdplay.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_dvdplay.c 2009-12-08 14:40:21 UTC (rev 34) @@ -1,144 +0,0 @@ -/* - s_dvdplay - DVDPlay's stream interface - can be found at: - http://developers.videolan.org/libdvdplay/ - Note: Please use it with '-nocache' option. - Requires PTS fixing :( -*/ -#include "../mp_config.h" -#include <stdlib.h> -#include <string.h> -#include "stream.h" -#include "help_mp.h" -#include "demux_msg.h" - -#ifdef USE_DVDPLAY -typedef unsigned char byte_t; -#include <dvdread/ifo_types.h> -#include <dvdplay/dvdplay.h> -#include <dvdplay/info.h> -#include <dvdplay/nav.h> -#include <dvdplay/state.h> -#define DVD_BLOCK_SIZE 2048 -#include "mrl.h" - -/* Logical block size for DVD-VIDEO */ -#define LB2OFF(x) ((off_t)(x) * (off_t)(DVD_BLOCK_SIZE)) -#define OFF2LB(x) ((x) >> 11) - -typedef struct dvdplay_priv_s -{ - dvdplay_ptr dvdplay; - off_t cur_pos; -}dvdplay_priv_t; - -static void my_callback(void *s,dvdplay_event_t event) -{ - stream_t *stream=s; - dvdplay_priv_t *priv = stream->priv; - MSG_DBG2("dvdplay: callback with event %i\n",event); -} - -static int __FASTCALL__ __dvdplay_open(stream_t *stream,const char *filename,unsigned flags) -{ - const char *param; - char *dvd_device; - - if(strncmp(filename,"dvdplay://",10)!=0) return 0; - stream->type = STREAMTYPE_SEEKABLE|STREAMTYPE_PROGRAM; - - if(!(stream->priv=malloc(sizeof(dvdplay_priv_t)))) - { - MSG_ERR(MSGTR_OutOfMemory); - return 0; - } - param=mrl_parse_line(&filename[10],NULL,NULL,&dvd_device,NULL); - if (!(((dvdplay_priv_t *)stream->priv)->dvdplay=dvdplay_open(dvd_device?dvd_device:DEFAULT_DVD_DEVICE,my_callback,stream))) { - MSG_ERR(MSGTR_CantOpenDVD,dvd_device); - if(!dvd_device) - { - if (!(((dvdplay_priv_t *)stream->priv)->dvdplay=dvdplay_open(DEFAULT_CDROM_DEVICE,my_callback,stream))) - MSG_ERR(MSGTR_CantOpenDVD,dvd_device); - else - goto dvd_ok; - } - free(stream->priv); - if(dvd_device) free(dvd_device); - return 0; - } - dvd_ok: - if(dvd_device) free(dvd_device); - /* libdvdplay can read blocks of any size (unlike libdvdnav) so - increasing block size in 10 times speedups cache */ - stream->sector_size=DVD_BLOCK_SIZE*10; - ((dvdplay_priv_t *)stream->priv)->cur_pos=0; - dvdplay_start(((dvdplay_priv_t *)stream->priv)->dvdplay,0); - return 1; -} - -static int __FASTCALL__ __dvdplay_read(stream_t *stream,stream_packet_t *sp) -{ - dvdplay_priv_t *priv = stream->priv; - sp->type=0; - sp->len = LB2OFF(dvdplay_read(priv->dvdplay,sp->buf,OFF2LB(sp->len))); - priv->cur_pos += sp->len; - return sp->len; -} - - -static off_t __FASTCALL__ __dvdplay_tell(stream_t *stream) -{ - dvdplay_priv_t *priv = stream->priv; -/* return LB2OFF(dvdplay_position(priv->dvdplay));*/ - return priv->cur_pos; -} - -static off_t __FASTCALL__ __dvdplay_seek(stream_t *stream,off_t pos) -{ - dvdplay_priv_t *priv = stream->priv; - dvdplay_seek(priv->dvdplay,OFF2LB(pos)); - priv->cur_pos=LB2OFF(dvdplay_position(priv->dvdplay)); - return priv->cur_pos; -} - -static void __FASTCALL__ __dvdplay_close(stream_t *stream) -{ - dvdplay_priv_t *priv = stream->priv; - dvdplay_close(priv->dvdplay); - free(stream->priv); -} -#else -static int __FASTCALL__ __dvdplay_open(stream_t *stream,const char *filename,unsigned flags) -{ - if(strncmp(filename,"dvdplay://",10)==0) - MSG_ERR("MplayerXP has been compiled without DVDPlay support\n"); - return 0; -} -static int __FASTCALL__ __dvdplay_read(stream_t *stream,stream_packet_t *sp) -{ - return 0; -} -static off_t __FASTCALL__ __dvdplay_seek(stream_t *stream,off_t pos) -{ - return 0; -} -static off_t __FASTCALL__ __dvdplay_tell(stream_t *stream) -{ - return 0; -} -static void __FASTCALL__ __dvdplay_close(stream_t *stream) -{ -} -#endif -static int __FASTCALL__ __dvdplay_ctrl(stream_t *s,unsigned cmd,void *args) { return SCTRL_UNKNOWN; } - -const stream_driver_t dvdplay_stream= -{ - "dvdplay", - __dvdplay_open, - __dvdplay_read, - __dvdplay_seek, - __dvdplay_tell, - __dvdplay_close, - __dvdplay_ctrl -}; Modified: mplayerxp/libmpdemux/s_dvdread.c =================================================================== --- mplayerxp/libmpdemux/s_dvdread.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_dvdread.c 2009-12-08 14:40:21 UTC (rev 34) @@ -3,6 +3,7 @@ */ #include "../mp_config.h" +#ifdef USE_DVDREAD #include <stdlib.h> #include <string.h> #include <ctype.h> @@ -10,7 +11,6 @@ #include "help_mp.h" #include "demux_msg.h" -#ifdef USE_DVDREAD #include <dvdread/dvd_reader.h> #include <dvdread/ifo_types.h> @@ -610,13 +610,12 @@ ifo_handle_t *vmg_file; tt_srpt_t *tt_srpt; - if(strncmp(filename,"dvdread://",10)!=0) return 0; - if(strcmp(&filename[10],"help") == 0 || strlen(filename)==10) + if(strcmp(filename,"help") == 0 || strlen(filename)==10) { MSG_HINT("Usage: dvdread://<@device>#<titleno>-<lasttitle>,<chapter>-<lastchapter>,<angle>\n"); return 0; } - args=mrl_parse_line(&filename[10],NULL,NULL,&dvd_device,NULL); + args=mrl_parse_line(filename,NULL,NULL,&dvd_device,NULL); strncpy(param,args,sizeof(param)); comma=strchr(param,','); tilde=strchr(param,'-'); @@ -818,38 +817,11 @@ } return SCTRL_FALSE; } -#else -static int __FASTCALL__ __dvdread_open(stream_t *stream,const char *filename,unsigned flags) -{ - if(strncmp(filename,"dvdread://",10)==0) - MSG_ERR("MplayerXP has been compiled without DVDREAD support\n"); - return 0; -} -static int __FASTCALL__ __dvdread_read(stream_t *stream,stream_packet_t *sp) -{ - return 0; -} -static off_t __FASTCALL__ __dvdread_seek(stream_t *stream,off_t newpos) -{ - return 0; -} -static off_t __FASTCALL__ __dvdread_tell(stream_t *stream) -{ - return 0; -} -static void __FASTCALL__ __dvdread_close(stream_t *stream) {} -unsigned int * __FASTCALL__ dvdread_stream_get_palette(stream_t *stream) -{ - return 0; -} - -static int __FASTCALL__ __dvdread_ctrl(stream_t *s,unsigned cmd,void *args) { return SCTRL_UNKNOWN; } -#endif - const stream_driver_t dvdread_stream = { - "dvdread", + "dvdread://", + "reads multimedia stream using low-level libdvdread access", __dvdread_open, __dvdread_read, __dvdread_seek, @@ -857,3 +829,5 @@ __dvdread_close, __dvdread_ctrl }; +#endif + Modified: mplayerxp/libmpdemux/s_file.c =================================================================== --- mplayerxp/libmpdemux/s_file.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_file.c 2009-12-08 14:40:21 UTC (rev 34) @@ -5,7 +5,9 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> +#ifndef __USE_GNU #define __USE_GNU +#endif #include <unistd.h> #include <fcntl.h> @@ -19,11 +21,11 @@ off_t spos; }file_priv_t; + static int __FASTCALL__ file_open(stream_t *stream,const char *filename,unsigned flags) { + UNUSED(flags); if(!(stream->priv = malloc(sizeof(file_priv_t)))) return 0; - if(strncmp(filename,"stdin://",8)==0) filename="-"; - if(strncmp(filename,"file://",7)==0) filename = &filename[7]; if(strcmp(filename,"-")==0) stream->fd=0; else stream->fd=open(filename,O_RDONLY); if(stream->fd<0) { free(stream->priv); return 0; } @@ -40,6 +42,11 @@ return 1; } +static int __FASTCALL__ stdin_open(stream_t *stream,const char *filename,unsigned flags) { + UNUSED(filename); + return file_open(stream,"-",flags); +} + #ifndef TEMP_FAILURE_RETRY #define TEMP_FAILURE_RETRY(x) (x) #endif @@ -85,11 +92,29 @@ free(stream->priv); } -static int __FASTCALL__ file_ctrl(stream_t *s,unsigned cmd,void *args) { return SCTRL_UNKNOWN; } +static int __FASTCALL__ file_ctrl(stream_t *s,unsigned cmd,void *args) { + UNUSED(s); + UNUSED(cmd); + UNUSED(args); + return SCTRL_UNKNOWN; +} +const stream_driver_t stdin_stream = +{ + "stdin://", + "reads multimedia stream from standard input", + stdin_open, + file_read, + file_seek, + file_tell, + file_close, + file_ctrl +}; + const stream_driver_t file_stream = { - "file", + "file://", + "reads multimedia stream from regular file", file_open, file_read, file_seek, Modified: mplayerxp/libmpdemux/s_ftp.c =================================================================== --- mplayerxp/libmpdemux/s_ftp.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_ftp.c 2009-12-08 14:40:21 UTC (rev 34) @@ -355,11 +355,16 @@ { int len = 0,resp; struct stream_priv_s* p; - URL_t* url,*rurl; + URL_t* url; char str[256],rsp_txt[256]; + char *uname; - if(strncmp(filename,"ftp://",6)!=0) return 0; - if(!(url=url_new(filename))) goto bad_url; + UNUSED(flags); + if(!(uname=malloc(strlen(filename)+7))) return 0; + strcpy(uname,"ftp://"); + strcat(uname,filename); + if(!(url=url_new(uname))) goto bad_url; + free(uname); // url = check4proxies (rurl); if(!(url->hostname && url->file)) { bad_url: @@ -374,10 +379,10 @@ p->port=url->port?url->port:21; p->filename=url->file; MSG_V("FTP: Opening ~%s :%s @%s :%i %s\n",p->user,p->pass,p->host,p->port,p->filename); - + // Open the control connection p->handle = tcp_connect2Server(p->host,p->port,1); - + if(p->handle < 0) { url_free(url); free(stream->priv); @@ -414,7 +419,7 @@ return 0; } - + // Set the transfer type resp = FtpSendCmd("TYPE I",p,rsp_txt); if(resp != 2) { @@ -470,12 +475,18 @@ return 1; } -static int __FASTCALL__ ftp_ctrl(stream_t *s,unsigned cmd,void *args) { return SCTRL_UNKNOWN; } +static int __FASTCALL__ ftp_ctrl(stream_t *s,unsigned cmd,void *args) { + UNUSED(s); + UNUSED(cmd); + UNUSED(args); + return SCTRL_UNKNOWN; +} /* "reuse a bit of code from ftplib written by Thomas Pfau", */ const stream_driver_t ftp_stream = { - "ftp", + "ftp://", + "reads multimedia stream from File Transfer Protocol (FTP)", ftp_open, ftp_read, ftp_seek, Modified: mplayerxp/libmpdemux/s_network.c =================================================================== --- mplayerxp/libmpdemux/s_network.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_network.c 2009-12-08 14:40:21 UTC (rev 34) @@ -1,17 +1,19 @@ /* s_network - network stream inetrface */ +#include "../mp_config.h" +#ifdef HAVE_STREAMING #include <errno.h> #include <stdlib.h> +#ifndef __USE_GNU #define __USE_GNU +#endif #include <unistd.h> -#include "../mp_config.h" #include "stream.h" #include "help_mp.h" #include "demux_msg.h" -#ifdef HAVE_STREAMING #include "url.h" #include "network.h" @@ -28,6 +30,7 @@ static int __FASTCALL__ network_open(stream_t *stream,const char *filename,unsigned flags) { URL_t* url; + UNUSED(flags); url = url_new(filename); if(url) { if(streaming_start(stream, &stream->file_format, url)<0){ @@ -88,30 +91,17 @@ if(stream->fd>0) close(stream->fd); } -#else -static int __FASTCALL__ network_open(stream_t *stream,const char *filename,unsigned flags) -{ - return 0; +static int __FASTCALL__ network_ctrl(stream_t *s,unsigned cmd,void *args) { + UNUSED(s); + UNUSED(cmd); + UNUSED(args); + return SCTRL_UNKNOWN; } -static int __FASTCALL__ network_read(stream_t *stream,stream_packet_t *sp) -{ - return 0; -} -static off_t __FASTCALL__ network_seek(stream_t *stream,off_t pos) -{ - return 0; -} -static off_t __FASTCALL__ network_tell(stream_t *stream) -{ - return 0; -} -static void __FASTCALL__ network_close(stream_t *stream) {} -#endif -static int __FASTCALL__ network_ctrl(stream_t *s,unsigned cmd,void *args) { return SCTRL_UNKNOWN; } const stream_driver_t network_stream = { - "network", + "inet:", + "reads multimedia stream from any known network protocol. Example: inet:http://myserver.com", network_open, network_read, network_seek, @@ -119,3 +109,4 @@ network_close, network_ctrl }; +#endif Modified: mplayerxp/libmpdemux/s_oss.c =================================================================== --- mplayerxp/libmpdemux/s_oss.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_oss.c 2009-12-08 14:40:21 UTC (rev 34) @@ -41,15 +41,15 @@ oss_priv_t *oss_priv; unsigned tmp,param; int err; - if(strncmp(filename,"oss://",6)!=0) return 0; + UNUSED(flags); if(!(stream->priv = malloc(sizeof(oss_priv_t)))) return 0; oss_priv=stream->priv; - if(strcmp(&filename[6],"help") == 0) + if(strcmp(filename,"help") == 0) { MSG_HINT("Usage: oss://<@device>#<channels>,<samplerate>,<sampleformat>\n"); return 0; } - args=mrl_parse_line(&filename[6],NULL,NULL,&oss_device,NULL); + args=mrl_parse_line(filename,NULL,NULL,&oss_device,NULL); comma=strchr(args,','); if(comma) *comma=0; oss_priv->nchannels=args[0]?atoi(args):2; @@ -150,6 +150,7 @@ static off_t __FASTCALL__ oss_seek(stream_t*stream,off_t pos) { + UNUSED(pos); oss_priv_t *p=stream->priv; stream->_Errno=ENOSYS; return p->spos; @@ -180,7 +181,7 @@ rval = oss_priv->nchannels; if (rval > 2) { if ( ioctl(s->fd, SNDCTL_DSP_CHANNELS, &rval) == -1 || - rval != oss_priv->nchannels ) return SCTRL_FALSE; + (unsigned)rval != oss_priv->nchannels ) return SCTRL_FALSE; *(int *)args=rval; return SCTRL_OK; } @@ -276,7 +277,8 @@ const stream_driver_t oss_stream = { - "oss", + "oss://", + "reads multimedia stream from OSS audio capturing interface", oss_open, oss_read, oss_seek, Modified: mplayerxp/libmpdemux/s_rtsp.c =================================================================== --- mplayerxp/libmpdemux/s_rtsp.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_rtsp.c 2009-12-08 14:40:21 UTC (rev 34) @@ -32,16 +32,21 @@ static off_t __FASTCALL__ rtsp_seek(stream_t *s,off_t newpos) { + UNUSED(s); return newpos; } static off_t __FASTCALL__ rtsp_tell(stream_t *stream) { + UNUSED(stream); return 0; } static int __FASTCALL__ rtsp_ctrl(stream_t *s,unsigned cmd,void *args) { + UNUSED(s); + UNUSED(cmd); + UNUSED(args); return SCTRL_UNKNOWN; } @@ -132,9 +137,9 @@ static int __FASTCALL__ rtsp_open (stream_t *stream,const char *filename,unsigned flags) { URL_t *url; - + UNUSED(flags); if(strncmp(filename,"rtsp://",7)!=0) return 0; - + MSG_V("STREAM_RTSP, URL: %s\n", filename); stream->streaming_ctrl = streaming_ctrl_new (); if (!stream->streaming_ctrl) @@ -163,6 +168,7 @@ const stream_driver_t rtsp_stream = { "rtsp", + "reads multimedia stream from Real Time Streaming Protocol (RTSP)", rtsp_open, rtsp_stream_read, rtsp_seek, Modified: mplayerxp/libmpdemux/s_tv.c =================================================================== --- mplayerxp/libmpdemux/s_tv.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_tv.c 2009-12-08 14:40:21 UTC (rev 34) @@ -12,6 +12,7 @@ */ #include "../mp_config.h" +#ifdef USE_TV #include <stdlib.h> #include <string.h> #include "stream.h" @@ -51,7 +52,6 @@ {NULL, NULL, 0, 0, 0 } }; -#ifdef USE_TV #include "tv.h" #include "demux_msg.h" #include "help_mp.h" @@ -119,7 +119,7 @@ int i; tvi_functions_t *funcs = tvh->functions; int picture_format = 0; - + UNUSED(stream); if (funcs->control(tvh->priv, TVI_CONTROL_IS_VIDEO, 0) != TVI_CONTROL_TRUE) { MSG_ERR( "Error: no video input present!\n"); @@ -548,18 +548,20 @@ int __FASTCALL__ tv_step_norm(tvi_handle_t *tvh) { + UNUSED(tvh); return 0; } int __FASTCALL__ tv_step_chanlist(tvi_handle_t *tvh) { + UNUSED(tvh); return 0; } static int __FASTCALL__ _tv_open(stream_t*stream,const char *filename,unsigned flags) { - if(strncmp(filename,"tv://",4)!=0) return 0; - mrl_parse_params(&filename[5],tvopts_conf); + UNUSED(flags); + mrl_parse_params(filename,tvopts_conf); /* create tvi handler */ if(!(stream->priv = tv_begin())) goto tv_err; @@ -581,16 +583,20 @@ static int __FASTCALL__ _tv_read(stream_t *stream,stream_packet_t*sp) { + UNUSED(stream); + UNUSED(sp); return 0; } static off_t __FASTCALL__ _tv_seek(stream_t *stream,off_t pos) { + UNUSED(stream); return pos; } static off_t __FASTCALL__ _tv_tell(stream_t *stream) { + UNUSED(stream); return 0; } @@ -630,33 +636,11 @@ } return SCTRL_UNKNOWN; } -#else -static int __FASTCALL__ _tv_open(stream_t*stream,const char *filename,unsigned flags) -{ - if(strncmp(filename,"tv://",5)==0) - MSG_ERR("MplayerXP has been compiled without TV support\n"); - return 0; -} -static int __FASTCALL__ _tv_read(stream_t *stream,stream_packet_t*sp) -{ - sp->type=sp->len=0; - return sp->len; -} -static off_t __FASTCALL__ _tv_seek(stream_t *stream,off_t pos) -{ - return 0; -} -static off_t __FASTCALL__ _tv_tell(stream_t *stream) -{ - return 0; -} -static void __FASTCALL__ _tv_close(stream_t*stream) {} -static int __FASTCALL__ _tv_ctrl(stream_t *s,unsigned cmd,void *args) { return SCTRL_UNKNOWN; } -#endif const stream_driver_t tv_stream= { - "tv", + "tv://", + "reads multimedia stream directly from TV tunner", _tv_open, _tv_read, _tv_seek, @@ -664,3 +648,5 @@ _tv_close, _tv_ctrl }; +#endif + Modified: mplayerxp/libmpdemux/s_udp.c =================================================================== --- mplayerxp/libmpdemux/s_udp.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_udp.c 2009-12-08 14:40:21 UTC (rev 34) @@ -28,16 +28,21 @@ static off_t __FASTCALL__ udp_seek(stream_t *s,off_t newpos) { + UNUSED(s); return newpos; } static off_t __FASTCALL__ udp_tell(stream_t *stream) { + UNUSED(stream); return 0; } static int __FASTCALL__ udp_ctrl(stream_t *s,unsigned cmd,void *args) { + UNUSED(s); + UNUSED(cmd); + UNUSED(args); return SCTRL_UNKNOWN; } @@ -57,7 +62,7 @@ streaming_ctrl = stream->streaming_ctrl; fd = stream->fd; - + if (fd < 0) { fd = udp_open_socket (streaming_ctrl->url); @@ -71,7 +76,7 @@ streaming_ctrl->prebuffer_size = 64 * 1024; /* 64 KBytes */ streaming_ctrl->buffering = 0; streaming_ctrl->status = streaming_playing_e; - + return 0; } @@ -79,8 +84,7 @@ static int __FASTCALL__ udp_open (stream_t *stream,const char *filename,unsigned flags) { URL_t *url; - - if(strncmp(filename,"udp://",6)!=0) return 0; + UNUSED(flags); MSG_V("STREAM_UDP, URL: %s\n", filename); stream->streaming_ctrl = streaming_ctrl_new (); if (!stream->streaming_ctrl) @@ -95,7 +99,7 @@ MSG_ERR("You must enter a port number for UDP streams!\n"); streaming_ctrl_free (stream->streaming_ctrl); stream->streaming_ctrl = NULL; - + return 0; } @@ -104,20 +108,21 @@ MSG_ERR("udp_streaming_start failed\n"); streaming_ctrl_free (stream->streaming_ctrl); stream->streaming_ctrl = NULL; - + return 0; } stream->type = STREAMTYPE_STREAM; fixup_network_stream_cache (stream); - + return 1; } /* "reuse a bit of code from ftplib written by Thomas Pfau", */ const stream_driver_t udp_stream = { - "udp", + "udp://", + "reads multimedia stream directly from User Datagram Protocol (UDP)", udp_open, udp_read, udp_seek, Modified: mplayerxp/libmpdemux/s_vcd.c =================================================================== --- mplayerxp/libmpdemux/s_vcd.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_vcd.c 2009-12-08 14:40:21 UTC (rev 34) @@ -2,12 +2,12 @@ s_vcd - VCD's stream interface */ #include "../mp_config.h" +#ifdef HAVE_VCD #include <stdlib.h> #include <string.h> #include <stdio.h> #include "stream.h" -#ifdef HAVE_VCD #ifdef __FreeBSD__ #include <sys/cdrio.h> @@ -18,9 +18,9 @@ #include <unistd.h> #include <fcntl.h> #ifdef __FreeBSD__ -#include "vcd_read_fbsd.h" +#include "vcd_read_fbsd.h" #elif defined(__NetBSD__) -#include "vcd_read_nbsd.h" +#include "vcd_read_nbsd.h" #else #include "vcd_read.h" #endif @@ -44,16 +44,14 @@ #ifdef __FreeBSD__ int bsize=VCD_SECTOR_SIZE; #endif - - + UNUSED(flags); /* originally was vcd:// but playtree parser replaced it */ - if(strncmp(filename,"vcd://",6)!=0) return 0; - if(strcmp(&filename[6],"help") == 0) + if(strcmp(filename,"help") == 0) { MSG_HINT("Usage: vcd://<@device><#trackno>\n"); return 0; } - param=mrl_parse_line(&filename[6],NULL,NULL,&device,NULL); + param=mrl_parse_line(filename,NULL,NULL,&device,NULL); vcd_track=atoi(param); if(!device) device=DEFAULT_CDROM_DEVICE; stream->fd=open(device,O_RDONLY); @@ -100,7 +98,7 @@ static off_t __FASTCALL__ _vcd_seek(stream_t *stream,off_t pos) { vcd_priv_t *p=stream->priv; - off_t newpos; + off_t newpos=pos; if(newpos<stream->start_pos) newpos=stream->start_pos; if(newpos>stream->end_pos) newpos=stream->end_pos; newpos=pos/VCD_SECTOR_DATA; @@ -122,32 +120,17 @@ free(stream->priv); close(stream->fd); } -#else -static int __FASTCALL__ _vcd_open(stream_t *stream,const char *filename,unsigned flags) -{ - if(strncmp(filename,"vcd://",6)==0) - MSG_ERR("MPlayerXP has been compiled without VCD support\n"); - return 0; +static int __FASTCALL__ _vcd_ctrl(stream_t *s,unsigned cmd,void *args) { + UNUSED(s); + UNUSED(cmd); + UNUSED(args); + return SCTRL_UNKNOWN; } -static int __FASTCALL__ _vcd_read(stream_t *stream,stream_packet_t *sp) -{ - return 0; -} -static off_t __FASTCALL__ _vcd_seek(stream_t *stream,off_t pos) -{ - return 0; -} -static off_t __FASTCALL__ _vcd_tell(stream_t *stream) -{ - return 0; -} -static void __FASTCALL__ _vcd_close(stream_t*stream) {} -#endif -static int __FASTCALL__ _vcd_ctrl(stream_t *s,unsigned cmd,void *args) { return SCTRL_UNKNOWN; } const stream_driver_t vcd_stream= { - "vcd", + "vcd://", + "reads multimedia stream using low-level Video-CD access", _vcd_open, _vcd_read, _vcd_seek, @@ -155,3 +138,4 @@ _vcd_close, _vcd_ctrl }; +#endif Modified: mplayerxp/libmpdemux/s_vcdnav.c =================================================================== --- mplayerxp/libmpdemux/s_vcdnav.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/s_vcdnav.c 2009-12-08 14:40:21 UTC (rev 34) @@ -2,13 +2,13 @@ s_vcdnav - libVCD's stream interface (based on xine's input plugin) */ #include "../mp_config.h" +#ifdef USE_LIBVCD #include <stdlib.h> #include <string.h> #include <stdio.h> #include "stream.h" #include "demux_msg.h" -#ifdef USE_LIBVCD #include <libvcd/info.h> #include <libvcd/logging.h> #include "mrl.h" @@ -64,13 +64,13 @@ unsigned i; int vcd_track=-1; vcdinfo_open_return_t open_rc; - if(strncmp(filename,"vcdnav://",9)!=0) return 0; - if(strcmp(&filename[9],"help") == 0) + UNUSED(flags); + if(strcmp(filename,"help") == 0) { MSG_HINT("Usage: vcdnav://<@device><#trackno>\n"); return 0; } - param=mrl_parse_line(&filename[9],NULL,NULL,&device,NULL); + param=mrl_parse_line(filename,NULL,NULL,&device,NULL); if(param) vcd_track=atoi(param); priv=stream->priv=calloc(1,sizeof(vcd_priv_t)); // vcdinfo_init(priv->fd); @@ -232,7 +232,6 @@ static off_t __FASTCALL__ _vcdnav_seek(stream_t *stream,off_t pos) { vcd_priv_t *p=stream->priv; - off_t newpos; lsn_t oldlsn=p->lsn; CdIo *img = vcdinfo_get_cd_image(p->fd); p->lsn=pos/sizeof(vcdsector_t); @@ -262,32 +261,17 @@ if(priv->segment) free(priv->segment); free(stream->priv); } -#else -static int __FASTCALL__ _vcdnav_open(stream_t *stream,const char *filename,unsigned flags) -{ - if(strncmp(filename,"vcdnav://",9)==0) - MSG_ERR("MPlayerXP has been compiled without libVCD support\n"); - return 0; +static int __FASTCALL__ _vcdnav_ctrl(stream_t *s,unsigned cmd,void *args) { + UNUSED(s); + UNUSED(cmd); + UNUSED(args); + return SCTRL_UNKNOWN; } -static int __FASTCALL__ _vcdnav_read(stream_t *stream,stream_packet_t *sp) -{ - return 0; -} -static off_t __FASTCALL__ _vcdnav_seek(stream_t *stream,off_t pos) -{ - return 0; -} -static off_t __FASTCALL__ _vcdnav_tell(stream_t *stream) -{ - return 0; -} -static void __FASTCALL__ _vcdnav_close(stream_t*stream) {} -#endif -static int __FASTCALL__ _vcdnav_ctrl(stream_t *s,unsigned cmd,void *args) { return SCTRL_UNKNOWN; } const stream_driver_t vcdnav_stream= { - "vcdnav", + "vcdnav://", + "reads multimedia stream from libVCD's interface", _vcdnav_open, _vcdnav_read, _vcdnav_seek, @@ -295,3 +279,4 @@ _vcdnav_close, _vcdnav_ctrl }; +#endif Modified: mplayerxp/libmpdemux/stream.c =================================================================== --- mplayerxp/libmpdemux/stream.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/stream.c 2009-12-08 14:40:21 UTC (rev 34) @@ -22,29 +22,57 @@ #define min(a,b) ((a)<(b)?(a):(b)) #endif -extern const stream_driver_t cdd_stream; +#ifdef HAVE_CDDA +extern const stream_driver_t cdda_stream; +extern const stream_driver_t cddb_stream; +#endif +#ifdef USE_DVDNAV extern const stream_driver_t dvdnav_stream; -extern const stream_driver_t dvdplay_stream; +#endif +#ifdef USE_DVDREAD extern const stream_driver_t dvdread_stream; -extern const stream_driver_t file_stream; +#endif +#ifdef USE_TV +extern const stream_driver_t tv_stream; +#endif +#ifdef HAVE_STREAMING extern const stream_driver_t ftp_stream; extern const stream_driver_t network_stream; +#endif #ifdef USE_OSS_AUDIO extern const stream_driver_t oss_stream; #endif -extern const stream_driver_t tv_stream; +#ifdef HAVE_VCD extern const stream_driver_t vcd_stream; +#endif +#ifdef USE_LIBVCD extern const stream_driver_t vcdnav_stream; +#endif +extern const stream_driver_t stdin_stream; +extern const stream_driver_t file_stream; + static const stream_driver_t *sdrivers[] = { - &cdd_stream, +#ifdef HAVE_CDDA + &cdda_stream, + &cddb_stream, +#endif +#ifdef USE_DVDNAV &dvdnav_stream, - &dvdplay_stream, +#endif +#ifdef USE_DVDREAD &dvdread_stream, +#endif +#ifdef USE_TV + &tv_stream, +#endif +#ifdef HAVE_VCD &vcd_stream, +#endif +#ifdef USE_LIBVCD &vcdnav_stream, - &tv_stream, +#endif #ifdef USE_OSS_AUDIO &oss_stream, #endif @@ -52,6 +80,7 @@ &ftp_stream, &network_stream, #endif + &stdin_stream, &file_stream, }; @@ -59,28 +88,49 @@ stream_t* __FASTCALL__ open_stream(const char* filename,int* file_format,stream_callback event_handler) { - unsigned i; + unsigned i,done; + unsigned mrl_len; stream_t* stream=new_stream(STREAMTYPE_STREAM); /* No flags here */ stream->file_format=*file_format; + done=0; for(i=0;i<nsdrivers;i++) { - MSG_V("Probing %s ... ",sdrivers[i]->name); - if(sdrivers[i]->open(stream,filename,0)) - { - MSG_V("OK\n"); - *file_format = stream->file_format; - stream->driver=sdrivers[i]; - stream->event_handler=event_handler; - stream->buffer=realloc(stream->buffer,stream->sector_size); - return stream; + mrl_len=strlen(sdrivers[i]->mrl); + if(strncmp(filename,sdrivers[i]->mrl,mrl_len)==0) { + MSG_V("Opening %s ... ",sdrivers[i]->mrl); + if(sdrivers[i]->open(stream,&filename[mrl_len],0)) { + MSG_V("OK\n"); + *file_format = stream->file_format; + stream->driver=sdrivers[i]; + stream->event_handler=event_handler; + stream->buffer=realloc(stream->buffer,stream->sector_size); + return stream; + } + MSG_V("False\n"); } - MSG_V("False\n"); } + /* Last hope */ + if(file_stream.open(stream,filename,0)) { + *file_format = stream->file_format; + stream->driver=&file_stream; + stream->event_handler=event_handler; + stream->buffer=realloc(stream->buffer,stream->sector_size); + return stream; + } free(stream->buffer); free(stream); return NULL; } +void print_stream_drivers( void ) +{ + unsigned i; + MSG_INFO("Available stream drivers:\n"); + for(i=0;i<nsdrivers;i++) { + MSG_INFO(" %-10s %s\n",sdrivers[i]->mrl,sdrivers[i]->descr); + } +} + #define FILE_POS(s) (s->pos-s->buf_len) //=================== STREAMER ========================= @@ -111,8 +161,8 @@ MSG_DBG3("nc_stream_read_cbuffer: Guess EOF\n"); s->eof=1; s->buf_pos=s->buf_len=0; - if(s->_Errno) { MSG_WARN("nc_stream_read_cbuffer(drv:%s) error: %s\n",s->driver->name,strerror(s->_Errno)); s->_Errno=0; } - return 0; + if(s->_Errno) { MSG_WARN("nc_stream_read_cbuffer(drv:%s) error: %s\n",s->driver->mrl,strerror(s->_Errno)); s->_Errno=0; } + return 0; } break; } @@ -138,7 +188,7 @@ { if(!s->driver) { s->eof=1; return 0; } s->pos = s->driver->seek(s,newpos); - if(s->_Errno) { MSG_WARN("nc_stream_seek(drv:%s) error: %s\n",s->driver->name,strerror(s->_Errno)); s->_Errno=0; } + if(s->_Errno) { MSG_WARN("nc_stream_seek(drv:%s) error: %s\n",s->driver->mrl,strerror(s->_Errno)); s->_Errno=0; } } MSG_DBG3("nc_stream_seek_long after: %llu\n",s->pos); @@ -203,7 +253,7 @@ } void __FASTCALL__ free_stream(stream_t *s){ - MSG_INFO("\n*** free_stream(drv:%s) called [errno: %s]***\n",s->driver->name,s->_Errno); + MSG_INFO("\n*** free_stream(drv:%s) called [errno: %s]***\n",s->driver->mrl,s->_Errno); if(s->cache_data) stream_disable_cache(s); if(s->driver) s->driver->close(s); free(s->buffer); Modified: mplayerxp/libmpdemux/stream.h =================================================================== --- mplayerxp/libmpdemux/stream.h 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/libmpdemux/stream.h 2009-12-08 14:40:21 UTC (rev 34) @@ -159,8 +159,8 @@ /** Stream-driver interface */ typedef struct stream_driver_s { - const char *name; /**< short name of stream driver (often - MRL) */ - + const char *mrl; /**< MRL of stream driver */ + const char *descr; /**< description of the driver */ /** Opens stream with given name * @param _this points structure to be filled by driver * @param filename points MRL of stream (vcdnav://, file://, http://, ...) @@ -203,6 +203,8 @@ int (* __FASTCALL__ control)(stream_t *_this,unsigned cmd,void *param); }stream_driver_t; +void print_stream_drivers(void); + #define MAX_STREAM_PROTOCOLS 10 typedef struct stream_info_st { const char *info; Modified: mplayerxp/mplayer.c =================================================================== --- mplayerxp/mplayer.c 2009-12-08 13:00:44 UTC (rev 33) +++ mplayerxp/mplayer.c 2009-12-08 14:40:21 UTC (rev 34) @@ -2091,6 +2091,7 @@ if(!filename){ // no file/vcd/dvd -> show HELP: MSG_INFO("%s",help_text); + print_stream_drivers(); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |