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

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

?? cas_parser.c

?? Sun公司Dream項目
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the "License").  You may not use this file except
 * in compliance with the License.
 *
 * You can obtain a copy of the license at
 * http://www.opensource.org/licenses/cddl1.php
 * See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL
 * HEADER in each file and include the License file at
 * http://www.opensource.org/licenses/cddl1.php.  If 
 * applicable, add the following below this CDDL HEADER, 
 * with the fields enclosed by brackets "[]" replaced 
 * with your own identifying information: 
 * Portions Copyright [yyyy]
 * [name of copyright owner]
 */ 

/*
 * $(@)cas_parser.c $Revision: 1.1.1.1 $ $Date: 2006/04/17 22:47:29 $
 * 
 * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
 */
/*
 * Copyright (c) 2005 by Sun Microsystems, Inc.
 * Functions to perform TS parsing

 * Created:   July 29, 2005
 * Author:    Yongfang Liang
 *---------------------------------------------------------------*/
 
#include  "cas_sys.h"

static void mpeg2GatherTS(Mpeg2Ts mpeg2Ts, Pipe pipe)
{
    ca_sys_p          p_sys = (ca_sys_p)mpeg2Ts->token; 
    ca_ts_pck_p       p_ts_pkt = NULL;

    p_ts_pkt = PIPE_PEEK(pipe, ca_ts_pck_t);
    memcpy(&(p_sys->pkt_buf.data[0]), p_ts_pkt, sizeof(ca_ts_pck_t));
    return;
}

static RetCode   mpeg2PatInfoCallback (void *token, Mpeg2PatInfo *infop,
				               RetCode retCode)
{
    ca_sys_p          p_sys = (ca_sys_p)token;
    unsigned            pex;
    Mpeg2PatSection     *curPsp = &(infop->patSection);

    for (pex = 0; pex < curPsp->nPatEntries; pex++) 
    {
        Mpeg2PatEntry   *pep      = &curPsp->patEntries[pex];
        unsigned        pn        = MPEG2_PAT_ENTRY_PROGRAM_NUMBER(pep);
        unsigned        pid       = MPEG2_PAT_ENTRY_PROGRAM_MAP_PID(pep);
        p_sys->pid[pid].b_seen    = TRUE;
        p_sys->pid[pid].pn        = pn;
        p_sys->pid[pid].b_pmt_pid = TRUE;
    }
    return RETCODE_SUCCESS;
    
}

static RetCode   mpeg2GatherTSCallback (void *token, Mpeg2TsInfo *infop,
				                RetCode retCode)
{
    ca_sys_p          p_sys = (ca_sys_p)token;
    unsigned          pid;
    Pipe              pidPipe  = NULL;
    #define MPEG2_TS_GATHER_TS 7

    if ((retCode & 0xffff) == MPEG2_TS_GATHER_TS)
    {
        mpeg2GatherTS((Mpeg2Ts)token, (Pipe)infop);
        return RETCODE_SUCCESS;
    }

    pid = MPEG2_TS_TRANSPORT_PACKET_PID(&infop->transportPacket);
    pidPipe = MMP_CONTEXT_PIDTOPIPE(p_sys->mpeg2TScop, pid);

    if (p_sys->tsCallback)
    {
    	(*p_sys->tsCallback)(p_sys->ts_token, infop->position);
    }
    
    if (pidPipe != PIPE_NULL && pidPipe != NULL)
    {
    	if (pid == MPEG2_TS_NULL_PID || pid == MPEG2_TS_PAT_PID
    		|| pid == MPEG2_TS_CAT_PID)
    	{
    		/* break: output the packet as it is */
			/* output the packet  */
    		pipeSync(p_sys->outpipe);
    		pipePut(p_sys->outpipe,&(p_sys->pkt_buf.data[0]), MPEG2_TS_PKT_SIZE, FALSE, p_sys->putPosition);
			p_sys->putPosition += MPEG2_TS_PKT_SIZE;
    	}
    	else  /* pmt */
    	{
    		if (infop->transportPacket.adaptationFieldControl == MPEG2_TS_ADAPTATION_FIELD_CONTROL_ADAPTATION_ONLY 
    			|| infop->transportPacket.adaptationFieldControl == MPEG2_TS_ADAPTATION_FIELD_CONTROL_ADAPTATION_PAYLOAD)
    		{
    			/* output a new ts packet contains only adaptation field, since we will generate a new pmt */
                int i = 0;
    			/* adaptation field only */
    			p_sys->pkt_buf.data[3] |= 0x20; /* bit 4 */
    			p_sys->pkt_buf.data[3] &= 0xef; /* bit 3 */
    		    /* change adaptation field length */
    			p_sys->pkt_buf.data[4] = MPEG2_TS_PKT_SIZE - 5;
    			for (i = infop->adaptationFieldLength + 5; i < MPEG2_TS_PKT_SIZE; i++)
    			{
    			    p_sys->pkt_buf.data[i] = 0xff; /* stuffing bytes */
    			}
			    /* output this additional packet before new pmt is built */
                pipeSync(p_sys->outpipe);
			    pipePut(p_sys->outpipe,&(p_sys->pkt_buf.data[0]), MPEG2_TS_PKT_SIZE, FALSE, p_sys->putPosition);
			    p_sys->putPosition += MPEG2_TS_PKT_SIZE;
    			msg_TRACE("old PMT contains adaptation field, output one adaptation_only TS packet.\n");
    		}
    	}
    }
    else
    {
    	/* scramble the packet if required, only the payload! */
    	scrambleTsPacket(p_sys, pid, &(p_sys->pkt_buf.data[0]), &(p_sys->pkt_buf.data[0]) + MPEG2_TS_PKT_SIZE - infop->payloadLen, 
    	                 infop->payloadLen, infop->position);
	    /* output the packet  */
	    pipeSync(p_sys->outpipe);
	    pipePut(p_sys->outpipe,&(p_sys->pkt_buf.data[0]), MPEG2_TS_PKT_SIZE, FALSE, p_sys->putPosition);
	    p_sys->putPosition += MPEG2_TS_PKT_SIZE;
    }
    
    return RETCODE_SUCCESS;
}

/* callback functin for PMT */
static RetCode   mpeg2InjectCA2Pmt (void *token, Mpeg2PmtInfo *infop,
				                           RetCode retCode)
{
    ca_sys_p          p_sys = (ca_sys_p)token;
    Mpeg2PmtTsProgramMapSection *pmsp = &infop->tsProgramMapSection;

     unsigned   pcr_pid;
    Mpeg2PmtStream    *streamList = pmsp->streamList;
    Mpeg2PmtDescriptor *desc = NULL;
    unsigned            pn;  /* program number */
    encrypt_key_p p_keys = NULL;
    ts_ca_descriptor_p p_ca_descriptor = NULL; /* CA descriptors to be inserted for this pmt */
    int i = 0;
 
    pn = MPEG2_PMT_PROGRAM_NUMBER(&pmsp->psiExtension);

    /* record the pids (pcr_pid and elementary stream pid) that have been used */
    pcr_pid = MPEG2_PMT_HEADER_PCR_PID(&(pmsp->pmtHeader));
    p_sys->pid[pcr_pid].b_seen = TRUE;
    p_sys->pid[pcr_pid].pn     = pn;

    /* note: we assume there are no CA descriptors for current program
       and that is why we need to introduce them */
    for (streamList = pmsp->streamList; streamList != NULL; 
             streamList = streamList->next)
    {
        unsigned   ePid = MPEG2_PMT_STREAM_HEADER_ELEMENTARY_PID(&streamList->streamHeader);
        p_sys->pid[ePid].b_seen = TRUE;
        p_sys->pid[ePid].pn     = pn;
    }

    /* look up the keys. do we need CA injection for this PMT ? */
    for (p_keys = p_sys->p_keys; p_keys != NULL; 
             p_keys = p_keys->next)
    {
    	int key_count = 0;
        if (p_keys->pn == pn || p_keys->pn == FOR_ANY_PROGRAM)
        {
            /* create the CAs if an injection is needed */
            short availabe_pid = 0;
            int   i = 0;

            key_count ++;
            if (p_keys->ecm_pid != 0)
            {
            	/* we already got one */
            	availabe_pid = p_keys->ecm_pid;
            }
            else
            {
	            /* find available pid */
	            for (i = 0x10; i < 0x01FFE; i++)
	            {
	            	if (p_sys->pid[i].b_seen == FALSE)
	            	{
	                    availabe_pid         = (short)i;
	                    p_sys->pid[i].b_seen = TRUE;
	                    p_sys->pid[i].pn     = pn;
                        msg_TRACE("ECM pid allocated: %d,the %dth key.\n", availabe_pid, key_count);
	            		break;
	            	}
	            }
            }
            if (availabe_pid != 0)
            {
                p_sys->pid[availabe_pid].b_seen = TRUE;
                p_sys->pid[availabe_pid].pn     = pn;
                
                /* assign pid to this key */
                p_keys->ecm_pid = availabe_pid;
                
                /* we can support multiple CA system, now just CA_SYS_ID */
                /* we don't have privdate data for the descriptor */
                ts_ca_descriptor_p d = ts_ca_descriptor_create(p_keys->e_type, p_sys->i_ca_system_id, availabe_pid, NULL, 0);
                d->p_key             = p_keys;
                p_ca_descriptor      = ts_ca_descriptor_append(p_ca_descriptor, d);
            }
            else
            {
            	printf("all the pids are being used, key ignored, pn# %d\n", p_keys->pn);
            }
        }
    }

    if (p_ca_descriptor)
    {
        /* set up the encryption key for each ES */
	    for (streamList = pmsp->streamList; streamList != NULL; 
	             streamList = streamList->next)
	    {
            ts_ca_descriptor_p d = NULL;
	        short    ePid = MPEG2_PMT_STREAM_HEADER_ELEMENTARY_PID(&streamList->streamHeader);

	        for (d = p_ca_descriptor; d != NULL; d = d->next)
	        {
                /* what type of CA? for the whole program, video or audio? */
	        	switch (d->en_type)
	        	{
	        		case ENCRYPT_ALL:
                        p_sys->pid[pcr_pid].p_key = d->p_key;
                        
	        			p_sys->pid[ePid].p_key    = d->p_key;
	        			/* now we have the specific stream type */
	        			d->stream_type = ANY_STREAM_TYPE; 
	        			break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
337p亚洲精品色噜噜狠狠| 久久先锋影音av| 亚洲妇女屁股眼交7| 在线不卡的av| 99久久久久久| 国产69精品久久99不卡| 亚洲国产精品视频| 老司机精品视频线观看86| 亚洲不卡一区二区三区| 亚洲人成网站在线| 国产欧美日本一区二区三区| 欧美精品一卡两卡| 久久伊99综合婷婷久久伊| 一区二区三区高清| 亚洲欧美一区二区视频| 国产亚洲人成网站| 久久精品免视看| 亚洲成人黄色小说| 色94色欧美sute亚洲线路一ni| 成人亚洲精品久久久久软件| 精品一区二区在线免费观看| 天天综合色天天| 蜜臀va亚洲va欧美va天堂 | 日本一区二区三级电影在线观看| 亚洲国产精品影院| 懂色av一区二区在线播放| 欧美亚洲免费在线一区| 777xxx欧美| 亚洲成在线观看| 色综合天天综合网国产成人综合天 | 国产精品女同一区二区三区| 国产精品乱子久久久久| 国产一区二区剧情av在线| 99久久综合色| 欧美人xxxx| 中文字幕色av一区二区三区| 国产成人高清视频| 91麻豆精品国产91久久久| 亚洲电影在线播放| 欧美视频一区二区三区在线观看| 伊人色综合久久天天人手人婷| 日本午夜精品一区二区三区电影 | 在线播放视频一区| 久久精品噜噜噜成人av农村| 欧美一二三四在线| 一区二区三区成人| 欧美日韩大陆一区二区| 男女男精品网站| 欧美亚洲国产一区二区三区| 亚洲午夜精品网| 欧美成人vr18sexvr| 亚洲成人自拍网| 精品国产一区二区三区久久久蜜月| 亚洲第一精品在线| 久久这里只精品最新地址| 成人美女视频在线观看| 亚洲综合激情另类小说区| 99综合影院在线| 另类小说色综合网站| 亚洲欧美激情一区二区| 91精品一区二区三区在线观看| 粉嫩一区二区三区性色av| 亚洲综合一区二区精品导航| 精品捆绑美女sm三区| 99在线精品免费| 国产成人午夜99999| 免费人成在线不卡| 亚洲免费观看高清完整版在线观看 | 亚洲综合视频在线| 中文字幕一区二区在线播放| 日韩一区二区三区电影在线观看| 99久久er热在这里只有精品66| 国产在线精品视频| 国产一区二区三区久久悠悠色av| 婷婷开心激情综合| 国产美女视频一区| 国产剧情av麻豆香蕉精品| 欧美韩国一区二区| 欧美美女黄视频| 欧美日韩国产在线播放网站| 91美女视频网站| 久久成人免费网站| 国产综合成人久久大片91| 国产亚洲精品久| 久久久久久久久久看片| 欧美亚洲国产一区二区三区va| 色婷婷亚洲综合| 丰满少妇久久久久久久 | 日韩女优毛片在线| 成a人片亚洲日本久久| 天天影视涩香欲综合网| 日本va欧美va精品| 国产一区二区三区在线观看免费| 国产一区二区精品在线观看| 国产伦精品一区二区三区免费迷| 国产激情一区二区三区| 97se亚洲国产综合自在线不卡| 欧美色爱综合网| 欧美四级电影网| 国产精品麻豆视频| 蜜乳av一区二区| 99国产精品99久久久久久| 欧美一区二区在线播放| 精品视频123区在线观看| 久久亚洲影视婷婷| 日韩激情一区二区| 久草热8精品视频在线观看| 波多野结衣精品在线| 51精品久久久久久久蜜臀| 蜜臀国产一区二区三区在线播放| 欧美成人女星排名| 国产精品高潮呻吟久久| 国产喂奶挤奶一区二区三区| 国产成人免费视频网站| 中文字幕乱码亚洲精品一区 | 欧美日韩一区二区三区四区| 国产精品嫩草影院av蜜臀| 日韩中文字幕区一区有砖一区| 91网站在线观看视频| 国产欧美综合色| 国产精品18久久久久| 日韩精品自拍偷拍| 日本视频一区二区三区| 欧美日韩午夜精品| 丝袜a∨在线一区二区三区不卡| 在线免费观看日本一区| 欧美日韩一区高清| 天堂蜜桃91精品| 久久夜色精品一区| 91年精品国产| 国产一区二区精品在线观看| 欧美国产欧美综合| 一本到高清视频免费精品| 午夜精品成人在线视频| 精品精品国产高清a毛片牛牛| 国产高清精品在线| 午夜日韩在线电影| 久久久噜噜噜久久中文字幕色伊伊| 国产91高潮流白浆在线麻豆| 亚洲高清久久久| 日本一二三不卡| 精品剧情在线观看| 91传媒视频在线播放| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲欧美福利一区二区| 一区二区三区色| 日韩天堂在线观看| 91麻豆精品91久久久久同性| 欧美日韩一区 二区 三区 久久精品| 97se亚洲国产综合自在线观| 成人性生交大片免费看视频在线 | 亚洲男人天堂av网| 国产日韩精品久久久| 久久蜜桃香蕉精品一区二区三区| 欧美午夜理伦三级在线观看| 成人丝袜高跟foot| 国产91清纯白嫩初高中在线观看| 毛片一区二区三区| 捆绑紧缚一区二区三区视频| 久久国产精品区| 激情欧美一区二区三区在线观看| 亚洲午夜视频在线观看| 亚洲一区二区三区精品在线| 亚洲视频一区在线观看| 91亚洲精品一区二区乱码| 顶级嫩模精品视频在线看| 成人精品一区二区三区四区| 成人午夜av在线| 色综合久久久久| 欧美日韩一区久久| 久久久久成人黄色影片| 国产亚洲精品福利| 亚洲日本在线天堂| 香蕉av福利精品导航| 激情文学综合丁香| 色综合视频在线观看| 欧美日韩精品欧美日韩精品一综合| 91麻豆精品国产| 国产精品国产自产拍在线| 日韩成人免费电影| 91色婷婷久久久久合中文| 在线电影欧美成精品| 亚洲天天做日日做天天谢日日欢 | 国产v综合v亚洲欧| 日韩你懂的在线播放| 在线成人免费观看| 精品国产免费一区二区三区四区| 精品国产99国产精品| 国产嫩草影院久久久久| 一区二区在线观看视频在线观看| 亚洲成人动漫精品| 国产成人aaaa| 欧美电影一区二区三区| 国产色婷婷亚洲99精品小说| 亚洲免费av高清| 精品一二三四在线| 欧美性大战久久久| 国产日韩精品一区| 九九热在线视频观看这里只有精品 | 成人的网站免费观看|