summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--stream/stream_dvdnav.c14
-rw-r--r--stream/stream_dvdnav.h1
2 files changed, 15 insertions, 0 deletions
diff --git a/stream/stream_dvdnav.c b/stream/stream_dvdnav.c
index 66e4d8bd72..475a53d408 100644
--- a/stream/stream_dvdnav.c
+++ b/stream/stream_dvdnav.c
@@ -216,6 +216,12 @@ int dvdnav_stream_read(dvdnav_priv_t * dvdnav_priv, unsigned char *buf, int *len
break;
}
+ case DVDNAV_CELL_CHANGE: {
+ dvdnav_cell_change_event_t *ev = (dvdnav_cell_change_event_t*)buf;
+ if(ev->pgc_length)
+ dvdnav_priv->duration = ev->pgc_length/90;
+ break;
+ }
case DVDNAV_WAIT:
dvdnav_wait_skip(dvdnav_priv->dvdnav);
break;
@@ -357,6 +363,14 @@ static int control(stream_t *stream, int cmd, void* arg) {
*((unsigned int *)arg) = part - 1;
return 1;
}
+ case STREAM_CTRL_GET_TIME_LENGTH:
+ {
+ if(dvdnav_priv->duration)
+ {
+ *((unsigned int *)arg) = dvdnav_priv->duration;
+ return 1;
+ }
+ }
}
return STREAM_UNSUPORTED;
diff --git a/stream/stream_dvdnav.h b/stream/stream_dvdnav.h
index fdea2d97f6..ab93bc02b4 100644
--- a/stream/stream_dvdnav.h
+++ b/stream/stream_dvdnav.h
@@ -18,6 +18,7 @@ typedef struct {
int started; /* Has mplayer initialization finished? */
unsigned char prebuf[STREAM_BUFFER_SIZE]; /* prefill buffer */
int prelen; /* length of prefill buffer */
+ unsigned int duration; /* in milliseconds */
} dvdnav_priv_t;
extern int dvd_nav_still;