diff --git a/stream/stream_dvdnav.c b/stream/stream_dvdnav.c index 8893c6becc..641a8ad676 100644 --- a/stream/stream_dvdnav.c +++ b/stream/stream_dvdnav.c @@ -179,6 +179,11 @@ static int dvdnav_stream_read(dvdnav_priv_t * priv, unsigned char *buf, int *len priv->duration = ev->pgc_length/90; break; } + case DVDNAV_SPU_CLUT_CHANGE: { + memcpy(priv->spu_clut, buf, 16*sizeof(unsigned int)); + priv->spu_set = 1; + break; + } case DVDNAV_WAIT: dvdnav_wait_skip(priv->dvdnav); break; @@ -511,6 +516,12 @@ int dvdnav_number_of_subs(stream_t *stream) { return n; } +unsigned int *mp_dvdnav_get_spu_clut(stream_t *stream) { + dvdnav_priv_t *priv=(dvdnav_priv_t*)stream->priv; + if(!priv->spu_set) return NULL; + return priv->spu_clut; +} + void mp_dvdnav_get_highlight (stream_t *stream, nav_highlight_t *hl) { dvdnav_priv_t *priv = (dvdnav_priv_t *) stream->priv; dvdnav_highlight_event_t hlev = priv->hlev; diff --git a/stream/stream_dvdnav.h b/stream/stream_dvdnav.h index 46a3a2f32d..726187ec40 100644 --- a/stream/stream_dvdnav.h +++ b/stream/stream_dvdnav.h @@ -24,6 +24,7 @@ typedef struct { unsigned int duration; /* in milliseconds */ int mousex, mousey; int title; + unsigned int spu_clut[16], spu_set; dvdnav_highlight_event_t hlev; } dvdnav_priv_t; @@ -33,5 +34,6 @@ int dvdnav_sid_from_lang(stream_t *stream, unsigned char *language); int mp_dvdnav_handle_input(stream_t *stream, int cmd, int *button); void mp_dvdnav_update_mouse_pos(stream_t *stream, int32_t x, int32_t y, int* button); void mp_dvdnav_get_highlight (stream_t *stream, nav_highlight_t *hl); +unsigned int *mp_dvdnav_get_spu_clut(stream_t *stream); #endif