# HG changeset patch # User nicodvb # Date 1222463821 0 # Node ID 22bdd7ba8892a8489a9401a9fd2ab34b2ecdc0cf # Parent 9d0094f6cdf60dbb019390383efe3b9a2c7a11e5 slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com diff -r 9d0094f6cdf6 -r 22bdd7ba8892 DOCS/tech/slave.txt --- a/DOCS/tech/slave.txt Thu Sep 25 17:42:56 2008 +0000 +++ b/DOCS/tech/slave.txt Fri Sep 26 21:17:01 2008 +0000 @@ -478,6 +478,7 @@ stream_end pos 0 X end pos in stream stream_length pos 0 X (end - start) chapter int 0 X X X select chapter +chapters int X number of chapters angle int 0 X X X select angle length time X length of file in seconds percent_pos int 0 100 X X X position in percent diff -r 9d0094f6cdf6 -r 22bdd7ba8892 command.c --- a/command.c Thu Sep 25 17:42:56 2008 +0000 +++ b/command.c Fri Sep 26 21:17:01 2008 +0000 @@ -447,6 +447,17 @@ return M_PROPERTY_OK; } +/// Number of chapters in file +static int mp_property_chapters(m_option_t *prop, int action, void *arg, + MPContext *mpctx) +{ + if (!mpctx->demuxer) + return M_PROPERTY_UNAVAILABLE; + if (mpctx->demuxer->num_chapters == 0) + stream_control(mpctx->demuxer->stream, STREAM_CTRL_GET_NUM_CHAPTERS, &mpctx->demuxer->num_chapters); + return m_property_int_ro(prop, action, arg, mpctx->demuxer->num_chapters); +} + /// Current dvd angle (RW) static int mp_property_angle(m_option_t *prop, int action, void *arg, MPContext *mpctx) @@ -1983,6 +1994,8 @@ M_OPT_MIN, 0, 0, NULL }, { "chapter", mp_property_chapter, CONF_TYPE_INT, M_OPT_MIN, 1, 0, NULL }, + { "chapters", mp_property_chapters, CONF_TYPE_INT, + 0, 0, 0, NULL }, { "angle", mp_property_angle, CONF_TYPE_INT, CONF_RANGE, -2, 10, NULL }, { "metadata", mp_property_metadata, CONF_TYPE_STRING_LIST, diff -r 9d0094f6cdf6 -r 22bdd7ba8892 mplayer.c --- a/mplayer.c Thu Sep 25 17:42:56 2008 +0000 +++ b/mplayer.c Fri Sep 26 21:17:01 2008 +0000 @@ -3531,6 +3531,11 @@ } mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_LENGTH=%.2lf\n", demuxer_get_time_length(mpctx->demuxer)); mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_SEEKABLE=%d\n", mpctx->stream->seek ? 1 : 0); + if (mpctx->demuxer) { + if (mpctx->demuxer->num_chapters == 0) + stream_control(mpctx->demuxer->stream, STREAM_CTRL_GET_NUM_CHAPTERS, &mpctx->demuxer->num_chapters); + mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_CHAPTERS=%d\n", mpctx->demuxer->num_chapters); + } if(!mpctx->sh_video) goto main; // audio-only