⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 access.c

📁 VLC媒体播放程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * access.c: DVB card input v4l2 only ***************************************************************************** * Copyright (C) 1998-2003 VideoLAN * * Authors: Johan Bilien <jobi@via.ecp.fr> *          Jean-Paul Saman <jpsaman@wxs.nl> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#include <stdio.h>#include <stdlib.h>#include <vlc/vlc.h>#include <vlc/input.h>#include "../../demux/mpeg/system.h"#ifdef HAVE_UNISTD_H#   include <unistd.h>#endif#include <fcntl.h>#include <sys/types.h>#ifdef HAVE_ERRNO_H#    include <string.h>#    include <errno.h>#endif#ifdef STRNCASECMP_IN_STRINGS_H#   include <strings.h>#endif/* DVB Card Drivers */#include <linux/dvb/dmx.h>#include <linux/dvb/frontend.h>#include "dvb.h"#define SATELLITE_READ_ONCE 3/***************************************************************************** * Local prototypes *****************************************************************************/static ssize_t SatelliteRead( input_thread_t * p_input, byte_t * p_buffer,                              size_t i_len);static int     SatelliteSetArea    ( input_thread_t *, input_area_t * );static int     SatelliteSetProgram ( input_thread_t *, pgrm_descriptor_t * );static void    SatelliteSeek       ( input_thread_t *, off_t );/***************************************************************************** * Open: open the frontend device *****************************************************************************/int E_(Open) ( vlc_object_t *p_this ){    struct dvb_frontend_info frontend_info;    struct dvb_frontend_parameters fep;    input_thread_t *    p_input = (input_thread_t *)p_this;    input_socket_t *    p_satellite;    char *              psz_parser;    char *              psz_next;    int                 i_fd = 0;    unsigned int        u_adapter = 1;    unsigned int        u_device = 0;    unsigned int        u_freq = 0;    unsigned int        u_srate = 0;    unsigned int        u_lnb_lof1;    unsigned int        u_lnb_lof2;    unsigned int        u_lnb_slof;    int                 i_bandwidth = 0;    int                 i_modulation = 0;    int                 i_guard = 0;    int                 i_transmission = 0;    int                 i_hierarchy = 0;    int                 i_polarisation = 0;    int                 i_fec = 0;    int                 i_code_rate_HP = 0;    int                 i_code_rate_LP = 0;    vlc_bool_t          b_diseqc;    vlc_bool_t          b_probe;    char                dvr[] = DVR;    char                frontend[] = FRONTEND;    int                 i_len = 0;    vlc_value_t         val;    int                 i_test;        /* parse the options passed in command line : */    psz_parser = strdup( p_input->psz_name );    if( !psz_parser )    {        return( -1 );    }    // Get adapter and device number to use for this dvb card    u_adapter = config_GetInt( p_input, "adapter" );    u_device  = config_GetInt( p_input, "device" );      /* Get antenna configuration options */    b_diseqc = config_GetInt( p_input, "diseqc" );    u_lnb_lof1 = config_GetInt( p_input, "lnb-lof1" );    u_lnb_lof2 = config_GetInt( p_input, "lnb-lof2" );    u_lnb_slof = config_GetInt( p_input, "lnb-slof" );    /*Get modulation parameters*/    i_bandwidth = config_GetInt( p_input, "bandwidth");    i_code_rate_HP = config_GetInt(p_input, "code-rate-hp");    i_code_rate_LP = config_GetInt(p_input, "code-rate-lp");    i_modulation  = config_GetInt(p_input, "modulation");    i_transmission = config_GetInt(p_input, "transmission");    i_guard = config_GetInt(p_input, "guard");    i_hierarchy = config_GetInt(p_input, "hierarchy");    /* Determine frontend device information and capabilities */    b_probe = config_GetInt( p_input, "probe" );    if (b_probe)    {        if ( ioctl_InfoFrontend(p_input, &frontend_info, u_adapter, u_device) < 0 )        {            msg_Err( p_input, "(access) cannot determine frontend info" );            return -1;        }    }    else /* no frontend probing is done so use default border values. */    {        msg_Dbg( p_input, "using default values for frontend info" );        i_len = sizeof(FRONTEND);        if (snprintf(frontend, sizeof(FRONTEND), FRONTEND, u_adapter, u_device) >= i_len)        {            msg_Err( p_input, "snprintf() truncated string for FRONTEND" );            frontend[sizeof(FRONTEND)] = '\0';        }        strncpy(frontend_info.name, frontend, 128);        msg_Dbg(p_input, "method of access is %s", p_input->psz_access);                frontend_info.type = FE_QPSK;        if (strncmp( p_input->psz_access, "qpsk",4 ) ==0)            frontend_info.type = FE_QPSK;        else if (strncmp( p_input->psz_access, "cable",5 ) ==0)            frontend_info.type = FE_QAM;        else if (strncmp( p_input->psz_access, "terrestrial",11) ==0)            frontend_info.type = FE_OFDM;        frontend_info.frequency_max = u_lnb_lof2; /* in KHz, lnb_lof2 */        frontend_info.frequency_min = u_lnb_lof1; /* lnb_lof1 */        frontend_info.symbol_rate_max = 30000000;        frontend_info.symbol_rate_min =  1000000;    }        /* Register Callback functions */    p_input->pf_read = SatelliteRead;    p_input->pf_set_program = SatelliteSetProgram;    p_input->pf_set_area = SatelliteSetArea;    p_input->pf_seek = SatelliteSeek;    i_test = strtol( psz_parser, &psz_next, 10 );    if ( psz_next == psz_parser )    {        for ( ;; )        {            if( !strncmp( psz_parser, "frequency=",                               strlen( "frequency=" ) ) )            {                u_freq =                  strtol( psz_parser + strlen( "frequency=" ),                            &psz_parser, 0 );            }            else if( !strncmp( psz_parser, "polarization=",                               strlen( "polarization=" ) ) )            {                char *psz_parser_init;                psz_parser += strlen( "polarization=" );                psz_parser_init = psz_parser;                while ( *psz_parser != ':')                {                   psz_parser++;                }                if ((!strncmp( psz_parser_init, "V" ,                     psz_parser - psz_parser_init ) ) ||                    (!strncmp( psz_parser_init, "V" ,                     psz_parser - psz_parser_init ) ) )                {                    i_polarisation = 0; //VLC_FALSE;                }                else if ((!strncmp( psz_parser_init, "H" ,                     psz_parser - psz_parser_init ) ) ||                   (!strncmp( psz_parser_init, "h" ,                     psz_parser - psz_parser_init ) ) )                {                    i_polarisation = 1; //VLC_TRUE;                }                else if ((!strncmp( psz_parser_init, "A" ,                     psz_parser - psz_parser_init ) ) ||                   (!strncmp( psz_parser_init, "a" ,                     psz_parser - psz_parser_init ) ) )                {                    i_polarisation = 2;                }            }            else if( !strncmp( psz_parser, "fec=",                               strlen( "fec=" ) ) )            {                i_fec =                (int)strtol( psz_parser + strlen( "fec=" ),                            &psz_parser, 0 );            }            else if( !strncmp( psz_parser, "srate=",                               strlen( "srate=" ) ) )            {                u_srate =                (unsigned int)strtol( psz_parser + strlen( "srate=" ),                            &psz_parser, 0 );            }            else if( !strncmp( psz_parser, "program=",                               strlen( "program=" ) ) )            {                val.i_int = (int)strtol( psz_parser + strlen( "program=" ),                            &psz_parser, 0 );                var_Set( p_input, "program", val );            }            else if( !strncmp( psz_parser, "diseqc",                               strlen( "disecq" ) ) )            {                psz_parser += strlen("disecq");                b_diseqc = VLC_TRUE;            }            else if( !strncmp( psz_parser, "lnb-lof1=",                               strlen( "lnb-lof1=" ) ) )            {                u_lnb_lof1 =                (unsigned int)strtol( psz_parser + strlen( "lnb-lof1=" ),                            &psz_parser, 0 );                                frontend_info.frequency_min = u_lnb_lof1; /* lnb_lof1 */            }            else if( !strncmp( psz_parser, "lnb-lof2=",                               strlen( "lnb-lof2=" ) ) )            {                u_lnb_lof2 =                (unsigned int)strtol( psz_parser + strlen( "lnb-lof2=" ),                            &psz_parser, 0 );                frontend_info.frequency_max = u_lnb_lof2; /* in KHz, lnb_lof2 */            }            else if( !strncmp( psz_parser, "lnb-slof=",                               strlen( "lnb-slof=" ) ) )            {                u_lnb_slof =                (unsigned int)strtol( psz_parser + strlen( "lnb-slof=" ),                            &psz_parser, 0 );            }            else if( !strncmp( psz_parser, "device=",                               strlen( "device=" ) ) )            {                u_device =                (unsigned int)strtol( psz_parser + strlen( "device=" ),                            &psz_parser, 0 );            }            else if( !strncmp( psz_parser, "adapter=",                               strlen( "adapter=" ) ) )            {                u_adapter =                (unsigned int)strtol( psz_parser + strlen( "adapter=" ),                            &psz_parser, 0 );            }            else if (!strncmp( psz_parser, "modulation=",                               strlen( "modulation=" ) ) )            {                i_modulation = (int)strtol( psz_parser + strlen( "modulation=" ),                            &psz_parser, 0 );            }            else if (!strncmp( psz_parser, "bandwidth=",                               strlen( "bandwidth=" ) ) )            {                i_bandwidth = (int)strtol( psz_parser + strlen( "bandwidth=" ),                            &psz_parser, 0 );            }            else if (!strncmp( psz_parser, "guard=",                               strlen( "guard=" ) ) )            {                i_guard = (int)strtol( psz_parser + strlen( "guard=" ),                            &psz_parser, 0 );            }            else if (!strncmp( psz_parser, "transmission=",                               strlen( "transmission=" ) ) )            {                i_transmission = (int)strtol( psz_parser +                             strlen( "transmission=" ),&psz_parser, 0 );            }            else if (!strncmp( psz_parser, "hierarchy=",                               strlen( "hierarchy=" ) ) )            {                i_hierarchy = (int)strtol( psz_parser +                                 strlen( "hierarchy=" ),&psz_parser, 0 );            }            else if (!strncmp( psz_parser, "code-rate-HP=",                               strlen( "code-rate-HP=" ) ) )            {                i_code_rate_HP = (int)strtol( psz_parser +                                 strlen( "code-rate-HP=" ),&psz_parser, 0 );            }            else if (!strncmp( psz_parser, "code-rate-LP=",                               strlen( "code-rate-LP=" ) ) )            {                i_code_rate_LP = (int)strtol( psz_parser +                                strlen( "code-rate-LP=" ),&psz_parser, 0 );            }            else if( !strncmp( psz_parser, "probe",                               strlen( "probe" ) ) )            {                psz_parser += strlen("probe");                b_probe = VLC_TRUE;            }            if( *psz_parser )                psz_parser++;            else                break;        }    }    else    {        msg_Warn(p_input,"DVB Input syntax has changed, please see documentation for further informations");        u_freq = (unsigned int)i_test;        if( *psz_next )        {            psz_parser = psz_next + 1;            i_polarisation = strtol( psz_parser, &psz_next, 10 );            if( *psz_next )            {                psz_parser = psz_next + 1;                i_fec = (int)strtol( psz_parser, &psz_next, 10 );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -