[vlc-devel] [RFC PATCH 8/8] demux: Disable demux filters before removing them from the chain
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Thu Jul 6 19:14:31 CEST 2017
---
include/vlc_demux.h | 2 ++
modules/stream_out/chromecast/chromecast_demux.cpp | 3 +++
src/input/demux.c | 8 ++++++++
3 files changed, 13 insertions(+)
diff --git a/include/vlc_demux.h b/include/vlc_demux.h
index 4905d3e8a8..fcd39d3b8f 100644
--- a/include/vlc_demux.h
+++ b/include/vlc_demux.h
@@ -323,6 +323,8 @@ enum demux_query_e
DEMUX_NAV_POPUP,
/** Activate disc Root Menu. Can fail */
DEMUX_NAV_MENU, /* res=can fail */
+ /** Disable a demux filter */
+ DEMUX_FILTER_DISABLE
};
/*************************************************************************
diff --git a/modules/stream_out/chromecast/chromecast_demux.cpp b/modules/stream_out/chromecast/chromecast_demux.cpp
index 06536d1a27..cf1962f817 100644
--- a/modules/stream_out/chromecast/chromecast_demux.cpp
+++ b/modules/stream_out/chromecast/chromecast_demux.cpp
@@ -249,6 +249,9 @@ static int Control( demux_t *p_demux_filter, int i_query, va_list args)
p_sys->setPauseState( paused != 0 );
break;
}
+ case DEMUX_FILTER_DISABLE:
+ demux_Control( p_demux_filter->p_next, DEMUX_SET_TIME, p_sys->getPlaybackTime() );
+ return VLC_SUCCESS;
}
return demux_vaControl( p_demux_filter->p_next, i_query, args );
diff --git a/src/input/demux.c b/src/input/demux.c
index d85eb0fd53..a9d4f509ae 100644
--- a/src/input/demux.c
+++ b/src/input/demux.c
@@ -482,6 +482,7 @@ int demux_vaControlHelper( stream_t *s,
case DEMUX_NAV_RIGHT:
case DEMUX_NAV_POPUP:
case DEMUX_NAV_MENU:
+ case DEMUX_FILTER_DISABLE:
return VLC_EGENERIC;
case DEMUX_SET_TITLE:
@@ -729,6 +730,12 @@ demux_t *demux_FilterRemoveFromChain( demux_t *p_demux_chain, const char* psz_de
if( strcmp( module_get_name( p_demux->p_module, false ), psz_demux) == 0 ||
strcmp( module_get_name( p_demux->p_module, true ), psz_demux ) == 0 )
{
+ if( demux_IsDemuxFilter( p_demux ) == false )
+ {
+ msg_Warn( p_demux_chain, "Can't remove non demux filter module "
+ "%s from the chain", psz_demux );
+ return p_demux_chain;
+ }
demux_t* p_ret = NULL;
if( p_prev == NULL )
p_ret = p_demux->p_next;
@@ -737,6 +744,7 @@ demux_t *demux_FilterRemoveFromChain( demux_t *p_demux_chain, const char* psz_de
p_prev->p_next = p_demux->p_next;
p_ret = p_demux_chain;
}
+ demux_Control( p_demux, DEMUX_FILTER_DISABLE );
module_unneed( p_demux, p_demux->p_module );
vlc_object_release( p_demux );
return p_ret;
--
2.11.0
More information about the vlc-devel
mailing list