[vlc-devel] [PATCH] add controls tweaking modules

Francois Cartegnie fcvlcdev at free.fr
Fri Jul 17 21:18:45 CEST 2015


Because we have too many access/demux misbehaving with
seekable and non seekable cases, some developers only
options could be really useful.

module built only using invisible configure option
--enable-devtools
---
 configure.ac                          |   6 ++
 modules/stream_filter/Makefile.am     |   5 ++
 modules/stream_filter/tweakcontrols.c | 107 ++++++++++++++++++++++++++++++++++
 3 files changed, 118 insertions(+)
 create mode 100644 modules/stream_filter/tweakcontrols.c

diff --git a/configure.ac b/configure.ac
index b82f197..0dee8c5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -897,6 +897,12 @@ AS_IF([test "${enable_debug}" != "no"], [
 ])
 
 dnl
+dnl  Developers helper modules
+dnl
+AC_ARG_ENABLE(DEVTOOLS)
+AM_CONDITIONAL(DEVTOOLS, [test "$enable_devtools" = "yes"])
+
+dnl
 dnl  Profiling
 dnl
 AC_ARG_ENABLE(gprof,
diff --git a/modules/stream_filter/Makefile.am b/modules/stream_filter/Makefile.am
index bab3ddb..8192f0c 100644
--- a/modules/stream_filter/Makefile.am
+++ b/modules/stream_filter/Makefile.am
@@ -36,3 +36,8 @@ libaribcam_plugin_la_LDFLAGS = $(AM_LDFLAGS) $(ARIBB25_LDFLAGS) -rpath '$(stream
 libaribcam_plugin_la_LIBADD = $(ARIBB25_LIBS)
 stream_filter_LTLIBRARIES += $(LTLIBaribcam)
 EXTRA_LTLIBRARIES += libaribcam_plugin.la
+
+libtweakcontrols_plugin_la_SOURCES = stream_filter/tweakcontrols.c
+if DEVTOOLS
+stream_filter_LTLIBRARIES += libtweakcontrols_plugin.la
+endif
diff --git a/modules/stream_filter/tweakcontrols.c b/modules/stream_filter/tweakcontrols.c
new file mode 100644
index 0000000..6b6f0b2
--- /dev/null
+++ b/modules/stream_filter/tweakcontrols.c
@@ -0,0 +1,107 @@
+/*****************************************************************************
+ * tweakcontrols.c Access controls tweaking debug stream filter
+ *****************************************************************************
+ * Copyright (C) 2015 VideoLAN Authors
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_plugin.h>
+#include <vlc_stream.h>
+
+static int  Open(vlc_object_t *);
+static void Close(vlc_object_t *);
+
+vlc_module_begin ()
+    set_category (CAT_INPUT)
+    set_subcategory (SUBCAT_INPUT_STREAM_FILTER)
+    set_capability ("stream_filter", 0)
+    add_shortcut("tweakcontrols")
+    set_description ("Access controls tweaking debug stream filter")
+    set_callbacks (Open, Close)
+
+    add_bool ("seek", true, "CAN_SEEK", NULL, false)
+    add_bool ("fastseek", true, "CAN_FASTSEEK", NULL, false)
+vlc_module_end ()
+
+struct stream_sys_t
+{
+    bool b_seek;
+    bool b_fastseek;
+};
+
+/**
+ *
+ */
+static int Control( stream_t *p_stream, int i_query, va_list args )
+{
+    stream_sys_t *p_sys = p_stream->p_sys;
+
+    switch( i_query )
+    {
+    case STREAM_CAN_FASTSEEK:
+        if( !p_sys->b_fastseek )
+            return VLC_EGENERIC;
+        break;
+    case STREAM_CAN_SEEK:
+    case STREAM_SET_POSITION:
+        if( !p_sys->b_seek )
+            return VLC_EGENERIC;
+        // ft
+    default:
+        break;
+    }
+
+    return stream_vaControl( p_stream->p_source, i_query, args );
+}
+
+static int Read( stream_t *s, void *buffer, unsigned i_read )
+{
+    return s->p_source->pf_read( s->p_source, buffer, i_read );
+}
+
+static int Peek( stream_t *s, const uint8_t **pp_peek, unsigned i_peek )
+{
+    return s->p_source->pf_peek( s->p_source, pp_peek, i_peek );
+}
+
+static int Open( vlc_object_t *p_object )
+{
+    stream_t *p_stream = (stream_t *) p_object;
+
+    stream_sys_t *p_sys = p_stream->p_sys = calloc( 1, sizeof(*p_sys) );
+    if (p_sys == NULL)
+        return VLC_ENOMEM;
+
+    p_stream->pf_read = Read;
+    p_stream->pf_peek = Peek;
+    p_stream->pf_control = Control;
+
+    return VLC_SUCCESS;
+}
+
+static void Close ( vlc_object_t *p_object )
+{
+    stream_t *p_stream = (stream_t *)p_object;
+    free( p_stream->p_sys );
+}
-- 
2.4.3




More information about the vlc-devel mailing list