[vlc-devel] [vlc-commits] input: Allow demux_filter to be enabled/disabled

Rémi Denis-Courmont remi at remlab.net
Tue Sep 19 12:37:56 CEST 2017


Le 19 septembre 2017 12:49:07 GMT+03:00, "Hugo Beauzée-Luyssen" <git at videolan.org> a écrit :
>vlc | branch: master | Hugo Beauzée-Luyssen <hugo at beauzee.fr> | Wed Jun
>21 13:08:49 2017 +0200| [32354048266539ff1b8ef6bae8ebe72cfd7de48b] |
>committer: Hugo Beauzée-Luyssen
>
>input: Allow demux_filter to be enabled/disabled
>
>refs #18605
>
>>
>http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=32354048266539ff1b8ef6bae8ebe72cfd7de48b
>---
>
> include/vlc_demux.h |  7 +++++++
> src/input/demux.c   | 30 ++++++++++++++++++++++++++++++
> src/input/demux.h   |  2 ++
> src/input/input.c   | 10 ++++++++++
> 4 files changed, 49 insertions(+)
>
>diff --git a/include/vlc_demux.h b/include/vlc_demux.h
>index 4905d3e8a8..f359f547fa 100644
>--- a/include/vlc_demux.h
>+++ b/include/vlc_demux.h
>@@ -323,6 +323,13 @@ enum demux_query_e
>     DEMUX_NAV_POPUP,
>     /** Activate disc Root Menu. Can fail */
>     DEMUX_NAV_MENU,            /* res=can fail */
>+    /** Enable/Disable a demux filter
>+     * \warning This has limited support, and is likely to break if
>more than
>+     * a single demux_filter is present in the chain. This is not
>guaranteed to
>+     * work in future VLC versions, nor with all demux filters
>+     */
>+    DEMUX_FILTER_ENABLE,
>+    DEMUX_FILTER_DISABLE
> };
> 
>/*************************************************************************
>diff --git a/src/input/demux.c b/src/input/demux.c
>index 93a65e6b92..9aafc92791 100644
>--- a/src/input/demux.c
>+++ b/src/input/demux.c
>@@ -487,6 +487,8 @@ int demux_vaControlHelper( stream_t *s,
>         case DEMUX_NAV_RIGHT:
>         case DEMUX_NAV_POPUP:
>         case DEMUX_NAV_MENU:
>+        case DEMUX_FILTER_ENABLE:
>+        case DEMUX_FILTER_DISABLE:
>             return VLC_EGENERIC;
> 
>         case DEMUX_SET_TITLE:
>@@ -629,3 +631,31 @@ demux_t *demux_FilterChainNew( demux_t *p_demux,
>const char *psz_chain )
> 
>     return p_demux;
> }
>+
>+static bool demux_filter_enable_disable( demux_t *p_demux_chain,
>+                                          const char* psz_demux, bool
>b_enable )
>+{
>+    demux_t *p_demux = p_demux_chain;
>+    while ( p_demux )
>+    {
>+        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 )
>+        {
>+            demux_Control( p_demux,
>+                           b_enable ? DEMUX_FILTER_ENABLE :
>DEMUX_FILTER_DISABLE );
>+            return true;
>+        }
>+        p_demux = p_demux->p_next;
>+    }
>+    return false;
>+}
>+
>+bool demux_FilterEnable( demux_t *p_demux_chain, const char* psz_demux
>)
>+{
>+    return demux_filter_enable_disable( p_demux_chain, psz_demux, true
>);
>+}
>+
>+bool demux_FilterDisable( demux_t *p_demux_chain, const char*
>psz_demux )
>+{
>+    return demux_filter_enable_disable( p_demux_chain, psz_demux,
>false );
>+}
>diff --git a/src/input/demux.h b/src/input/demux.h
>index 25c9520de2..5a6d63a6ef 100644
>--- a/src/input/demux.h
>+++ b/src/input/demux.h
>@@ -41,5 +41,7 @@ int demux_GetTitle( demux_t * );
> int demux_GetSeekpoint( demux_t * );
> 
>demux_t *demux_FilterChainNew( demux_t *p_demux, const char *psz_name
>);
>+bool demux_FilterEnable( demux_t *p_demux_chain, const char* psz_demux
>);
>+bool demux_FilterDisable( demux_t *p_demux_chain, const char*
>psz_demux );
> 
> #endif
>diff --git a/src/input/input.c b/src/input/input.c
>index 542aa51475..b7a3de5315 100644
>--- a/src/input/input.c
>+++ b/src/input/input.c
>@@ -1871,6 +1871,16 @@ static void ControlUpdateSout( input_thread_t
>*p_input, const char* psz_chain )
>es_out_Control( input_priv(p_input)->p_es_out, ES_OUT_RESTART_ALL_ES );
> }
> 
>+static void ControlInsertDemuxFilter( input_thread_t* p_input, const
>char* psz_demux_chain )
>+{
>+    input_source_t *p_inputSource = input_priv(p_input)->master;
>+    demux_t *p_filtered_demux = demux_FilterChainNew(
>p_inputSource->p_demux, psz_demux_chain );
>+    if ( p_filtered_demux != NULL )
>+        p_inputSource->p_demux = p_filtered_demux;
>+    else if ( psz_demux_chain != NULL )
>+        msg_Dbg(p_input, "Failed to create demux filter %s",
>psz_demux_chain);
>+}
>+
> static bool Control( input_thread_t *p_input,
>                      int i_type, vlc_value_t val )
> {
>
>_______________________________________________
>vlc-commits mailing list
>vlc-commits at videolan.org
>https://mailman.videolan.org/listinfo/vlc-commits

this violates the thread and memory model. please revert
-- 
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.


More information about the vlc-devel mailing list