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

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

?? pmtprocessor.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, USApmtprocessor.cProcess Program Map Tables and update the services information and PIDs.*/#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <stdint.h>#include <assert.h>#include <dvbpsi/dvbpsi.h>#include <dvbpsi/descriptor.h>#include <dvbpsi/dr.h>#include <dvbpsi/pmt.h>#include "multiplexes.h"#include "services.h"#include "dvb.h"#include "ts.h"#include "main.h"#include "cache.h"#include "logging.h"#define MAX_HANDLES 256typedef struct PMTProcessor_t{    Multiplex_t   *multiplex;    Service_t     *services[MAX_HANDLES];    unsigned short pmtpids[MAX_HANDLES];    dvbpsi_handle  pmthandles[MAX_HANDLES];}PMTProcessor_t;static int PMTProcessorFilterPacket(PIDFilter_t *pidfilter, void *arg, uint16_t pid, TSPacket_t *packet);static TSPacket_t *PMTProcessorProcessPacket(PIDFilter_t *pidfilter, void *arg, TSPacket_t *packet);static void PMTProcessorTSStructureChanged(PIDFilter_t *pidfilter, void *arg);static void PMTHandler(void* arg, dvbpsi_pmt_t* newpmt);PIDFilter_t *PMTProcessorCreate(TSFilter_t *tsfilter){    PIDFilter_t *result = NULL;    PMTProcessor_t *state = calloc(1, sizeof(PMTProcessor_t));    if (state)    {        result =  PIDFilterSetup(tsfilter,                    PMTProcessorFilterPacket, state,                    PMTProcessorProcessPacket, state,                    NULL,NULL);        if (!result)        {            free(state);        }        PIDFilterTSStructureChangeSet(result, PMTProcessorTSStructureChanged, state);    }    return result;}void PMTProcessorDestroy(PIDFilter_t *filter){    PMTProcessor_t *state = (PMTProcessor_t *)filter->fparg;    int i;    assert(filter->filterpacket == PMTProcessorFilterPacket);    PIDFilterFree(filter);    for (i = 0; i < MAX_HANDLES; i ++)    {        if (state->pmthandles[i])        {            dvbpsi_DetachPMT(state->pmthandles[i]);            state->pmtpids[i]    = 0;            state->pmthandles[i] = NULL;            state->services[i]   = NULL;        }    }    free(state);}static int PMTProcessorFilterPacket(PIDFilter_t *pidfilter, void *arg, uint16_t pid, TSPacket_t *packet){    if (CurrentMultiplex)    {        int i;        int count;        Service_t **services;        services = CacheServicesGet(&count);        for (i = 0; i < count; i ++)        {            if (pid == services[i]->pmtpid)            {                return 1;            }        }    }    return 0;}static TSPacket_t * PMTProcessorProcessPacket(PIDFilter_t *pidfilter, void *arg, TSPacket_t *packet){    TSPacket_t *result = NULL;    PMTProcessor_t *state = (PMTProcessor_t *)arg;    unsigned short pid = TSPACKET_GETPID(*packet);    int i;    if (CurrentMultiplex == NULL)    {        return 0;    }    if (state->multiplex != CurrentMultiplex)    {        int count;        Service_t **services;        for (i = 0; i < MAX_HANDLES; i ++)        {            if (state->pmthandles[i])            {                dvbpsi_DetachPMT(state->pmthandles[i]);                state->pmtpids[i]    = 0;                state->pmthandles[i] = NULL;                state->services[i]   = NULL;            }        }        services = CacheServicesGet(&count);        if (count > MAX_HANDLES)        {            printlog(LOG_ERROR,"Too many services in TS, cannot monitor them all only monitoring %d out of %d\n", MAX_HANDLES, count);            count = MAX_HANDLES;        }        for (i = 0; i < count; i ++)        {            state->pmtpids[i] = services[i]->pmtpid;            state->services[i] = services[i];            state->pmthandles[i] = dvbpsi_AttachPMT(services[i]->id, PMTHandler, (void*)services[i]);        }        state->multiplex = (Multiplex_t*)CurrentMultiplex;    }    for (i = 0; i < MAX_HANDLES; i ++)    {        if (state->pmthandles[i] && state->pmtpids[i] == pid)        {            /* Different program PMTs may be on the same so pass the packet to               all handlers that match the pid            */            dvbpsi_PushPacket(state->pmthandles[i], (uint8_t*)packet);        }    }    return result;}static void PMTProcessorTSStructureChanged(PIDFilter_t *pidfilter, void *arg){    PMTProcessor_t *state = (PMTProcessor_t *)arg;#if 0    int i,count;    Service_t **services;    services = CacheServicesGet(&count);    for (i = 0; i < MAX_HANDLES; i ++)    {        if (state->pmthandles[i])        {            int found = 0;            int s;            for (s = 0; s < count; s ++)            {                if (ServiceAreEqual(state->services[i], services[s]))                {                    found = 1;                    break;                }            }            if (!found)            {                dvbpsi_DetachPMT(state->pmthandles[i]);                state->pmtpids[i]    = 0;                state->pmthandles[i] = NULL;                state->services[i]   = NULL;            }        }    }    /* Look for services that we are currently not monitoring ie 'new' services */    for (i = 0; i < count; i ++)    {        int found = 0;        int emptyIndex = -1;        int index;        for (index = 0; index < MAX_HANDLES; index++)        {            if (state->pmthandles[index] == NULL)            {                if (emptyIndex == -1)                {                    emptyIndex = i;                }                continue;            }            if ((state->pmthandles[index] != NULL) && ServiceAreEqual(state->services[index], services[i]))            {                found = 1;                break;            }        }        if (!found && (emptyIndex != -1))        {            state->pmtpids[emptyIndex] = services[i]->pmtpid;            state->services[emptyIndex] = services[i];            state->pmthandles[emptyIndex] = dvbpsi_AttachPMT(services[i]->id, PMTHandler, (void*)services[i]);        }    }#else    printlog(LOG_DEBUG,"PMTProcessor: TS Structure changed!\n");    state->multiplex = NULL;#endif}static void PMTHandler(void* arg, dvbpsi_pmt_t* newpmt){    Service_t *service = (Service_t*)arg;    printlog(LOG_DEBUG,"PMT recieved, version %d on PID %d (old version %d)\n", newpmt->i_version, service->pmtpid, service->pmtversion);    if (service->pmtversion != newpmt->i_version)    {        // Version has changed update the pids        PID_t *pids;        dvbpsi_pmt_es_t *esentry = newpmt->p_first_es;        int count = 1;        while(esentry)        {            esentry = esentry->p_next;            count ++;        }        printlog(LOG_DEBUGV,"%d PIDs in PMT\n", count);        pids = calloc(count, sizeof(PID_t));        if (pids)        {            int i;            esentry = newpmt->p_first_es;            // Store PCR PID            pids[0].pid = newpmt->i_pcr_pid;            pids[0].type = 0;            pids[0].subtype = 0;            for (i = 1; i < count; i ++)            {                printlog(LOG_DEBUGV, "0x%04x %d\n", esentry->i_pid, esentry->i_type);                pids[i].pid = esentry->i_pid;                pids[i].type = esentry->i_type;#if 0                if ((esentry->i_type == 3) || (esentry->i_type == 4))                {                    dvbpsi_descriptor_t *desc = esentry->p_first_descriptor;                    while(desc)                    {                        printlog(LOG_DEBUGV,"Descriptor %d\n", desc->i_tag);                        if (desc->i_tag == 10) /* ISO 639 Language Descriptor */                        {                            dvbpsi_iso639_dr_t *iso639 = (dvbpsi_iso639_dr_t*)desc->p_decoded;                            pids[i].subtype = iso639->i_audio_type;                        }                        desc = desc->p_next;                    }                }                else#endif                {                    pids[i].subtype = 0;                }                esentry = esentry->p_next;            }            printlog(LOG_DEBUGV,"About to update cache\n");            CacheUpdatePIDs(service, pids, count, newpmt->i_version);        }    }    dvbpsi_DeletePMT(newpmt);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性极品少妇| 不卡视频在线观看| 久久亚洲综合色一区二区三区| 午夜精品福利久久久| 777色狠狠一区二区三区| 免费久久99精品国产| 精品少妇一区二区三区在线播放| 捆绑调教美女网站视频一区| 久久久久97国产精华液好用吗| 成人午夜视频在线观看| 亚洲日本护士毛茸茸| 欧美日韩国产一区二区三区地区| 日韩成人免费看| 久久精品无码一区二区三区| av在线综合网| 日本成人在线不卡视频| 国产日产亚洲精品系列| 色香色香欲天天天影视综合网| 亚洲r级在线视频| 久久久久久久久伊人| 不卡在线观看av| 亚洲成人自拍网| 久久奇米777| 91福利在线看| 国内不卡的二区三区中文字幕| 国产精品高清亚洲| 欧美丰满一区二区免费视频| 国产九色精品成人porny| 亚洲免费av观看| 精品蜜桃在线看| 91蝌蚪国产九色| 久久成人免费日本黄色| 亚洲免费av高清| 久久色成人在线| 91福利精品第一导航| 国产精品亚洲综合一区在线观看| 亚洲综合一区二区精品导航| 2021久久国产精品不只是精品| 日本高清不卡一区| 国产在线视频一区二区三区| 亚洲一区二区三区四区在线观看 | 国产资源在线一区| 亚洲精品国产视频| 久久久久久97三级| 欧美日本一区二区| 成人精品电影在线观看| 久久成人免费网站| 亚洲v日本v欧美v久久精品| 一色桃子久久精品亚洲| 精品第一国产综合精品aⅴ| 欧美三级视频在线播放| 成人av在线播放网站| 久久国产欧美日韩精品| 五月婷婷综合激情| 伊人色综合久久天天人手人婷| 国产农村妇女精品| 久久婷婷一区二区三区| 精品乱人伦小说| 欧美丰满一区二区免费视频| 欧美视频完全免费看| 99久久国产综合精品女不卡| 国产激情91久久精品导航 | 国内精品伊人久久久久av影院| 亚洲自拍偷拍九九九| 中文字幕一区av| 国产精品美女一区二区在线观看| 久久久久久久久久久99999| 欧美一区中文字幕| 欧美一区二区视频免费观看| 欧美日韩免费高清一区色橹橹| 色婷婷久久一区二区三区麻豆| 99久久99久久久精品齐齐| 高清不卡一区二区| 成人一区在线看| 国产成+人+日韩+欧美+亚洲 | 国产福利不卡视频| 国产激情偷乱视频一区二区三区| 国产福利91精品一区二区三区| 国产一区二区在线看| 国产一区二区三区四| 国产精品91一区二区| 国产91精品免费| 91免费在线视频观看| 色999日韩国产欧美一区二区| 色老汉av一区二区三区| 欧美日韩一区小说| 制服.丝袜.亚洲.中文.综合| 欧美一区二区久久| 精品欧美久久久| 欧美韩国日本不卡| 亚洲视频你懂的| 亚洲高清在线视频| 久久精品国产亚洲高清剧情介绍| 精品一区二区三区久久久| 精品在线观看视频| 成人性生交大片免费看在线播放| 成人av电影在线网| 欧美中文字幕不卡| 欧美不卡在线视频| 中文字幕精品在线不卡| 一区二区中文字幕在线| 亚洲成人av电影在线| 黑人精品欧美一区二区蜜桃| 成人黄色av网站在线| 欧美专区日韩专区| 26uuu亚洲综合色| 亚洲色图色小说| 日韩av电影天堂| 不卡电影免费在线播放一区| 欧美视频你懂的| 久久蜜桃香蕉精品一区二区三区| 日本一区二区三区免费乱视频| 一区二区三区中文字幕| 麻豆视频观看网址久久| av在线免费不卡| 日韩你懂的在线观看| 亚洲视频图片小说| 黄页网站大全一区二区| 一本色道久久综合亚洲精品按摩| 欧美一级理论性理论a| 国产精品视频第一区| 日本伊人精品一区二区三区观看方式| 国产精品中文字幕日韩精品| 日本电影欧美片| 久久久久久久久免费| 亚洲成a人在线观看| 成人激情视频网站| 精品精品欲导航| 亚洲成人免费视频| www.色综合.com| 久久一夜天堂av一区二区三区| 亚洲国产精品自拍| 成人黄色一级视频| 欧美精品一区二区三区蜜桃| 午夜久久久久久| 日本国产一区二区| 国产精品电影院| 国产激情精品久久久第一区二区 | 欧美韩日一区二区三区四区| 日韩va亚洲va欧美va久久| 91欧美一区二区| 日本一区二区综合亚洲| 日韩av电影天堂| 欧美曰成人黄网| 亚洲欧美在线aaa| 精品一二三四区| 日韩一区二区三区电影| 亚洲在线一区二区三区| eeuss鲁一区二区三区| 久久一夜天堂av一区二区三区| 日本网站在线观看一区二区三区| 欧美吻胸吃奶大尺度电影| 国产精品国产三级国产| 成人av网站免费观看| 欧美经典一区二区三区| 国产一区二区福利视频| 日韩美女天天操| 久久精品国产99久久6| 日韩一级高清毛片| 奇米综合一区二区三区精品视频| 精品视频一区三区九区| 亚洲午夜羞羞片| 97se亚洲国产综合自在线不卡| 国产精品国产自产拍高清av| 成人亚洲精品久久久久软件| 久久精品人人做| 粉嫩av一区二区三区在线播放| 久久精品一二三| 成人av综合一区| 亚洲少妇30p| 欧美制服丝袜第一页| 亚洲成人av中文| 日韩一区二区三区电影| 性做久久久久久久久| 欧美日韩精品欧美日韩精品| 无吗不卡中文字幕| 欧美一级片免费看| 精品亚洲国内自在自线福利| 国产午夜精品一区二区| 懂色一区二区三区免费观看| 国产精品久久久久婷婷| 91片在线免费观看| 首页国产丝袜综合| 精品sm捆绑视频| 国产乱码精品一区二区三| 国产精品欧美久久久久一区二区| 成人激情av网| 亚洲h在线观看| 久久综合久久综合久久综合| 粉嫩在线一区二区三区视频| 亚洲激情五月婷婷| 91精品欧美综合在线观看最新| 精品一区精品二区高清| 中文字幕第一区二区| 欧洲国内综合视频| 青青草91视频| 国产精品高潮呻吟| 91精品综合久久久久久| 国产成人小视频| 亚洲一区二区免费视频|