diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-09 01:17:24 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-09 01:17:24 +0000 |
commit | c3f1caec6d98a5ffd1b0d42646a0cf2b094e8df4 (patch) | |
tree | 215d776fb18289e8fa79067573be98e64f3e51e3 /open.c | |
parent | 4953243cb403109accd948d86533629cd4de24eb (diff) | |
download | mpv-c3f1caec6d98a5ffd1b0d42646a0cf2b094e8df4.tar.bz2 mpv-c3f1caec6d98a5ffd1b0d42646a0cf2b094e8df4.tar.xz |
stream opening -> open.c, initialframes ignored
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1468 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'open.c')
-rw-r--r-- | open.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/open.c b/open.c new file mode 100644 index 0000000000..ed3ebdf1d1 --- /dev/null +++ b/open.c @@ -0,0 +1,103 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> + +#include "config.h" + +#include "stream.h" + +#ifdef STREAMING +#include "url.h" +#include "network.h" +static URL_t* url; +#endif + +extern int verbose; +extern int vcd_get_track_end(int fd,int track); + +// Open a new stream (stdin/file/vcd/url) + +stream_t* open_stream(char* filename,int vcd_track,int* file_format){ +stream_t* stream=NULL; +int f=-1; +off_t len; +#ifdef VCD_CACHE +int vcd_cache_size=128; +#endif +#ifdef __FreeBSD__ +int bsize = VCD_SECTOR_SIZE; +#endif + +//============ Open VideoCD track ============== +if(vcd_track){ + int ret,ret2; + f=open(filename,O_RDONLY); + if(f<0){ fprintf(stderr,"CD-ROM Device '%s' not found!\n",filename);return NULL; } + vcd_read_toc(f); + ret2=vcd_get_track_end(f,vcd_track); + if(ret2<0){ fprintf(stderr,"Error selecting VCD track! (get)\n");return NULL;} + ret=vcd_seek_to_track(f,vcd_track); + if(ret<0){ fprintf(stderr,"Error selecting VCD track! (seek)\n");return NULL;} +// seek_to_byte+=ret; + if(verbose) printf("VCD start byte position: 0x%X end: 0x%X\n",ret,ret2); +#ifdef VCD_CACHE + vcd_cache_init(vcd_cache_size); +#endif +#ifdef __FreeBSD__ + if (ioctl (f, CDRIOCSETBLOCKSIZE, &bsize) == -1) { + perror ( "Error in CDRIOCSETBLOCKSIZE"); + } +#endif + stream=new_stream(f,STREAMTYPE_VCD); + stream->start_pos=ret; + stream->end_pos=ret2; + return stream; +} + +//============ Open STDIN ============ + if(!strcmp(filename,"-")){ + // read from stdin + printf("Reading from stdin...\n"); + f=0; // 0=stdin + stream=new_stream(f,STREAMTYPE_STREAM); + return stream; + } + +#ifdef STREAMING + url = url_new(filename); + if(url) { + (*file_format)=autodetectProtocol( url, &f ); + if( (*file_format)==DEMUXER_TYPE_UNKNOWN ) { + fprintf(stderr,"Unable to open URL: %s\n", filename); + url_free(url); + return NULL; + } + f=streaming_start( &url, f, file_format ); + if(f<0){ fprintf(stderr,"Unable to open URL: %s\n", url->url); return NULL; } + printf("Connected to server: %s\n", url->hostname ); + stream=new_stream(f,STREAMTYPE_STREAM); + return NULL; + } +#endif + +//============ Open plain FILE ============ + f=open(filename,O_RDONLY); + if(f<0){ fprintf(stderr,"File not found: '%s'\n",filename);return NULL; } + len=lseek(f,0,SEEK_END); lseek(f,0,SEEK_SET); + if (len == -1) + perror("Error: lseek failed to obtain video file size"); + else + if(verbose) +#ifdef _LARGEFILE_SOURCE + printf("File size is %lld bytes\n", (long long)len); +#else + printf("File size is %u bytes\n", (unsigned int)len); +#endif + stream=new_stream(f,STREAMTYPE_FILE); + stream->end_pos=len; + return stream; + +} |