[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