diff options
author | ben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-07-31 17:39:17 +0000 |
---|---|---|
committer | ben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-07-31 17:39:17 +0000 |
commit | 49867bd432352d19172ab26cf873bd5651e69e25 (patch) | |
tree | c2d419bb4f81564036baa12832a44b8aac27c6d1 /libmpdemux/stream_file.c | |
parent | d3b998da64927403879ad588287c178f86b7c849 (diff) | |
download | mpv-49867bd432352d19172ab26cf873bd5651e69e25.tar.bz2 mpv-49867bd432352d19172ab26cf873bd5651e69e25.tar.xz |
introduce new 'stream' directory for all stream layer related components and split them from libmpdemux
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19277 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/stream_file.c')
-rw-r--r-- | libmpdemux/stream_file.c | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/libmpdemux/stream_file.c b/libmpdemux/stream_file.c deleted file mode 100644 index ba2c3b133c..0000000000 --- a/libmpdemux/stream_file.c +++ /dev/null @@ -1,162 +0,0 @@ - -#include "config.h" - -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> - -#include "mp_msg.h" -#include "stream.h" -#include "help_mp.h" -#include "m_option.h" -#include "m_struct.h" - -static struct stream_priv_s { - char* filename; - char *filename2; -} stream_priv_dflts = { - NULL, NULL -}; - -#define ST_OFF(f) M_ST_OFF(struct stream_priv_s,f) -/// URL definition -static m_option_t stream_opts_fields[] = { - {"string", ST_OFF(filename), CONF_TYPE_STRING, 0, 0 ,0, NULL}, - {"filename", ST_OFF(filename2), CONF_TYPE_STRING, 0, 0 ,0, NULL}, - { NULL, NULL, 0, 0, 0, 0, NULL } -}; -static struct m_struct_st stream_opts = { - "file", - sizeof(struct stream_priv_s), - &stream_priv_dflts, - stream_opts_fields -}; - -static int fill_buffer(stream_t *s, char* buffer, int max_len){ - int r = read(s->fd,buffer,max_len); - return (r <= 0) ? -1 : r; -} - -static int write_buffer(stream_t *s, char* buffer, int len) { - int r = write(s->fd,buffer,len); - return (r <= 0) ? -1 : r; -} - -static int seek(stream_t *s,off_t newpos) { - s->pos = newpos; - if(lseek(s->fd,s->pos,SEEK_SET)<0) { - s->eof=1; - return 0; - } - return 1; -} - -static int seek_forward(stream_t *s,off_t newpos) { - if(newpos<s->pos){ - mp_msg(MSGT_STREAM,MSGL_INFO,"Cannot seek backward in linear streams!\n"); - return 0; - } - while(s->pos<newpos){ - int len=s->fill_buffer(s,s->buffer,STREAM_BUFFER_SIZE); - if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; break; } // EOF - s->buf_pos=0; - s->buf_len=len; - s->pos+=len; - } - return 1; -} - -static int open_f(stream_t *stream,int mode, void* opts, int* file_format) { - int f; - mode_t m = 0; - off_t len; - unsigned char *filename; - struct stream_priv_s* p = (struct stream_priv_s*)opts; - - if(mode == STREAM_READ) - m = O_RDONLY; - else if(mode == STREAM_WRITE) - m = O_WRONLY; - else { - mp_msg(MSGT_OPEN,MSGL_ERR, "[file] Unknown open mode %d\n",mode); - m_struct_free(&stream_opts,opts); - return STREAM_UNSUPORTED; - } - - if(p->filename) - filename = p->filename; - else if(p->filename2) - filename = p->filename2; - else - filename = NULL; - if(!filename) { - mp_msg(MSGT_OPEN,MSGL_ERR, "[file] No filename\n"); - m_struct_free(&stream_opts,opts); - return STREAM_ERROR; - } - -#if defined(__CYGWIN__)|| defined(__MINGW32__) - m |= O_BINARY; -#endif - - if(!strcmp(filename,"-")){ - if(mode == STREAM_READ) { - // read from stdin - mp_msg(MSGT_OPEN,MSGL_INFO,MSGTR_ReadSTDIN); - f=0; // 0=stdin -#ifdef __MINGW32__ - setmode(fileno(stdin),O_BINARY); -#endif - } else { - mp_msg(MSGT_OPEN,MSGL_INFO,"Writing to stdout\n"); - f=1; -#ifdef __MINGW32__ - setmode(fileno(stdout),O_BINARY); -#endif - } - } else { - f=open(filename,m); - if(f<0) { - mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_FileNotFound,filename); - m_struct_free(&stream_opts,opts); - return STREAM_ERROR; - } - } - - len=lseek(f,0,SEEK_END); lseek(f,0,SEEK_SET); -#ifdef __MINGW32__ - if(f==0 || len == -1) { -#else - if(len == -1) { -#endif - stream->seek = seek_forward; - stream->type = STREAMTYPE_STREAM; // Must be move to STREAMTYPE_FILE - stream->flags |= STREAM_SEEK_FW; - } else if(len >= 0) { - stream->seek = seek; - stream->end_pos = len; - stream->type = STREAMTYPE_FILE; - } - - mp_msg(MSGT_OPEN,MSGL_V,"[file] File size is %"PRId64" bytes\n", (int64_t)len); - - stream->fd = f; - stream->fill_buffer = fill_buffer; - stream->write_buffer = write_buffer; - - m_struct_free(&stream_opts,opts); - return STREAM_OK; -} - -stream_info_t stream_info_file = { - "File", - "file", - "Albeu", - "based on the code from ??? (probably Arpi)", - open_f, - { "file", "", NULL }, - &stream_opts, - 1 // Urls are an option string -}; |