diff options
author | ben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-01-26 16:17:44 +0000 |
---|---|---|
committer | ben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-01-26 16:17:44 +0000 |
commit | 6230aab9bff3edf1067bef8b3675eeaee050af64 (patch) | |
tree | aee2f2d1297b3bd4a9f7f8ecc6e4260223768575 | |
parent | 923c1f08ca067ace18fbea86bba94d7c62edfd50 (diff) | |
download | mpv-6230aab9bff3edf1067bef8b3675eeaee050af64.tar.bz2 mpv-6230aab9bff3edf1067bef8b3675eeaee050af64.tar.xz |
add a new state flag to dvdnav in order to notify if
something has changed in the current stream (being title, chapter,
audio layer or SPU one)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25858 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | stream/stream_dvdnav.c | 20 | ||||
-rw-r--r-- | stream/stream_dvdnav.h | 1 |
2 files changed, 21 insertions, 0 deletions
diff --git a/stream/stream_dvdnav.c b/stream/stream_dvdnav.c index 1bb3a17210..76d5ade3df 100644 --- a/stream/stream_dvdnav.c +++ b/stream/stream_dvdnav.c @@ -30,6 +30,7 @@ typedef enum { NAV_FLAG_WAIT_READ = 1 << 5, /* suspend read from stream */ NAV_FLAG_VTS_DOMAIN = 1 << 6, /* vts domain */ NAV_FLAG_SPU_SET = 1 << 7, /* spu_clut is valid */ + NAV_FLAG_STREAM_CHANGE = 1 << 8, /* title, chapter, audio or SPU */ } dvdnav_state_t; typedef struct { @@ -198,6 +199,7 @@ static int dvdnav_stream_read(dvdnav_priv_t * priv, unsigned char *buf, int *len uint32_t nextstill; priv->state &= ~NAV_FLAG_WAIT_SKIP; + priv->state |= NAV_FLAG_STREAM_CHANGE; if(ev->pgc_length) priv->duration = ev->pgc_length/90; @@ -233,6 +235,11 @@ static int dvdnav_stream_read(dvdnav_priv_t * priv, unsigned char *buf, int *len } case DVDNAV_VTS_CHANGE: { priv->state &= ~NAV_FLAG_WAIT_SKIP; + priv->state |= NAV_FLAG_STREAM_CHANGE; + break; + } + case DVDNAV_SPU_STREAM_CHANGE: { + priv->state |= NAV_FLAG_STREAM_CHANGE; break; } } @@ -899,9 +906,22 @@ int mp_dvdnav_cell_has_changed (stream_t *stream, int clear) { return 0; if (clear) priv->state &= ~NAV_FLAG_CELL_CHANGED; + if (clear) priv->state |= NAV_FLAG_STREAM_CHANGE; return 1; } +/* Notify if something has changed in stream + * Can be related to title, chapter, audio or SPU + */ +int mp_dvdnav_stream_has_changed (stream_t *stream) { + dvdnav_priv_t *priv = stream->priv; + + if (!(priv->state & NAV_FLAG_STREAM_CHANGE)) + return 0; + + priv->state &= ~NAV_FLAG_STREAM_CHANGE; + return 1; +} const stream_info_t stream_info_dvdnav = { "DVDNAV stream", diff --git a/stream/stream_dvdnav.h b/stream/stream_dvdnav.h index d0536fe830..4b9d71e6d8 100644 --- a/stream/stream_dvdnav.h +++ b/stream/stream_dvdnav.h @@ -27,5 +27,6 @@ int mp_dvdnav_skip_still (stream_t *stream); int mp_dvdnav_skip_wait (stream_t *stream); void mp_dvdnav_read_wait (stream_t *stream, int mode, int automode); int mp_dvdnav_cell_has_changed (stream_t *stream, int clear); +int mp_dvdnav_stream_has_changed (stream_t *stream); #endif /* MPLAYER_STREAM_DVDNAV_H */ |