summaryrefslogtreecommitdiffstats
path: root/open.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-08-09 01:17:24 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-08-09 01:17:24 +0000
commitc3f1caec6d98a5ffd1b0d42646a0cf2b094e8df4 (patch)
tree215d776fb18289e8fa79067573be98e64f3e51e3 /open.c
parent4953243cb403109accd948d86533629cd4de24eb (diff)
downloadmpv-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.c103
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;
+
+}