summaryrefslogtreecommitdiffstats
path: root/stream.c
diff options
context:
space:
mode:
authorarpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-05-03 23:32:56 +0000
committerarpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-05-03 23:32:56 +0000
commit01df02c62ca0eb4216a693ce3141f245cb8dd6ff (patch)
treeebfbfefac23576547d965f1d0a9b318b5dcd58a9 /stream.c
parentdc776b2b5cdddfdf67e90565a8d838259480b101 (diff)
downloadmpv-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.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/stream.c b/stream.c
index dcfdaab74c..5f69194f16 100644
--- a/stream.c
+++ b/stream.c
@@ -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 {