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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dvb.c

?? linux下的dvb收看解析軟件代碼; 帶參考程序
?? C
字號:
/*
Copyright (C) 2006  Adam Charrett
 
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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 
dvb.c
 
Opens/Closes and setups dvb adapter for use in the rest of the application.
 
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/poll.h>
#include <sys/ioctl.h>
#include <linux/dvb/dmx.h>
#include <linux/dvb/frontend.h>

#include "dvb.h"
#include "logging.h"

DVBAdapter_t *DVBInit(int adapter)
{
    DVBAdapter_t *result = NULL;
    result = (DVBAdapter_t*)calloc(sizeof(DVBAdapter_t), 1);
    if (result)
    {
        result->frontendfd = -1;
        result->demuxfd = -1;
        result->dvrfd = -1;
        result->adapter = adapter;
        sprintf(result->frontendPath, "/dev/dvb/adapter%d/frontend0", adapter);
        sprintf(result->demuxPath, "/dev/dvb/adapter%d/demux0", adapter);
        sprintf(result->dvrPath, "/dev/dvb/adapter%d/dvr0", adapter);
        result->frontendfd = open(result->frontendPath, O_RDWR);
        if (result->frontendfd == -1)
        {
            printlog(LOG_ERROR,"Failed to open %s : %s\n",result->frontendPath, strerror(errno));
            DVBDispose(result);
            return NULL;
        }
        result->demuxfd = open(result->demuxPath, O_RDWR);
        if (result->demuxfd == -1)
        {
            printlog(LOG_ERROR,"Failed to open %s : %s\n",result->demuxPath, strerror(errno));
            DVBDispose(result);
            return NULL;
        }
        result->dvrfd = open(result->dvrPath, O_RDONLY | O_NONBLOCK);
        if (result->dvrfd == -1)
        {
            printlog(LOG_ERROR,"Failed to open %s : %s\n",result->dvrPath, strerror(errno));
            DVBDispose(result);
            return NULL;
        }
    }
    return result;
}
void DVBDispose(DVBAdapter_t *adapter)
{
    if (adapter->dvrfd > -1)
    {
        printlog(LOG_DEBUGV,"Closing DVR file descriptor\n");
        close(adapter->dvrfd);
    }
    if (adapter->demuxfd > -1)
    {
        printlog(LOG_DEBUGV,"Closing Demux file descriptor\n");
        close(adapter->demuxfd);
    }
    if (adapter->frontendfd > -1)
    {
        printlog(LOG_DEBUGV,"Closing Frontend file descriptor\n");
        close(adapter->frontendfd);
    }
    free(adapter);
}

int DVBFrontEndTune(DVBAdapter_t *adapter, struct dvb_frontend_parameters *frontend)
{
    fe_status_t status = 0;
    /*  fe_status_t festatus; */
    struct dvb_frontend_event event;
    unsigned int strength;
    struct pollfd pfd[1];

    if (ioctl(adapter->frontendfd, FE_SET_FRONTEND, frontend) < 0)
    {
        printlog(LOG_ERROR,"setfront front: %s\n", strerror(errno));
        return 0;
    }

    pfd[0].fd = adapter->frontendfd;
    pfd[0].events = POLLIN;

    if (poll(pfd,1,3000))
    {
        if (pfd[0].revents & POLLIN)
        {
            if (ioctl(adapter->frontendfd, FE_GET_EVENT, &event) == -EOVERFLOW)
            {
                printlog(LOG_ERROR,"EOVERFLOW");
                return 0;
            }
            if (event.parameters.frequency <= 0)
            {
                return 0;
            }
        }
    }
#if 0
    do
    {
        status = 0;
        if (ioctl(adapter->frontendfd, FE_READ_STATUS, &status) < 0)
        {
            printlog(LOG_ERROR,"fe get event: %s\n", strerror(errno));
            return 0;
        }

        printlog(LOG_DEBUGV,"status: %x\n", status);
        if (status & FE_HAS_LOCK)
        {
            break;
        }
        usleep(500000);
        printlog(LOG_DEBUGV,"Trying to get lock...");
    }
    while (!(status & FE_TIMEDOUT));

    /* inform the user of frontend status */
    printlog(LOG_INFO,"Tuner status:  %c%c%c%c%c%c\n",
             (status & FE_HAS_SIGNAL)?'S':' ',
             (status & FE_TIMEDOUT)?'T':' ',
             (status & FE_HAS_LOCK)?'L':' ',
             (status & FE_HAS_CARRIER)?'C':' ',
             (status & FE_HAS_VITERBI)?'V':' ',
             (status & FE_HAS_SYNC)?'s':' '
            );

    strength=0;
    if(ioctl(adapter->frontendfd,FE_READ_BER,&strength) >= 0)
        printlog(LOG_INFO," Bit error rate: %i\n",strength);

    strength=0;
    if(ioctl(adapter->frontendfd,FE_READ_SIGNAL_STRENGTH,&strength) >= 0)
        printlog(LOG_INFO," Signal strength: %i\n",strength);

    strength=0;
    if(ioctl(adapter->frontendfd,FE_READ_SNR,&strength) >= 0)
        printlog(LOG_INFO," Signal/Noise Ratio: %i\n",strength);

    if (status & FE_HAS_LOCK && !(status & FE_TIMEDOUT))
    {
        printlog(LOG_DEBUGV," Lock achieved at %lu Hz\n",(unsigned long)frontend->frequency);
        return 1;
    }
    else
    {
        printlog(LOG_DEBUGV,"Unable to achieve lock at %lu Hz\n",(unsigned long)frontend->frequency);
        return 0;
    }
#endif
    return 1;
}

int DVBFrontEndStatus(DVBAdapter_t *adapter, fe_status_t *status, unsigned int *ber, unsigned int *strength, unsigned int *snr)
{
    if (ioctl(adapter->frontendfd, FE_READ_STATUS, status) < 0)
    {
        printlog(LOG_ERROR,"FE_READ_STATUS: %s\n", strerror(errno));
        return 0;
    }

    if(ioctl(adapter->frontendfd,FE_READ_BER, ber) < 0)
    {
        printlog(LOG_ERROR,"FE_READ_BER: %s\n", strerror(errno));
        return 0;
    }

    if(ioctl(adapter->frontendfd,FE_READ_SIGNAL_STRENGTH,strength) < 0)
    {
        printlog(LOG_ERROR,"FE_READ_SIGNAL_STRENGTH: %s\n", strerror(errno));
        return 0;
    }


    if(ioctl(adapter->frontendfd,FE_READ_SNR,snr) < 0)
    {
        printlog(LOG_ERROR,"FE_READ_SNR: %s\n", strerror(errno));
        return 0;
    }
    return 1;
}

int DVBDemuxStreamEntireTSToDVR(DVBAdapter_t *adapter)
{
    return DVBDemuxSetPESFilter(adapter, 8192, DMX_PES_OTHER, DMX_OUT_TS_TAP);
}

int DVBDemuxSetPESFilter(DVBAdapter_t *adapter, ushort pid, int pidtype, int taptype)
{
    struct dmx_pes_filter_params pesFilterParam;

    pesFilterParam.pid = pid;
    pesFilterParam.input = DMX_IN_FRONTEND;
    pesFilterParam.output = taptype;
    pesFilterParam.pes_type = pidtype;
    pesFilterParam.flags = DMX_IMMEDIATE_START;
    if (ioctl(adapter->demuxfd, DMX_SET_PES_FILTER, &pesFilterParam) < 0)
    {
        printlog(LOG_ERROR,"set_pid: %s\n", strerror(errno));
        return 0;
    }
    return 1;
}

int DVBDVRRead(DVBAdapter_t *adapter, char *data, int max, int timeout)
{
    int result = -1;
    struct pollfd pfd[1];

    pfd[0].fd = adapter->dvrfd;
    pfd[0].events = POLLIN;

    if (poll(pfd,1,timeout))
    {
        if (pfd[0].revents & POLLIN)
        {
            result = read(adapter->dvrfd, data, max);
        }
    }
    return result;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕高清一区| 国产精品三级av在线播放| 国产麻豆精品95视频| 一区二区在线观看不卡| 精品国产一区久久| 欧美日韩久久不卡| 一本一道波多野结衣一区二区| 免费成人av在线| 亚洲成人免费视频| 日韩一区在线播放| 久久久精品免费免费| 51精品久久久久久久蜜臀| 99视频在线观看一区三区| 国产精品综合一区二区三区| 日韩电影免费在线看| 亚洲香肠在线观看| 亚洲乱码国产乱码精品精的特点| 国产日韩一级二级三级| 精品国产一区二区三区久久久蜜月| 欧美无砖专区一中文字| 色综合天天做天天爱| 成人永久免费视频| 国产精品18久久久久久久久久久久| 免费精品视频在线| 婷婷综合五月天| 亚洲成人免费av| 一级做a爱片久久| 亚洲欧美激情在线| 国产精品麻豆99久久久久久| 国产欧美一区二区精品秋霞影院 | 美腿丝袜亚洲色图| 亚洲图片自拍偷拍| 一卡二卡欧美日韩| 亚洲午夜视频在线观看| 日韩电影免费在线观看网站| 亚洲激情综合网| 一区二区欧美视频| 尤物视频一区二区| 一区二区成人在线观看| 亚洲自拍都市欧美小说| 亚洲国产成人av网| 亚洲妇女屁股眼交7| 婷婷综合另类小说色区| 美女视频一区二区| 老司机免费视频一区二区 | 三级一区在线视频先锋| 亚洲高清免费在线| 日韩电影一二三区| 激情图片小说一区| 风间由美性色一区二区三区| 成人av影院在线| 91国产视频在线观看| 欧美绝品在线观看成人午夜影视| 欧美精品粉嫩高潮一区二区| 91精品国产91久久久久久最新毛片| 日韩一区二区电影在线| 欧美精品一区二区三区很污很色的 | 日本一区中文字幕 | 大桥未久av一区二区三区中文| 粉嫩aⅴ一区二区三区四区五区| 不卡一区中文字幕| 91国偷自产一区二区开放时间| 欧美午夜在线一二页| 4438x成人网最大色成网站| 精品国产乱码久久久久久久久| 亚洲国产精品成人综合| 亚洲视频电影在线| 日本色综合中文字幕| 国产精品一区二区视频| 91在线视频网址| 宅男在线国产精品| 国产亚洲一二三区| 亚洲综合色网站| 国产在线一区二区综合免费视频| 成人免费观看男女羞羞视频| 欧美性猛片xxxx免费看久爱| 欧美电影免费观看高清完整版在线观看 | 琪琪一区二区三区| 国产福利精品一区| 欧洲av一区二区嗯嗯嗯啊| 日韩一级片在线播放| 国产精品美女久久久久久久| 天堂在线亚洲视频| 不卡电影免费在线播放一区| 欧美日韩美少妇| 国产三区在线成人av| 午夜一区二区三区在线观看| 国产精品99精品久久免费| 欧美四级电影在线观看| 国产亚洲女人久久久久毛片| 香蕉久久夜色精品国产使用方法| 东方欧美亚洲色图在线| 欧美一区二区三区视频在线 | 国产风韵犹存在线视精品| 欧美在线色视频| 午夜成人免费电影| 国产精品综合一区二区| 777午夜精品免费视频| 亚洲特黄一级片| 国产毛片一区二区| 6080国产精品一区二区| 亚洲精品国产品国语在线app| 国产麻豆一精品一av一免费 | 日韩一区二区三区视频| 亚洲视频综合在线| 国产精品白丝jk黑袜喷水| 欧美顶级少妇做爰| 亚洲最大成人网4388xx| 不卡的看片网站| 国产农村妇女毛片精品久久麻豆 | 99麻豆久久久国产精品免费 | 国产激情视频一区二区三区欧美| 欧美日韩成人在线一区| 亚洲精品国产视频| 99久久精品99国产精品| 国产色综合久久| 激情综合色播激情啊| 欧美一区二区视频在线观看2020 | 欧美电视剧免费观看| 亚洲国产成人va在线观看天堂| 91久久精品一区二区| 国产精品国产精品国产专区不片| 麻豆91小视频| 日韩三级在线免费观看| 日本sm残虐另类| 日韩一区二区在线播放| 三级一区在线视频先锋| 欧美精品久久一区| 天堂资源在线中文精品| 欧美在线高清视频| 亚洲福中文字幕伊人影院| 欧美视频完全免费看| 夜夜嗨av一区二区三区| 日本乱人伦一区| 亚洲一区二区av电影| 欧美色老头old∨ideo| 亚洲国产精品久久久久秋霞影院 | 美女看a上一区| 日韩欧美成人一区| 久久机这里只有精品| 日韩精品最新网址| 国产激情视频一区二区在线观看 | 亚洲成精国产精品女| 欧美理论电影在线| 伦理电影国产精品| 精品欧美一区二区三区精品久久| 极品少妇xxxx精品少妇| 久久婷婷成人综合色| 高清久久久久久| 亚洲天堂中文字幕| 精品视频在线免费| 免费在线欧美视频| 国产欧美日韩在线观看| av电影天堂一区二区在线观看| 樱花草国产18久久久久| 欧美精品久久久久久久久老牛影院| 麻豆精品视频在线观看免费| 久久婷婷色综合| 色综合久久综合| 日韩精品欧美精品| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 播五月开心婷婷综合| 一区二区三区欧美日| 日韩欧美一级在线播放| 国产91富婆露脸刺激对白| 亚洲另类春色国产| 欧美大片一区二区| 暴力调教一区二区三区| 亚洲电影在线免费观看| 337p日本欧洲亚洲大胆色噜噜| av影院午夜一区| 婷婷成人激情在线网| 久久看人人爽人人| 在线精品视频一区二区| 免费成人在线网站| 亚洲色图在线视频| 91麻豆精品国产91久久久| 丁香六月久久综合狠狠色| 亚洲成人一区在线| 亚洲国产精品黑人久久久| 欧美日韩精品一区二区天天拍小说 | 欧美精品一区二区三区在线| 99久久综合精品| 免费成人av资源网| 亚洲精品久久久久久国产精华液| 日韩丝袜情趣美女图片| 色综合久久久久| 狠狠色狠狠色综合系列| 亚洲自拍都市欧美小说| 欧美激情综合五月色丁香| 欧美一区二区在线观看| 色视频欧美一区二区三区| 国产一区亚洲一区| 天天综合天天综合色| 国产精品免费久久| 精品成人在线观看| 欧美日本韩国一区| 色哟哟亚洲精品| 成人免费毛片嘿嘿连载视频| 精品在线播放午夜|