[vlc-devel] [PATCH 1/1] -Squashed Commits
Jean-Baptiste Kempf
jb at videolan.org
Tue Jun 4 20:59:39 CEST 2013
Ping for review.
On 08 May, Diarmuid Collins wrote :
> ---
> modules/access/Modules.am | 6 ++
> modules/access/inetx.c | 212 +++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 218 insertions(+)
> create mode 100755 modules/access/inetx.c
>
> diff --git a/modules/access/Modules.am b/modules/access/Modules.am
> index 8a571e7..ce67c87 100644
> --- a/modules/access/Modules.am
> +++ b/modules/access/Modules.am
> @@ -322,3 +322,9 @@ libaccess_realrtsp_plugin_la_CFLAGS = $(AM_CFLAGS)
> libaccess_realrtsp_plugin_la_LIBADD = $(AM_LIBADD) $(SOCKET_LIBS)
> libvlc_LTLIBRARIES += $(LTLIBaccess_realrtsp)
> EXTRA_LTLIBRARIES += libaccess_realrtsp_plugin.la
> +
> +libaccess_inetx_plugin_la_SOURCES = \
> + inetx.c
> +libaccess_inetx_plugin_la_CFLAGS = $(AM_CFLAGS)
> +libaccess_inetx_plugin_la_LIBADD = $(AM_LIBADD) $(SOCKET_LIBS)
> +libvlc_LTLIBRARIES += libaccess_inetx_plugin.la
> \ No newline at end of file
> diff --git a/modules/access/inetx.c b/modules/access/inetx.c
> new file mode 100755
> index 0000000..1747b1b
> --- /dev/null
> +++ b/modules/access/inetx.c
> @@ -0,0 +1,212 @@
> +/*****************************************************************************
> + * inetx.c: raw iNetX input module
> + *****************************************************************************
> + * Copyright (C) 2013 Diarmuid Collins
> + * $Id$
> + *
> + * Authors: Diarmuid Collins <dcollins at curtisswright.com>
> + *
> + *
> + * 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.
> + *****************************************************************************/
> +
> + /*****************************************************************************
> + * This module is very heavily based upon the UDP module as the starting point
> + * iNETX is a protocol for use in networked data acquisition systems. MPEG can
> + * be carried over this protocol
> + * http://en.wikipedia.org/wiki/Bus_monitoring#Packetizer_bus_monitor
> + *****************************************************************************/
> +
> +/*****************************************************************************
> + * Preamble
> + *****************************************************************************/
> +
> +#ifdef HAVE_CONFIG_H
> +# include "config.h"
> +#endif
> +
> +#include <vlc_common.h>
> +#include <vlc_plugin.h>
> +#include <vlc_access.h>
> +#include <vlc_network.h>
> +
> +#define MTU 1472
> +
> +/*****************************************************************************
> + * Module descriptor
> + *****************************************************************************/
> +static int Open ( vlc_object_t * );
> +static void Close( vlc_object_t * );
> +
> +vlc_module_begin ()
> + set_shortname( N_("INETX" ) )
> + set_description( N_("iNet-X input") )
> + set_category( CAT_INPUT )
> + set_subcategory( SUBCAT_INPUT_ACCESS )
> +
> + set_capability( "access", 0 )
> + add_shortcut( "inetx", "inetxstream" )
> +
> + set_callbacks( Open, Close )
> +vlc_module_end ()
> +
> +/*****************************************************************************
> + * Local prototypes
> + *****************************************************************************/
> +static block_t *Block( access_t * );
> +static int Control( access_t *, int, va_list );
> +
> +/*****************************************************************************
> + * Open: open the socket
> + *****************************************************************************/
> +static int Open( vlc_object_t *p_this )
> +{
> + access_t *p_access = (access_t*)p_this;
> +
> + char *psz_name = strdup( p_access->psz_location );
> + char *psz_parser;
> + const char *psz_server_addr, *psz_bind_addr = "";
> + int i_bind_port = 1234, i_server_port = 0;
> + int fd;
> +
> + /* Set up p_access */
> + access_InitFields( p_access );
> + ACCESS_SET_CALLBACKS( NULL, Block, Control, NULL );
> +
> + /* Parse psz_name syntax :
> + * [serveraddr[:serverport]][@[bindaddr]:[bindport]] */
> + psz_parser = strchr( psz_name, '@' );
> + if( psz_parser != NULL )
> + {
> + /* Found bind address and/or bind port */
> + *psz_parser++ = '\0';
> + psz_bind_addr = psz_parser;
> +
> + if( psz_bind_addr[0] == '[' )
> + /* skips bracket'd IPv6 address */
> + psz_parser = strchr( psz_parser, ']' );
> +
> + if( psz_parser != NULL )
> + {
> + psz_parser = strchr( psz_parser, ':' );
> + if( psz_parser != NULL )
> + {
> + *psz_parser++ = '\0';
> + i_bind_port = atoi( psz_parser );
> + }
> + }
> + }
> +
> + msg_Dbg( p_access, "opening server=%s:%d local=%s:%d",
> + psz_server_addr, i_server_port, psz_bind_addr, i_bind_port );
> +
> + fd = net_OpenDgram( p_access, psz_bind_addr, i_bind_port,
> + psz_server_addr, i_server_port, IPPROTO_UDP );
> + free (psz_name);
> + if( fd == -1 )
> + {
> + msg_Err( p_access, "cannot open socket" );
> + return VLC_EGENERIC;
> + }
> + p_access->p_sys = (void *)(intptr_t)fd;
> +
> + return VLC_SUCCESS;
> +}
> +
> +/*****************************************************************************
> + * Close: free unused data structures
> + *****************************************************************************/
> +static void Close( vlc_object_t *p_this )
> +{
> + access_t *p_access = (access_t*)p_this;
> +
> + net_Close( (intptr_t)p_access->p_sys );
> +}
> +
> +/*****************************************************************************
> + * Control:
> + *****************************************************************************/
> +static int Control( access_t *p_access, int i_query, va_list args )
> +{
> + bool *pb_bool;
> + int64_t *pi_64;
> +
> + switch( i_query )
> + {
> + /* */
> + case ACCESS_CAN_SEEK:
> + case ACCESS_CAN_FASTSEEK:
> + case ACCESS_CAN_PAUSE:
> + case ACCESS_CAN_CONTROL_PACE:
> + pb_bool = (bool*)va_arg( args, bool* );
> + *pb_bool = false;
> + break;
> + /* */
> + case ACCESS_GET_PTS_DELAY:
> + pi_64 = (int64_t*)va_arg( args, int64_t * );
> + *pi_64 = INT64_C(1000)
> + * var_InheritInteger(p_access, "network-caching");
> + break;
> +
> + /* */
> + case ACCESS_SET_PAUSE_STATE:
> + case ACCESS_GET_TITLE_INFO:
> + case ACCESS_SET_TITLE:
> + case ACCESS_SET_SEEKPOINT:
> + case ACCESS_SET_PRIVATE_ID_STATE:
> + case ACCESS_GET_CONTENT_TYPE:
> + return VLC_EGENERIC;
> +
> + default:
> + msg_Warn( p_access, "unimplemented query in control" );
> + return VLC_EGENERIC;
> +
> + }
> + return VLC_SUCCESS;
> +}
> +
> +/*****************************************************************************
> + * Block:
> + *****************************************************************************/
> +static block_t *Block( access_t *p_access )
> +{
> + access_sys_t *p_sys = p_access->p_sys;
> + block_t *p_block;
> + ssize_t len;
> +
> + /* The iNET-X header contains stream ids, sequence numbers and PTP timestamps*
> + * For the moment these headers will be ignore and we pick out the raw MPEG ts
> + * which is offset INETX_HDR_LEN bytes into the UDP payload
> + */
> + const int INETX_HDR_LEN = 28;
> +
> + /* Read data */
> + p_block = block_Alloc( MTU - INETX_HDR_LEN );
> +
> + len = net_Read( p_access, (intptr_t)p_sys, NULL,
> + p_block->p_buffer, MTU, false );
> +
> + // Offset the buffer by the iNetX header
> + p_block->p_buffer += INETX_HDR_LEN;
> + p_block->i_buffer -= INETX_HDR_LEN;
> +
> +
> + if( len < INETX_HDR_LEN)
> + {
> + block_Release( p_block );
> + return NULL;
> + }
> + return block_Realloc( p_block, 0, len-INETX_HDR_LEN );
> +}
> --
> 1.7.9.5
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> http://mailman.videolan.org/listinfo/vlc-devel
--
Best regards,
--
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device
More information about the vlc-devel
mailing list