From c655b2d499728a4871b4f68c4d0245fce322bdb5 Mon Sep 17 00:00:00 2001 From: ben Date: Sat, 7 Jun 2008 12:42:00 +0000 Subject: Add routine to determine if SPU has changed in dvdnav stream. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27016 b3059339-0415-0410-9bf9-f77b7e298cf2 --- stream/stream_dvdnav.c | 24 ++++++++++++++++++++++++ stream/stream_dvdnav.h | 1 + 2 files changed, 25 insertions(+) (limited to 'stream') diff --git a/stream/stream_dvdnav.c b/stream/stream_dvdnav.c index 0d3eedacf5..6734a388ea 100644 --- a/stream/stream_dvdnav.c +++ b/stream/stream_dvdnav.c @@ -32,6 +32,7 @@ typedef enum { NAV_FLAG_SPU_SET = 1 << 7, /* spu_clut is valid */ NAV_FLAG_STREAM_CHANGE = 1 << 8, /* title, chapter, audio or SPU */ NAV_FLAG_AUDIO_CHANGE = 1 << 9, /* audio stream change event */ + NAV_FLAG_SPU_CHANGE = 1 << 10, /* spu stream change event */ } dvdnav_state_t; typedef struct { @@ -334,6 +335,7 @@ static int fill_buffer(stream_t *s, char *but, int len) mp_msg(MSGT_CPLAYER,MSGL_INFO, "DVDNAV, switched to title: %d\r\n", vts_event->new_vtsN); priv->state |= NAV_FLAG_CELL_CHANGED; priv->state |= NAV_FLAG_AUDIO_CHANGE; + priv->state |= NAV_FLAG_SPU_CHANGE; priv->state &= ~NAV_FLAG_WAIT_SKIP; priv->state &= ~NAV_FLAG_WAIT; s->end_pos = 0; @@ -351,6 +353,7 @@ static int fill_buffer(stream_t *s, char *but, int len) case DVDNAV_CELL_CHANGE: { priv->state |= NAV_FLAG_CELL_CHANGED; priv->state |= NAV_FLAG_AUDIO_CHANGE; + priv->state |= NAV_FLAG_SPU_CHANGE; priv->state &= ~NAV_FLAG_WAIT_SKIP; priv->state &= ~NAV_FLAG_WAIT; if (priv->state & NAV_FLAG_WAIT_READ_AUTO) @@ -366,6 +369,9 @@ static int fill_buffer(stream_t *s, char *but, int len) case DVDNAV_AUDIO_STREAM_CHANGE: priv->state |= NAV_FLAG_AUDIO_CHANGE; break; + case DVDNAV_SPU_STREAM_CHANGE: + priv->state |= NAV_FLAG_SPU_CHANGE; + break; } } mp_msg(MSGT_STREAM,MSGL_DBG2,"DVDNAV fill_buffer len: %d\n",len); @@ -930,6 +936,24 @@ int mp_dvdnav_audio_has_changed (stream_t *stream, int clear) { return 1; } +/** + * \brief Check if SPU has changed + * \param stream: - stream pointer + * \param clear : - if true, then clear spu change flag + * \return 1 if spu has changed + */ +int mp_dvdnav_spu_has_changed (stream_t *stream, int clear) { + dvdnav_priv_t *priv = stream->priv; + + if (!(priv->state & NAV_FLAG_SPU_CHANGE)) + return 0; + + if (clear) + priv->state &= ~NAV_FLAG_SPU_CHANGE; + + return 1; +} + /* Notify if something has changed in stream * Can be related to title, chapter, audio or SPU */ diff --git a/stream/stream_dvdnav.h b/stream/stream_dvdnav.h index 7185acaa59..ff9c1796ef 100644 --- a/stream/stream_dvdnav.h +++ b/stream/stream_dvdnav.h @@ -32,6 +32,7 @@ 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_audio_has_changed (stream_t *stream, int clear); +int mp_dvdnav_spu_has_changed (stream_t *stream, int clear); int mp_dvdnav_stream_has_changed (stream_t *stream); #endif /* MPLAYER_STREAM_DVDNAV_H */ -- cgit v1.2.3