Commit e305b509 authored by François Cartegnie's avatar François Cartegnie 🤞

add controls tweaking modules

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
parent c482ee92
......@@ -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
......
......@@ -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
......
......@@ -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
/*****************************************************************************
* 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 );
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment