亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? main.c

?? linux下的dvb收看解析軟件代碼; 帶參考程序
?? C
字號:
/*Copyright (C) 2006  Adam CharrettThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USAmain.cEntry point to the application.*/#include "config.h"#include <limits.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h>#include <getopt.h>#include <ctype.h>#include <signal.h>#include <sys/unistd.h>#include <readline/readline.h>#include <readline/history.h>#include "parsezap.h"#include "dbase.h"#include "multiplexes.h"#include "services.h"#include "dvb.h"#include "ts.h"#include "udpoutput.h"#include "main.h"#include "patprocessor.h"#include "pmtprocessor.h"#include "sdtprocessor.h"#include "servicefilter.h"#include "cache.h"#include "logging.h"#include "commands.h"#include "outputs.h"#include "binarycomms.h"static void usage(char *appname);static void version(void);static void sighandler(int signum);static void installsighandler(void);static void InitDaemon(int adapter);static void DeinitDaemon(void);volatile Multiplex_t *CurrentMultiplex = NULL;volatile Service_t *CurrentService = NULL;PIDFilter_t *PIDFilters[PIDFilterIndex_Count];TSFilter_t *TSFilter;DVBAdapter_t *DVBAdapter;bool ExitProgram = FALSE;bool DaemonMode = FALSE;char PrimaryService[] = "<Primary>";Output_t *PrimaryServiceOutput = NULL;static char PidFile[PATH_MAX];int main(int argc, char *argv[]){    char *startupFile = NULL;    fe_type_t channelsFileType = FE_OFDM;    char channelsFile[PATH_MAX];    void *outputArg = NULL;    int i;    int adapterNumber = 0;    char *username = "dvbstreamer";    char *password = "control";    char *serverName = NULL;    char *primaryOutput = NULL;    channelsFile[0] = 0;    installsighandler();    while (!ExitProgram)    {        char c;        c = getopt(argc, argv, "vVdo:a:t:s:c:f:u:p:n:");        if (c == -1)        {            break;        }        switch (c)        {                case 'v': verbosity ++;                break;                case 'V':                version();                exit(0);                break;                case 'o':                primaryOutput = optarg;                break;                case 'a': adapterNumber = atoi(optarg);                printlog(LOG_INFOV, "Using adapter %d\n", adapterNumber);                break;                case 'f': startupFile = strdup(optarg);                printlog(LOG_INFOV, "Using startup script %s\n", startupFile);                break;                /* Database initialisation options*/                case 't':                strcpy(channelsFile, optarg);                channelsFileType = FE_OFDM;                printlog(LOG_INFOV, "Using DVB-T channels file %s\n", channelsFile);                break;                case 's':                strcpy(channelsFile, optarg);                channelsFileType = FE_QPSK;                printlog(LOG_INFOV, "Using DVB-S channels file %s\n", channelsFile);                break;                case 'c':                strcpy(channelsFile, optarg);                channelsFileType = FE_QAM;                printlog(LOG_INFOV, "Using DVB-C channels file %s\n", channelsFile);                break;                /* Daemon options */                case 'd': DaemonMode = TRUE;                break;                case 'u': username = optarg;                break;                case 'p': password = optarg;                break;                case 'n': serverName = optarg;                break;                default:                usage(argv[0]);                exit(1);        }    }    if (ExitProgram)    {        exit(1);    }    if (DaemonMode)    {        InitDaemon( adapterNumber);    }    if (primaryOutput == NULL)    {        printlog(LOG_ERROR, "No output set!\n");        usage(argv[0]);        exit(1);    }    if (DBaseInit(adapterNumber))    {        printlog(LOG_ERROR, "Failed to initialise database\n");        exit(1);    }    printlog(LOG_DEBUGV, "Database initalised\n");    if (CacheInit())    {        printlog(LOG_ERROR,"Failed to initialise cache\n");        exit(1);    }    printlog(LOG_DEBUGV, "Cache initalised\n");    if (strlen(channelsFile))    {        printlog(LOG_INFO,"Importing services from %s\n", channelsFile);        if (!parsezapfile(channelsFile, channelsFileType))        {            exit(1);        }        printlog(LOG_DEBUGV, "Channels file imported\n");    }    printlog(LOG_INFO, "%d Services available on %d Multiplexes\n", ServiceCount(), MultiplexCount());    /* Initialise the DVB adapter */    DVBAdapter = DVBInit(adapterNumber);    if (!DVBAdapter)    {        printlog(LOG_ERROR, "Failed to open DVB adapter!\n");        exit(1);    }    printlog(LOG_DEBUGV, "DVB adapter initalised\n");    DVBDemuxStreamEntireTSToDVR(DVBAdapter);    printlog(LOG_DEBUGV, "Streaming complete TS to DVR done\n");    /* Create Transport stream filter thread */    TSFilter = TSFilterCreate(DVBAdapter);    if (!TSFilter)    {        printlog(LOG_ERROR, "Failed to create filter!\n");        exit(1);    }    printlog(LOG_DEBUGV, "TSFilter created\n");    /* Create PAT/PMT/SDT filters */    PIDFilters[PIDFilterIndex_PAT] = PATProcessorCreate(TSFilter);    PIDFilters[PIDFilterIndex_PMT] = PMTProcessorCreate(TSFilter);    PIDFilters[PIDFilterIndex_SDT] = SDTProcessorCreate(TSFilter);    /* Enable all the filters */    for (i = 0; i < PIDFilterIndex_Count; i ++)    {        PIDFilters[i]->enabled = TRUE;    }    printlog(LOG_DEBUGV, "PID filters started\n");    if (OutputsInit())    {        printlog(LOG_ERROR, "OutputsInit failed!\n");    }    /* Create Service filter */    PrimaryServiceOutput = OutputAllocate(PrimaryService, OutputType_Service, primaryOutput);    if (!PrimaryServiceOutput)    {        printlog(LOG_ERROR, "Failed to create primary service output, reason %s\n", OutputErrorStr);        exit(1);    }    printlog(LOG_DEBUG, "PrimaryServiceOutput=%p\n", PrimaryServiceOutput);    if (CommandInit())    {        printlog(LOG_ERROR, "CommandInit failed!\n");        exit(1);    }    if (DaemonMode)    {        char serverNameBuffer[40];        if (!serverName)        {            sprintf(serverNameBuffer, "DVBStreamer Adapter %d", adapterNumber);            serverName = serverNameBuffer;        }        if (BinaryCommsInit(adapterNumber, serverName, username, password))        {            printlog(LOG_ERROR, "BinaryCommsInit failed!\n");            exit(1);        }    }    if (startupFile)    {        if (CommandProcessFile(startupFile))        {            printlog(LOG_ERROR, "%s not found!\n", startupFile);        }        free(startupFile);    }    printlog(LOG_DEBUGV, "Startup file processed\n");    if (DaemonMode)    {        BinaryCommsAcceptConnections();        printlog(LOG_DEBUGV, "Binary comms finished, shutting down\n");    }    else    {        CommandLoop();        printlog(LOG_DEBUGV, "Command loop finished, shutting down\n");    }    BinaryCommsDeInit();    CommandDeInit();    OutputsDeInit();    printlog(LOG_DEBUGV, "Outputs deinitialised\n");    /* Disable all the filters */    for (i = 0; i < PIDFilterIndex_Count; i ++)    {        PIDFilters[i]->enabled = FALSE;    }    printlog(LOG_DEBUGV, "PID filters stopped\n");    PATProcessorDestroy( PIDFilters[PIDFilterIndex_PAT]);    PMTProcessorDestroy( PIDFilters[PIDFilterIndex_PMT]);    SDTProcessorDestroy( PIDFilters[PIDFilterIndex_SDT]);    printlog(LOG_DEBUGV, "Processors destroyed\n");    /* Close the adapter and shutdown the filter etc*/    DVBDispose(DVBAdapter);    printlog(LOG_DEBUGV, "DVB Adapter shutdown\n");    TSFilterDestroy(TSFilter);    printlog(LOG_DEBUGV, "TSFilter destroyed\n");    UDPOutputClose(outputArg);    printlog(LOG_DEBUGV, "UDPOutput closed\n");    CacheDeInit();    printlog(LOG_DEBUGV, "Cache deinitalised\n");    DBaseDeInit();    printlog(LOG_DEBUGV, "Database deinitalised\n");    if (DaemonMode)    {        DeinitDaemon();    }    return 0;}/* * Find the service named <name> and tune to the new frequency for the multiplex the service is * on (if required) and then select the new service id to filter packets for. */Service_t *SetCurrentService(char *name){    Multiplex_t *multiplex;    Service_t *service;    TSFilterLock(TSFilter);    printlog(LOG_DEBUG,"Writing changes back to database.\n");    CacheWriteback();    TSFilterUnLock(TSFilter);    service = CacheServiceFindName(name, &multiplex);    if (!service)    {        return NULL;    }    printlog(LOG_DEBUG, "Service found id:0x%04x Multiplex:%d\n", service->id, service->multiplexfreq);    if ((CurrentService == NULL) || (!ServiceAreEqual(service,CurrentService)))    {        printlog(LOG_DEBUGV,"Disabling filters\n");        TSFilterEnable(TSFilter, FALSE);        if (CurrentMultiplex)        {            printlog(LOG_DEBUG,"Current Multiplex frequency = %d TS id = %d\n",CurrentMultiplex->freq, CurrentMultiplex->tsid);        }        else        {            printlog(LOG_DEBUG,"No current Multiplex!\n");        }        if (multiplex)        {            printlog(LOG_DEBUG,"New Multiplex frequency =%d TS id = %d\n",multiplex->freq, multiplex->tsid);        }        else        {            printlog(LOG_DEBUG,"No new Multiplex!\n");        }        if ((CurrentMultiplex!= NULL) && MultiplexAreEqual(multiplex, CurrentMultiplex))        {            printlog(LOG_DEBUGV,"Same multiplex\n");            CurrentService = service;        }        else        {            struct dvb_frontend_parameters feparams;            if (CurrentMultiplex)            {                free((void*)CurrentMultiplex);            }            printlog(LOG_DEBUGV,"Caching Services\n");            CacheLoad(multiplex);            CurrentMultiplex = multiplex;            printlog(LOG_DEBUGV,"Getting Frondend parameters\n");            MultiplexFrontendParametersGet((Multiplex_t*)CurrentMultiplex, &feparams);            printlog(LOG_DEBUGV,"Tuning\n");            DVBFrontEndTune(DVBAdapter, &feparams);            CurrentService = CacheServiceFindId(service->id);            ServiceFree(service);        }        TSFilterZeroStats(TSFilter);        OutputSetService(PrimaryServiceOutput, CurrentService);        printlog(LOG_DEBUGV,"Enabling filters\n");        TSFilterEnable(TSFilter, TRUE);    }    return (Service_t*)CurrentService;}/* * Output command line usage and help. */static void usage(char *appname){    fprintf(stderr,"Usage:%s <options>\n"            "      Options:\n"            "      -v            : Increase the amount of debug output, can be used multiple\n"            "                      times for more output\n"            "      -V            : Print version information then exit\n"            "      -o <host:port>: Output transport stream via UDP to the given host and port\n"            "      -a <adapter>  : Use adapter number (ie /dev/dvb/adapter<adapter>/...)\n"            "      -f <file>     : Run startup script file before starting the command prompt\n"            "      -t <file>     : Terrestrial channels.conf file to import services and \n"            "                      multiplexes from.\n"            "      -s <file>     : Satellite channels.conf file to import services and \n"            "                      multiplexes from.(EXPERIMENTAL)\n"            "      -c <file>     : Cable channels.conf file to import services and \n"            "                      multiplexes from.(EXPERIMENTAL)\n",            appname           );}/* * Output version and license conditions */static void version(void){    printf("%s - %s\n"           "Written by Adam Charrett (charrea6@users.sourceforge.net).\n"           "\n"           "Copyright 2006 Adam Charrett\n"           "This is free software; see the source for copying conditions.  There is NO\n"           "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",           PACKAGE, VERSION);}static void installsighandler(void){    rl_catch_signals = 0;    signal(SIGTERM, sighandler);    signal(SIGINT, sighandler);    signal(SIGQUIT, sighandler);}static void sighandler(int signum){    if (!DaemonMode)    {        switch (signum)        {            case SIGINT:            case SIGQUIT:                rl_free_line_state ();            case SIGTERM:                rl_cleanup_after_signal();                fclose(rl_instream);                break;        }    }    ExitProgram = TRUE;}static void InitDaemon(int adapter){    char logfile[PATH_MAX];    /* Our process ID and Session ID */    pid_t pid, sid;    /* Fork off the parent process */    pid = fork();    if (pid < 0)    {        exit(1);    }    /* If we got a good PID, then       we can exit the parent process. */    if (pid > 0)    {        FILE *fp;        sprintf(PidFile, "/var/run/dvbstreamer-%d.pid", adapter);        fp = fopen(PidFile, "wt");        if (fp)        {            fprintf(fp, "%d", pid);            fclose(fp);        }        exit(0);    }    /* Create a new SID for the child process */    sid = setsid();    if (sid < 0)    {        /* Log the failure */        exit(1);    }    /* Change the current working directory */    if ((chdir("/")) < 0)    {        /* Log the failure */        exit(1);    }    /* Close out the standard file descriptors */    fclose(stdin);    fclose(stdout);    fclose(stderr);    sprintf(logfile, "/var/log/dvbstreamer-%d.err.log", adapter);    stderr = freopen(logfile, "at", stderr);    sprintf(logfile, "/var/log/dvbstreamer-%d.out.log", adapter);    stdout = freopen(logfile, "at", stdout);    DaemonMode = TRUE;}static void DeinitDaemon(void){    /* Remove pid file */    unlink(PidFile);    exit(0);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产精品青草| 成人av资源网站| 国产精品不卡在线观看| 欧美乱妇15p| 91片黄在线观看| 国内精品第一页| 亚洲va韩国va欧美va精品| 国产精品毛片高清在线完整版| 欧美军同video69gay| 91日韩一区二区三区| 国产伦精品一区二区三区免费| 香蕉av福利精品导航 | 偷拍一区二区三区四区| 亚洲国产成人私人影院tom| 日韩欧美综合在线| 69久久夜色精品国产69蝌蚪网| 93久久精品日日躁夜夜躁欧美| 国产麻豆视频一区| 久久99精品国产麻豆不卡| 亚洲成人福利片| 亚洲午夜电影在线| 亚洲色图欧美偷拍| 亚洲三级小视频| 中文字幕中文字幕在线一区 | 色噜噜狠狠色综合中国| 成人午夜大片免费观看| 国产精品888| 韩国精品主播一区二区在线观看| 免费成人在线观看视频| 免费国产亚洲视频| 蜜臀av在线播放一区二区三区 | 亚洲一二三区不卡| 亚洲综合偷拍欧美一区色| 亚洲丝袜自拍清纯另类| 国产精品久久毛片a| 亚洲国产精品av| 国产精品久久99| 国产精品毛片高清在线完整版| 国产精品免费网站在线观看| 国产欧美一区二区精品忘忧草| 久久久精品免费网站| 久久久五月婷婷| 国产精品免费久久久久| 18成人在线观看| 亚洲最大成人综合| 亚洲最新视频在线播放| 日韩电影在线一区二区三区| 免费成人在线观看| 精品一区二区三区久久| 国产丶欧美丶日本不卡视频| 丁香五精品蜜臀久久久久99网站| 风间由美一区二区三区在线观看 | 欧美日本韩国一区二区三区视频| 欧美日韩一区三区| 91精品国产全国免费观看| 日韩一区二区三区视频在线| 精品久久人人做人人爱| 欧美激情一区二区三区全黄| 亚洲视频香蕉人妖| 同产精品九九九| 久久69国产一区二区蜜臀| 国产成人午夜精品5599| 色综合天天综合网国产成人综合天 | 中文一区二区完整视频在线观看| 国产精品乱子久久久久| 一个色在线综合| 青青草国产精品97视觉盛宴| 国产精品538一区二区在线| 成人app软件下载大全免费| 色国产精品一区在线观看| 欧美乱妇15p| 国产欧美精品区一区二区三区 | 亚洲国产日韩在线一区模特 | 成人久久久精品乱码一区二区三区| 91小视频在线| 91麻豆精品国产91久久久久久久久| 久久免费看少妇高潮| 一区二区三区在线视频免费 | 亚洲免费在线播放| 美女国产一区二区三区| 成人精品免费网站| 欧美日韩激情一区| 国产偷v国产偷v亚洲高清| 亚洲男人都懂的| 免费人成精品欧美精品| 99久久综合狠狠综合久久| 欧美一级欧美三级| 中文字幕日韩av资源站| 精品制服美女丁香| 在线观看国产91| 久久久久国产精品麻豆ai换脸| 亚洲一区视频在线| 国产mv日韩mv欧美| 在线综合视频播放| 最新中文字幕一区二区三区| 麻豆精品一区二区三区| 色香蕉久久蜜桃| 国产欧美精品国产国产专区| 日av在线不卡| 在线观看91视频| 最新热久久免费视频| 国产在线播放一区三区四| 欧美日韩免费观看一区二区三区| 国产精品无遮挡| 久久成人麻豆午夜电影| 欧美日本高清视频在线观看| 亚洲三级在线播放| 成人午夜电影久久影院| 久久精品欧美日韩| 久久国产福利国产秒拍| 日本韩国视频一区二区| 中文字幕一区在线观看视频| 国产99久久久国产精品潘金| 欧美zozo另类异族| 奇米影视7777精品一区二区| 欧美在线free| 一区二区三区精品在线观看| av动漫一区二区| 中文字幕乱码日本亚洲一区二区 | 日韩激情一二三区| 欧美在线免费视屏| 一二三区精品视频| 在线一区二区三区四区五区| 国产精品久久久久影视| 成人av在线影院| 国产日韩欧美高清在线| 国产又粗又猛又爽又黄91精品| 91精品一区二区三区在线观看| 午夜视频在线观看一区二区 | 精品一区二区久久| 欧美一区二区三区播放老司机| 亚洲成av人片在线| 欧美日韩一卡二卡三卡| 亚洲国产成人porn| 欧美另类久久久品| 日精品一区二区| 538prom精品视频线放| 奇米一区二区三区| 精品国产免费一区二区三区香蕉| 久久精品国产亚洲aⅴ| 精品国产1区2区3区| 国产ts人妖一区二区| 国产精品黄色在线观看| 91亚洲国产成人精品一区二三| 国产精品国模大尺度视频| 99re在线视频这里只有精品| 亚洲激情自拍视频| 欧美日韩国产123区| 免费成人av在线播放| 亚洲精品一区二区三区四区高清 | 国产另类ts人妖一区二区| 精品国产精品网麻豆系列| 国产精品资源在线观看| 国产精品国产三级国产普通话99| av电影在线观看一区| 午夜日韩在线观看| 国产不卡视频一区二区三区| 成人午夜电影久久影院| 国内精品国产成人国产三级粉色| 一区二区三区中文字幕精品精品 | 亚洲aaa精品| 欧美一区二区三区电影| 狠狠色狠狠色综合日日91app| 国产亚洲制服色| 不卡的av在线播放| 午夜精品免费在线| 久久久久久久综合日本| 一本久道久久综合中文字幕 | 青青青伊人色综合久久| 国产亚洲成年网址在线观看| 99久久99久久精品免费观看| 丝袜亚洲另类欧美| 欧美激情一区在线| 欧美蜜桃一区二区三区| 国产91清纯白嫩初高中在线观看| 亚洲精品福利视频网站| 精品国产1区2区3区| 在线免费观看日本欧美| 国内成人自拍视频| 亚洲欧美另类在线| 欧美mv和日韩mv的网站| 91视频你懂的| 久久精品国产亚洲5555| 亚洲欧美日韩一区二区 | 首页亚洲欧美制服丝腿| 国产日韩欧美一区二区三区乱码| 欧美视频精品在线观看| 丁香婷婷综合激情五月色| 午夜久久久久久久久久一区二区| 中文字幕不卡在线观看| 在线不卡免费欧美| 972aa.com艺术欧美| 韩国av一区二区| 亚洲午夜激情av| 亚洲欧美综合在线精品| 26uuu另类欧美| 91麻豆精品国产91久久久资源速度| av亚洲精华国产精华| 精品亚洲成a人在线观看| 午夜亚洲国产au精品一区二区|