summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-08-20 20:18:27 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-08-20 20:18:27 +0000
commit9b1d38b5265077fc1ab23c86ffc0a7a0bf16efb3 (patch)
treece4a21674b8a94968bc2acaf4ada934d6ed1db0d
parent085e5889ecd1f528863739b580cb2c3c96322a88 (diff)
downloadmpv-9b1d38b5265077fc1ab23c86ffc0a7a0bf16efb3.tar.bz2
mpv-9b1d38b5265077fc1ab23c86ffc0a7a0bf16efb3.tar.xz
seeking in DVD
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1596 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--stream.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/stream.c b/stream.c
index 9c3bef8b18..c18c1fc081 100644
--- a/stream.c
+++ b/stream.c
@@ -20,6 +20,11 @@ extern int verbose; // defined in mplayer.c
#include "vcd_read.c"
#endif
+#ifdef USE_DVDREAD
+int dvd_read_sector(void* d,void* p2);
+void dvd_seek(void* d,off_t pos);
+#endif
+
//=================== STREAMER =========================
int stream_fill_buffer(stream_t *s){
@@ -35,6 +40,16 @@ int stream_fill_buffer(stream_t *s){
#else
len=vcd_read(s->fd,s->buffer);break;
#endif
+#ifdef USE_DVDREAD
+ case STREAMTYPE_DVD: {
+ off_t pos=dvd_read_sector(s->priv,s->buffer);
+ if(pos>=0){
+ len=2048; // full sector
+ s->pos=2048*pos-len;
+ } else len=-1; // error
+ break;
+ }
+#endif
default: len=0;
}
if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; return 0; }
@@ -72,6 +87,8 @@ if(verbose>=3){
#endif
case STREAMTYPE_VCD:
newpos=(pos/VCD_SECTOR_DATA)*VCD_SECTOR_DATA;break;
+ case STREAMTYPE_DVD:
+ newpos=pos/2048; newpos*=2048; break;
}
pos-=newpos;
@@ -90,6 +107,12 @@ if(newpos==0 || newpos!=s->pos){
vcd_set_msf(s->pos/VCD_SECTOR_DATA);
#endif
break;
+#ifdef USE_DVDREAD
+ case STREAMTYPE_DVD:
+ s->pos=newpos; // real seek
+ dvd_seek(s->priv,s->pos/2048);
+ break;
+#endif
case STREAMTYPE_STREAM:
//s->pos=newpos; // real seek
if(newpos<s->pos){