diff options
author | nicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-08-19 11:49:04 +0000 |
---|---|---|
committer | nicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-08-19 11:49:04 +0000 |
commit | 26ea4d52e49927168ead18001278b6923dd0311c (patch) | |
tree | 97b0e283574df0adbb5daa37cc2e0f39864b2433 /stream/stream_dvdnav.c | |
parent | 539b7600616595a6a561a2cdf052ea006625aae7 (diff) | |
download | mpv-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.c | 29 |
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; |