diff options
author | arpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-05-03 23:32:56 +0000 |
---|---|---|
committer | arpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-05-03 23:32:56 +0000 |
commit | 01df02c62ca0eb4216a693ce3141f245cb8dd6ff (patch) | |
tree | ebfbfefac23576547d965f1d0a9b318b5dcd58a9 /stream.c | |
parent | dc776b2b5cdddfdf67e90565a8d838259480b101 (diff) | |
download | mpv-01df02c62ca0eb4216a693ce3141f245cb8dd6ff.tar.bz2 mpv-01df02c62ca0eb4216a693ce3141f245cb8dd6ff.tar.xz |
allow playing from stdin
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@693 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'stream.c')
-rw-r--r-- | stream.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -24,6 +24,7 @@ int stream_fill_buffer(stream_t *s){ if(s->eof){ s->buf_pos=s->buf_len=0; return 0; } switch(s->type){ case STREAMTYPE_FILE: + case STREAMTYPE_STREAM: len=read(s->fd,s->buffer,STREAM_BUFFER_SIZE);break; case STREAMTYPE_VCD: #ifdef VCD_CACHE @@ -55,6 +56,7 @@ if(verbose>=3){ switch(s->type){ case STREAMTYPE_FILE: + case STREAMTYPE_STREAM: newpos=pos&(~(STREAM_BUFFER_SIZE-1));break; case STREAMTYPE_VCD: newpos=(pos/VCD_SECTOR_DATA)*VCD_SECTOR_DATA;break; @@ -63,18 +65,29 @@ if(verbose>=3){ pos-=newpos; if(newpos==0 || newpos!=s->pos){ - s->pos=newpos; // real seek switch(s->type){ case STREAMTYPE_FILE: + s->pos=newpos; // real seek if(lseek(s->fd,s->pos,SEEK_SET)<0) s->eof=1; break; case STREAMTYPE_VCD: + s->pos=newpos; // real seek #ifdef VCD_CACHE vcd_cache_seek(s->pos/VCD_SECTOR_DATA); #else vcd_set_msf(s->pos/VCD_SECTOR_DATA); #endif break; + case STREAMTYPE_STREAM: + //s->pos=newpos; // real seek + if(newpos<s->pos){ + printf("Cannot seek backward in linear streams!\n"); + return 1; + } + while(s->pos<newpos){ + if(stream_fill_buffer(s)<=0) break; // EOF + } + break; } // putchar('.');fflush(stdout); //} else { |