add controls tweaking modules
authorFrancois Cartegnie <fcvlcdev@free.fr>
Fri, 17 Jul 2015 19:14:15 +0000 (21:14 +0200)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Fri, 28 Aug 2015 15:38:31 +0000 (17:38 +0200)
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
modules/MODULES_LIST
modules/stream_filter/Makefile.am
modules/stream_filter/accesstweaks.c [new file with mode: 0644]

index d38f8e8..3ec70c3 100644 (file)
@@ -3970,6 +3970,13 @@ AS_IF([test "${enable_taglib}" != "no"], [
     AC_MSG_WARN([${TAGLIB_PKG_ERRORS}.])])
 ])
 
+dnl
+dnl  Developers helper modules (should be hidden from configure help)
+dnl
+AC_ARG_ENABLE(devtools, [], [], [enable_devtools="no"])
+AS_IF([test "${enable_devtools}" != "no"], [
+  VLC_ADD_PLUGIN([accesstweaks])
+])
 
 dnl
 dnl update checking system
index 4595acd..deb1a77 100644 (file)
@@ -22,6 +22,7 @@ $Id$
  * access_output_udp: UDP Network access_output module
  * access_realrtsp: Real RTSP access
  * access_wasapi: WASAPI audio input
+ * accesstweaks: access control tweaking module (dev tool)
  * adaptative: Unified adaptative streaming module (DASH/HLS)
  * addonsfsstorage: Local storage extensions repository
  * addonsvorepository: Videolan extensions repository
index 9b90d60..8480620 100644 (file)
@@ -42,3 +42,9 @@ 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
+
+libaccesstweaks_plugin_la_SOURCES = stream_filter/accesstweaks.c
+libaccesstweaks_plugin_la_CFLAGS = $(AM_CFLAGS)
+libaccesstweaks_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(stream_filterdir)'
+stream_filter_LTLIBRARIES += $(LTLIBaccesstweaks)
+EXTRA_LTLIBRARIES += libaccesstweaks_plugin.la
diff --git a/modules/stream_filter/accesstweaks.c b/modules/stream_filter/accesstweaks.c
new file mode 100644 (file)
index 0000000..ce51f95
--- /dev/null
@@ -0,0 +1,115 @@
+/*****************************************************************************
+ * accesstweaks.c Access controls tweaking 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_shortname("accesstweaks")
+    set_category (CAT_INPUT)
+    set_subcategory (SUBCAT_INPUT_STREAM_FILTER)
+    set_capability ("stream_filter", 0)
+    /* Developers only module, no translation please */
+    set_description ("Access controls tweaking")
+    set_callbacks (Open, Close)
+
+    add_bool ("seek", true, "forces result of the CAN_SEEK control", NULL, false)
+        change_volatile ()
+    add_bool ("fastseek", true, "forces result of the CAN_FASTSEEK control", NULL, false)
+        change_volatile ()
+    add_shortcut("tweaks")
+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 || !p_sys->b_seek )
+        {
+            *((bool*)va_arg( args, bool* )) = false;
+            return VLC_SUCCESS;
+        }
+        break;
+    case STREAM_CAN_SEEK:
+    case STREAM_SET_POSITION:
+        if( !p_sys->b_seek )
+        {
+            *((bool*)va_arg( args, bool* )) = false;
+            return VLC_SUCCESS;
+        }
+        break;
+
+    default:
+        break;
+    }
+
+    return stream_vaControl( p_stream->p_source, i_query, args );
+}
+
+static ssize_t Read( stream_t *s, void *buffer, size_t i_read )
+{
+    return stream_Read( s->p_source, buffer, i_read );
+}
+
+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 = malloc( sizeof(*p_sys) );
+    if (unlikely(p_sys == NULL))
+        return VLC_ENOMEM;
+
+    p_sys->b_seek = var_InheritBool( p_stream, "seek" );
+    p_sys->b_fastseek = var_InheritBool( p_stream, "fastseek" );
+
+    p_stream->pf_read = Read;
+    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 );
+}