summaryrefslogtreecommitdiffstats
path: root/stream/stream_dvdnav.c
diff options
context:
space:
mode:
authornicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-08-19 11:49:04 +0000
committernicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-08-19 11:49:04 +0000
commit26ea4d52e49927168ead18001278b6923dd0311c (patch)
tree97b0e283574df0adbb5daa37cc2e0f39864b2433 /stream/stream_dvdnav.c
parent539b7600616595a6a561a2cdf052ea006625aae7 (diff)
downloadmpv-26ea4d52e49927168ead18001278b6923dd0311c.tar.bz2
mpv-26ea4d52e49927168ead18001278b6923dd0311c.tar.xz
implemented seeking to chapter
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19449 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'stream/stream_dvdnav.c')
-rw-r--r--stream/stream_dvdnav.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/stream/stream_dvdnav.c b/stream/stream_dvdnav.c
index ea3dce1efb..2aeffc94df 100644
--- a/stream/stream_dvdnav.c
+++ b/stream/stream_dvdnav.c
@@ -345,6 +345,34 @@ static int fill_buffer(stream_t *s, char *but, int len)
return len;
}
+static int control(stream_t *stream, int cmd, void* arg) {
+ dvdnav_priv_t* dvdnav_priv=stream->priv;
+ int tit, part;
+
+ switch(cmd)
+ {
+ case STREAM_CTRL_SEEK_TO_CHAPTER:
+ {
+ int chap = *((unsigned int *)arg)+1;
+
+ if(chap < 1 || dvdnav_current_title_info(dvdnav_priv->dvdnav, &tit, &part) != DVDNAV_STATUS_OK)
+ break;
+ if(dvdnav_part_play(dvdnav_priv->dvdnav, tit, chap) != DVDNAV_STATUS_OK)
+ break;
+ return 1;
+ }
+ case STREAM_CTRL_GET_CURRENT_CHAPTER:
+ {
+ if(dvdnav_current_title_info(dvdnav_priv->dvdnav, &tit, &part) != DVDNAV_STATUS_OK)
+ break;
+ *((unsigned int *)arg) = part - 1;
+ return 1;
+ }
+ }
+
+ return STREAM_UNSUPORTED;
+}
+
static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
struct stream_priv_s* p = (struct stream_priv_s*)opts;
char *filename;
@@ -372,6 +400,7 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
stream->flags = STREAM_READ | STREAM_SEEK;
stream->fill_buffer = fill_buffer;
stream->seek = seek;
+ stream->control = control;
stream->close = stream_dvdnav_close;
stream->type = STREAMTYPE_DVDNAV;
stream->priv=(void*)dvdnav_priv;