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

📄 main.c

📁 vlc stand 0.1.99 ist sehr einfach
💻 C
📖 第 1 页 / 共 2 页
字号:
/* following functions are local *//***************************************************************************** * SetDefaultConfiguration: set default options ***************************************************************************** * This function is called by GetConfiguration before command line is parsed. * It sets all the default values required later by the program. At this stage, * most structure are not yet allocated, so initialization must be done using * environment. *****************************************************************************/static void SetDefaultConfiguration( void ){    /*     * All features are activated by default     */    p_main->b_audio  = 1;    p_main->b_video  = 1;    p_main->b_vlans  = 1;}/***************************************************************************** * GetConfiguration: parse command line ***************************************************************************** * Parse command line and configuration file for configuration. If the inline * help is requested, the function Usage() is called and the function returns * -1 (causing main() to exit). The messages interface is initialized at this * stage, but most structures are not allocated, so only environment should * be used. *****************************************************************************/static int GetConfiguration( int i_argc, char *ppsz_argv[], char *ppsz_env[] ){    int c, i_opt;    /* Set default configuration and copy arguments */    p_main->i_argc    = i_argc;    p_main->ppsz_argv = ppsz_argv;    p_main->ppsz_env  = ppsz_env;    SetDefaultConfiguration();    /* Parse command line options */    opterr = 0;    while( ( c = getopt_long( i_argc, ppsz_argv, psz_shortopts, longopts, 0 ) ) != EOF )    {        switch( c )        {        /* General/common options */        case 'h':                                              /* -h, --help */            Usage( SHORT_HELP );            return( -1 );            break;        case 'H':                                          /* -H, --longhelp */            Usage( LONG_HELP );            return( -1 );            break;        case 'v':                                           /* -v, --version */            Version();            return( -1 );            break;        /* Audio options */        case OPT_NOAUDIO:                                       /* --noaudio */            p_main->b_audio = 0;            break;        case OPT_AOUT:                                             /* --aout */            main_PutPszVariable( AOUT_METHOD_VAR, optarg );            break;        case OPT_STEREO:                                         /* --stereo */            main_PutIntVariable( AOUT_STEREO_VAR, 1 );            break;        case OPT_MONO:                                             /* --mono */            main_PutIntVariable( AOUT_STEREO_VAR, 0 );            break;        /* Video options */        case OPT_NOVIDEO:                                       /* --novideo */            p_main->b_video = 0;            break;        case OPT_VOUT:                                             /* --vout */            main_PutPszVariable( VOUT_METHOD_VAR, optarg );            break;        case OPT_DISPLAY:                                       /* --display */            main_PutPszVariable( VOUT_DISPLAY_VAR, optarg );            break;        case OPT_WIDTH:                                           /* --width */            main_PutPszVariable( VOUT_WIDTH_VAR, optarg );            break;        case OPT_HEIGHT:                                         /* --height */            main_PutPszVariable( VOUT_HEIGHT_VAR, optarg );            break;        case 'g':                                         /* -g, --grayscale */            main_PutIntVariable( VOUT_GRAYSCALE_VAR, 1 );            break;        case OPT_COLOR:                                           /* --color */            main_PutIntVariable( VOUT_GRAYSCALE_VAR, 0 );            break;        /* DVD options */        case 'a':            if ( ! strcmp(optarg, "mpeg") )                main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_MPEG );            else if ( ! strcmp(optarg, "lpcm") )                main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_LPCM );            else if ( ! strcmp(optarg, "off") )                main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_NOAUDIO );            else                main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_AC3 );            break;        case 'c':            main_PutIntVariable( INPUT_DVD_CHANNEL_VAR, atoi(optarg) );            break;        case 's':            main_PutIntVariable( INPUT_DVD_SUBTITLE_VAR, atoi(optarg) );            break;        /* Input options */        case OPT_NOVLANS:                                       /* --novlans */            p_main->b_vlans = 0;            break;        case OPT_SERVER:                                         /* --server */            main_PutPszVariable( INPUT_SERVER_VAR, optarg );            break;        case OPT_PORT:                                             /* --port */            main_PutPszVariable( INPUT_PORT_VAR, optarg );            break;        /* Internal error: unknown option */        case '?':        default:            intf_ErrMsg( "intf error: unknown option `%s'\n", ppsz_argv[optind - 1] );            Usage( USAGE );            return( EINVAL );            break;        }    }    /* Parse command line parameters - no check is made for these options */    for( i_opt = optind; i_opt < i_argc; i_opt++ )    {        putenv( ppsz_argv[ i_opt ] );    }    return( 0 );}/***************************************************************************** * Usage: print program usage ***************************************************************************** * Print a short inline help. Message interface is initialized at this stage. *****************************************************************************/static void Usage( int i_fashion ){    /* Usage */    intf_Msg( "Usage: vlc [options] [parameters]\n" );    if( i_fashion == USAGE )    {        intf_Msg( "Try `vlc --help' for more information.\n" );        return;    }    intf_MsgImm( COPYRIGHT_MESSAGE "\n" );    /* Options */    intf_Msg( "\n"              "Options:\n"              "      --noaudio                  \tdisable audio\n"              "      --aout <plugin>            \taudio output method\n"              "      --stereo, --mono           \tstereo/mono audio\n"              "\n"              "      --novideo                  \tdisable video\n"              "      --vout <plugin>            \tvideo output method\n"              "      --display <display>        \tdisplay string\n"              "      --width <w>, --height <h>  \tdisplay dimensions\n"              "  -g, --grayscale                \tgrayscale output\n"              "      --color                    \tcolor output\n"              "\n"              "  -a, --dvdaudio                 \tchoose DVD audio type\n"              "  -c, --dvdchannel               \tchoose DVD audio channel\n"              "  -s, --dvdsubtitle              \tchoose DVD subtitle channel\n"              "\n"              "      --novlans                  \tdisable vlans\n"              "      --server <host>            \tvideo server address\n"              "      --port <port>              \tvideo server port\n"              "\n"              "  -h, --help                     \tprint help and exit\n"              "  -H, --longhelp                 \tprint long help and exit\n"              "  -v, --version                  \toutput version information and exit\n" );    if( i_fashion == SHORT_HELP )        return;    /* Interface parameters */    intf_Msg( "\n"              "Interface parameters:\n"              "  " INTF_INIT_SCRIPT_VAR "=<filename>             \tinitialization script\n"              "  " INTF_CHANNELS_VAR "=<filename>            \tchannels list\n" );    /* Audio parameters */    intf_Msg( "\n"              "Audio parameters:\n"              "  " AOUT_METHOD_VAR "=<method name>        \taudio method\n"              "  " AOUT_DSP_VAR "=<filename>              \tdsp device path\n"              "  " AOUT_STEREO_VAR "={1|0}                \tstereo or mono output\n"              "  " AOUT_RATE_VAR "=<rate>             \toutput rate\n" );    /* Video parameters */    intf_Msg( "\n"              "Video parameters:\n"              "  " VOUT_METHOD_VAR "=<method name>        \tdisplay method\n"              "  " VOUT_DISPLAY_VAR "=<display name>      \tdisplay used\n"              "  " VOUT_WIDTH_VAR "=<width>               \tdisplay width\n"              "  " VOUT_HEIGHT_VAR "=<height>             \tdislay height\n"              "  " VOUT_FB_DEV_VAR "=<filename>           \tframebuffer device path\n"              "  " VOUT_GRAYSCALE_VAR "={1|0}             \tgrayscale or color output\n" );    /* DVD parameters */    intf_Msg( "\n"              "DVD parameters:\n"              "  " INPUT_DVD_AUDIO_VAR "={ac3|lpcm|mpeg|off} \taudio type\n"              "  " INPUT_DVD_CHANNEL_VAR "=[0-15]            \taudio channel\n"              "  " INPUT_DVD_SUBTITLE_VAR "=[0-31]           \tsubtitle channel\n" );    /* Input parameters */    intf_Msg( "\n"              "Input parameters:\n"              "  " INPUT_SERVER_VAR "=<hostname>          \tvideo server\n"              "  " INPUT_PORT_VAR "=<port>            \tvideo server port\n"              "  " INPUT_IFACE_VAR "=<interface>          \tnetwork interface\n"              "  " INPUT_VLAN_SERVER_VAR "=<hostname>     \tvlan server\n"              "  " INPUT_VLAN_PORT_VAR "=<port>           \tvlan server port\n" );}/***************************************************************************** * Version: print complete program version ***************************************************************************** * Print complete program version and build number. *****************************************************************************/static void Version( void ){    intf_Msg( VERSION_MESSAGE              "This program comes with NO WARRANTY, to the extent permitted by law.\n"              "You may redistribute it under the terms of the GNU General Public License;\n"              "see the file named COPYING for details.\n"              "Written by the VideoLAN team at Ecole Centrale, Paris.\n" );}/***************************************************************************** * InitSignalHandler: system signal handler initialization ***************************************************************************** * Set the signal handlers. SIGTERM is not intercepted, because we need at * at least a method to kill the program when all other methods failed, and * when we don't want to use SIGKILL. *****************************************************************************/static void InitSignalHandler( void ){    /* Termination signals */    signal( SIGHUP,  SignalHandler );    signal( SIGINT,  SignalHandler );    signal( SIGQUIT, SignalHandler );}/***************************************************************************** * SignalHandler: system signal handler ***************************************************************************** * This function is called when a signal is received by the program. It tries to * end the program in a clean way. *****************************************************************************/static void SignalHandler( int i_signal ){    /* Once a signal has been trapped, the termination sequence will be armed and     * following signals will be ignored to avoid sending messages to an interface     * having been destroyed */    signal( SIGHUP,  SIG_IGN );    signal( SIGINT,  SIG_IGN );    signal( SIGQUIT, SIG_IGN );    /* Acknowledge the signal received */    intf_ErrMsgImm("intf: signal %d received\n", i_signal );    /* Try to terminate everything - this is done by requesting the end of the     * interface thread */    p_main->p_intf->b_die = 1;}#ifdef HAVE_MMX/***************************************************************************** * TestMMX: tests if the processor has MMX support. ***************************************************************************** * This function is called if HAVE_MMX is enabled, to check whether the * cpu really supports MMX. *****************************************************************************/static int TestMMX( void ){/* FIXME: under beos, gcc does not support the foolowing inline assembly */ #ifdef SYS_BEOS    return( 1 );#else    int i_reg, i_dummy = 0;    /* test for a 386 cpu */    asm volatile ( "pushfl                    popl %%eax                    movl %%eax, %%ecx                    xorl $0x40000, %%eax                    pushl %%eax                    popfl                    pushfl                    popl %%eax                    xorl %%ecx, %%eax                    andl $0x40000, %%eax"                 : "=a" ( i_reg ) );    if( !i_reg )        return( 0 );    /* test for a 486 cpu */    asm volatile ( "movl %%ecx, %%eax                    xorl $0x200000, %%eax                    pushl %%eax                    popfl                    pushfl                    popl %%eax                    xorl %%ecx, %%eax                    pushl %%ecx                    popfl                    andl $0x200000, %%eax"                 : "=a" ( i_reg ) );    if( !i_reg )        return( 0 );    /* the cpu supports the CPUID instruction - get its level */    asm volatile ( "cpuid"                 : "=a" ( i_reg ),                   "=b" ( i_dummy ),                   "=c" ( i_dummy ),                   "=d" ( i_dummy )                 : "a"  ( 0 ),       /* level 0 */                   "b"  ( i_dummy ) ); /* buggy compiler shouldn't complain */    /* this shouldn't happen on a normal cpu */    if( !i_reg )        return( 0 );    /* test for the MMX flag */    asm volatile ( "cpuid                    andl $0x00800000, %%edx" /* X86_FEATURE_MMX */                 : "=a" ( i_dummy ),                   "=b" ( i_dummy ),                   "=c" ( i_dummy ),                   "=d" ( i_reg )                 : "a"  ( 1 ),       /* level 1 */                   "b"  ( i_dummy ) ); /* buggy compiler shouldn't complain */    if( !i_reg )        return( 0 );    return( 1 );#endif}#endif

⌨️ 快捷键说明

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