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

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

?? ts.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

ts.c

Transport stream processing and filter management.

*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdint.h>
#include <sys/time.h>

#include <dvbpsi/dvbpsi.h>
#include <dvbpsi/descriptor.h>
#include <dvbpsi/psi.h>
#include <dvbpsi/pat.h>
#include <dvbpsi/pmt.h>
#include "multiplexes.h"
#include "services.h"
#include "ts.h"

static void *FilterTS(void *arg);
static void ProcessPacket(TSFilter_t *state, TSPacket_t *packet);
static void InformTSStructureChanged(TSFilter_t *state);

TSFilter_t* TSFilterCreate(DVBAdapter_t *adapter)
{
    TSFilter_t *result = calloc(1, sizeof(TSFilter_t));
    if (result)
    {
        result->adapter = adapter;
        pthread_mutex_init(&result->mutex, NULL);
        pthread_create(&result->thread, NULL, FilterTS, result);
    }
    return result;
}

void TSFilterDestroy(TSFilter_t* tsfilter)
{
    tsfilter->quit = TRUE;
    pthread_join(tsfilter->thread, NULL);
    pthread_mutex_destroy(&tsfilter->mutex);
}

void TSFilterEnable(TSFilter_t* tsfilter, bool enable)
{
    pthread_mutex_lock(&tsfilter->mutex);
    tsfilter->enabled = enable;
    pthread_mutex_unlock(&tsfilter->mutex);
}

void TSFilterZeroStats(TSFilter_t* tsfilter)
{
    int i;

    /* Clear all filter stats */    tsfilter->totalpackets = 0;
    tsfilter->bitrate = 0;
    for (i = 0; i < MAX_FILTERS; i ++)    {
        if (tsfilter->pidfilters[i].allocated)
        {            tsfilter->pidfilters[i].filter.packetsfiltered  = 0;            tsfilter->pidfilters[i].filter.packetsprocessed = 0;            tsfilter->pidfilters[i].filter.packetsoutput    = 0;
        }    }
}

PIDFilter_t* PIDFilterAllocate(TSFilter_t* tsfilter)
{
    int i = 0;
    for (i = 0; i < MAX_FILTERS; i ++)
    {
        if (tsfilter->pidfilters[i].allocated == 0)
        {
            break;
        }
    }
    if (i == MAX_FILTERS)
    {
        return NULL;
    }

    memset(&tsfilter->pidfilters[i].filter, 0, sizeof(PIDFilter_t));
    tsfilter->pidfilters[i].filter.tsfilter = tsfilter;
    tsfilter->pidfilters[i].allocated = 1;

    return &tsfilter->pidfilters[i].filter;
}

void PIDFilterFree(PIDFilter_t * pidfilter)
{
    int i;
    for (i = 0; i < MAX_FILTERS; i ++)
    {
        if (&pidfilter->tsfilter->pidfilters[i].filter == pidfilter)
        {
            pidfilter->tsfilter->pidfilters[i].allocated = 0;
        }
    }
}

PIDFilter_t *PIDFilterSetup(TSFilter_t *tsfilter,
                            PacketFilter filterpacket,  void *fparg,
                            PacketProcessor processpacket, void *pparg,
                            PacketOutput outputpacket,  void *oparg)
{
    PIDFilter_t *filter;

    filter = PIDFilterAllocate(tsfilter);
    if (filter)
    {
        filter->filterpacket = filterpacket;
        filter->fparg = fparg;

        filter->processpacket = processpacket;
        filter->pparg = pparg;

        filter->outputpacket = outputpacket;
        filter->oparg = oparg;
    }
    return filter;
}

int PIDFilterSimpleFilter(PIDFilter_t *pidfilter, void *arg, uint16_t pid, TSPacket_t *packet)
{
    PIDFilterSimpleFilter_t *filter = (PIDFilterSimpleFilter_t*)arg;
    int i;
    for (i = 0; i < filter->pidcount; i ++)
    {
        if ((pid == filter->pids[i]) ||
            (filter->pids[i] == 8192)) /* Special case match all PIDs */
        {
            return 1;
        }
    }
    return 0;
}
/******************************************************************************
* Internal Functions                                                          *
******************************************************************************/
static void *FilterTS(void *arg)
{
	struct timeval now, last;
	int diff;
	int prevpackets = 0;

    TSFilter_t *state = (TSFilter_t*)arg;
    DVBAdapter_t *adapter = state->adapter;
    int count = 0;

	gettimeofday(&last, 0);

    while (!state->quit)
    {
        int p;
        //Read in packet
        count = DVBDVRRead(adapter, (char*)state->readbuffer, sizeof(state->readbuffer), 100);
        pthread_mutex_lock(&state->mutex);
        for (p = 0; (p < (count / TSPACKET_SIZE)) && state->enabled; p ++)
        {
            ProcessPacket(state, &state->readbuffer[p]);
            state->totalpackets ++;
            /* The structure of the transport stream has changed in a major way,
                (ie new services, services removed) so inform all of the filters
                that are interested.
              */
            if (state->tsstructurechanged)
            {
                InformTSStructureChanged(state);
                state->tsstructurechanged = FALSE;
            }
        }

		gettimeofday(&now, 0);
		diff =(now.tv_sec - last.tv_sec) * 1000 + (now.tv_usec - last.tv_usec) / 1000;
		if (diff > 1000)
		{
			// Work out bit rates
			state->bitrate = ((state->totalpackets - prevpackets) * (188 * 8));
			prevpackets = state->totalpackets;
			last = now;
		}
		pthread_mutex_unlock(&state->mutex);
    }
    return NULL;
}

static void ProcessPacket(TSFilter_t *state, TSPacket_t *packet)
{
    int i;
    uint16_t pid = TSPACKET_GETPID(*packet);

    for (i = 0; i < MAX_FILTERS; i ++)
    {
        if (state->pidfilters[i].allocated && state->pidfilters[i].filter.enabled)
        {
            PIDFilter_t *filter = &state->pidfilters[i].filter;
            if (filter->filterpacket && filter->filterpacket(filter, filter->fparg, pid, packet))
            {
                bool output = TRUE;
                TSPacket_t *outputPacket = packet;

                filter->packetsfiltered ++;

                if (filter->processpacket)
                {
                    outputPacket = filter->processpacket(filter, filter->pparg, packet);
                    output = (outputPacket) ? TRUE:FALSE;
                    filter->packetsprocessed ++;
                }

                if (output && filter->outputpacket)
                {
                    filter->outputpacket(filter, filter->oparg, outputPacket);
                    filter->packetsoutput ++;
                }
            }
        }
    }
}

static void InformTSStructureChanged(TSFilter_t *state)
{
    int i;

    for (i = 0; i < MAX_FILTERS; i ++)
    {
        if (state->pidfilters[i].allocated &&
            state->pidfilters[i].filter.enabled &&
            state->pidfilters[i].filter.tsstructurechanged)
        {
            PIDFilter_t *filter = &state->pidfilters[i].filter;
            filter->tsstructurechanged(filter, filter->tscarg);
        }
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本视频在线| 国产91精品精华液一区二区三区| 99久久亚洲一区二区三区青草| 日本一区二区三区四区在线视频| 国产99久久久国产精品潘金| 中文字幕巨乱亚洲| 91国偷自产一区二区三区成为亚洲经典| 亚洲欧美另类小说视频| 欧美日韩中文国产| 男女视频一区二区| 久久精品男人天堂av| 丁香六月久久综合狠狠色| 亚洲欧美在线观看| 51精品视频一区二区三区| 久久国产精品无码网站| 国产精品青草综合久久久久99| 色综合天天综合网国产成人综合天 | 国产精品高潮呻吟久久| 色综合久久久久久久久久久| 日韩不卡一区二区| 日本一区二区视频在线| 欧美亚洲尤物久久| 国产成人夜色高潮福利影视| 一区二区三区四区激情| 亚洲精品在线电影| 91国偷自产一区二区三区观看| 久久精品国产一区二区| 亚洲综合在线免费观看| 日韩亚洲欧美中文三级| 99精品欧美一区| 美女视频免费一区| 亚洲猫色日本管| 337p日本欧洲亚洲大胆色噜噜| 91在线观看视频| 久久精品国产一区二区三区免费看| 国产精品的网站| 日韩一卡二卡三卡国产欧美| 91视视频在线观看入口直接观看www| 日韩黄色一级片| 亚洲免费视频成人| 久久精品人人做人人爽97| 777亚洲妇女| 日本精品视频一区二区三区| 国产一区二区在线看| 亚洲成人福利片| 国产精品久久夜| 久久久亚洲综合| 91精品国产综合久久婷婷香蕉 | 日韩—二三区免费观看av| 国产精品国产三级国产专播品爱网 | 337p粉嫩大胆色噜噜噜噜亚洲| 色天天综合色天天久久| 国产激情偷乱视频一区二区三区| 香蕉成人伊视频在线观看| 综合婷婷亚洲小说| 国产亲近乱来精品视频| 精品久久国产字幕高潮| 欧美一区二区在线看| 欧美日韩激情一区二区三区| 色吧成人激情小说| 91欧美激情一区二区三区成人| 国产激情91久久精品导航| 国产曰批免费观看久久久| 美女在线视频一区| 日本不卡中文字幕| 日韩不卡一区二区三区| 日韩电影在线观看一区| 亚洲国产aⅴ成人精品无吗| 亚洲精品乱码久久久久久久久| 国产精品久久久久久久浪潮网站 | 蓝色福利精品导航| 日本不卡一二三| 免费观看一级欧美片| 日韩高清不卡一区二区三区| 日本aⅴ亚洲精品中文乱码| 婷婷激情综合网| 亚洲成人免费观看| 日韩一区精品视频| 免费欧美高清视频| 狠狠色丁香婷婷综合久久片| 久草精品在线观看| 国产99久久久精品| 99国产精品国产精品毛片| av高清不卡在线| 日本高清无吗v一区| 欧美日韩精品一二三区| 欧美一级在线观看| 久久色视频免费观看| 日本一区二区三区在线不卡| 18成人在线观看| 一区二区三区四区高清精品免费观看 | 日韩高清在线观看| 久久99这里只有精品| 国产麻豆精品一区二区| av电影在线观看一区| 欧洲精品视频在线观看| 91精品国产一区二区三区香蕉| 91麻豆精品国产无毒不卡在线观看 | 欧美日精品一区视频| 91精品国产91久久久久久一区二区 | 26uuu国产一区二区三区| 欧美高清一级片在线观看| 中文字幕亚洲在| 日韩国产欧美视频| 成人免费毛片app| 日本道免费精品一区二区三区| 91麻豆精品国产自产在线观看一区 | 欧美日韩黄色影视| 久久看人人爽人人| 亚洲精品免费看| 久久福利视频一区二区| 本田岬高潮一区二区三区| 欧美精品久久久久久久多人混战| 精品精品国产高清一毛片一天堂| 国产精品看片你懂得| 免费观看日韩av| 91亚洲国产成人精品一区二区三| 欧美电影在线免费观看| 国产精品麻豆久久久| 日本三级亚洲精品| eeuss鲁片一区二区三区在线看| 欧美精品在线一区二区三区| 国产婷婷精品av在线| 亚瑟在线精品视频| 成+人+亚洲+综合天堂| 制服丝袜av成人在线看| 亚洲欧美视频在线观看| 久久99精品一区二区三区三区| 91免费精品国自产拍在线不卡| 欧美成人激情免费网| 亚洲午夜久久久久久久久电影院| 国产高清一区日本| 日韩一级二级三级| 一二三区精品福利视频| 成人av免费在线播放| 欧美精品一区二区三区在线| 午夜欧美一区二区三区在线播放| 成人黄色国产精品网站大全在线免费观看 | 精品系列免费在线观看| 欧美无砖砖区免费| ●精品国产综合乱码久久久久| 国产一区二区免费看| 欧美一区二区三区免费观看视频 | 日韩av一区二| 欧美影院一区二区三区| 国产精品久久99| 国产不卡免费视频| 精品国产乱码久久久久久牛牛 | 欧美高清性hdvideosex| 亚洲综合激情另类小说区| jlzzjlzz欧美大全| 欧美激情一区三区| 国产精品18久久久久久久久| 精品美女一区二区| 狠狠色综合色综合网络| 欧美成人精品福利| 另类小说色综合网站| 欧美一区二区三区啪啪| 免费在线观看视频一区| 91精品国产手机| 免费在线观看一区二区三区| 91精品国产福利在线观看| 日韩在线一区二区三区| 91精品国产一区二区三区蜜臀| 天天av天天翘天天综合网色鬼国产 | 日韩精品午夜视频| 欧美精品 国产精品| 免费在线看一区| 精品国产免费一区二区三区香蕉| 久久er精品视频| 国产偷国产偷亚洲高清人白洁| 国产一区二区三区精品视频| 久久夜色精品国产欧美乱极品| 国产成人午夜片在线观看高清观看| 久久久噜噜噜久久中文字幕色伊伊| 国产综合一区二区| 欧美国产一区在线| 91在线云播放| 性做久久久久久免费观看| 91麻豆精品91久久久久同性| 久久精品99久久久| 欧美国产综合一区二区| 色综合久久久久网| 亚洲成av人片一区二区三区| 91精品国产91久久久久久一区二区| 久久丁香综合五月国产三级网站| 国产欧美视频一区二区三区| 91丨porny丨最新| 天堂影院一区二区| 精品国产精品一区二区夜夜嗨| 成人黄动漫网站免费app| 亚洲尤物在线视频观看| 欧美一级午夜免费电影| 国产激情91久久精品导航 | 中文字幕一区二区三区乱码在线| 色中色一区二区| 男女男精品视频| 国产精品家庭影院| 日韩一区二区中文字幕| av中文一区二区三区|