summaryrefslogtreecommitdiffstats
path: root/libmpdemux/stream_file.c
diff options
context:
space:
mode:
authorben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-07-31 17:39:17 +0000
committerben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-07-31 17:39:17 +0000
commit49867bd432352d19172ab26cf873bd5651e69e25 (patch)
treec2d419bb4f81564036baa12832a44b8aac27c6d1 /libmpdemux/stream_file.c
parentd3b998da64927403879ad588287c178f86b7c849 (diff)
downloadmpv-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.c162
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
-};