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

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

?? mpeg2ps.c

?? Sun公司Dream項(xiàng)目
?? C
字號(hào):
/*
 * 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]
 */ 

/*
 * $(@)Mpeg2Ps.c $Revision: 1.1.1.1 $ $Date: 2006/04/17 22:47:31 $
 * 
 * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
 */
/*
 * Copyright (c) 1996 by Sun Microsystems, Inc.
 */

/*
 * MPEG2 program stream parser
 */

#pragma ident "@(#)Mpeg2Ps.c 1.2	97/05/08 SMI"

#include <string.h>
#include <stdlib.h>

#include "cobjs/Macros.h"
#include "cobjs/RetCode.h"
#include "cobjs/Types.h"

#include "mmp/Mpeg2Pes.h"
#include "mmp/Mmp.h"
#include "mmp/Pipe.h"

#include "mmp/Mpeg2Ps.h"

#define	MPEG2_PS_MAX_CHUNK	(sizeof(Mpeg2PsPackAndCode))

struct _Mpeg2Ps {
    Mpeg2PsCallBack     callBack;
    void               *token;
    MmpParserObject    *pesp;
    MmpParserObject     po;
    Boolean		isDirty;
};

static size_t       mpeg2PsMaxChunk(void *instp);
static RetCode      mpeg2PsRecognize(void *instp, Pipe pipe);
static RetCode      mpeg2PsParse(void *instp, MmpContextObject *cop, Pipe pipe);
static void         mpeg2PsRecover(void *instp);
static RetCode
mpeg2PsSystemHeader(Mpeg2Ps mpeg2Ps, Pipe pipe,
		    Mpeg2PsInfo *infop);
static void         mpeg2PsPesSkip(Mpeg2Ps mpeg2Ps, Pipe pipe);

typedef struct Mpeg2PsStartCode {
    BIT1(startCode31_24:8);
    BIT1(startCode23_16:8);
    BIT1(startCode15_8:8);
    BIT1(startCode7_0:8);
} Mpeg2PsStartCode;

#define	IS_MPEG2_PS_START_CODE_PREFIX(p)				\
	( (  ((p)->startCode31_24 << 24)				\
	   | ((p)->startCode23_16 << 16)				\
	   | ((p)->startCode15_8 << 8)					\
	  ) == 0x100							\
	)

#define	MPEG2_PS_START_CODE(p)						\
	(   ((p)->startCode31_24 << 24)					\
	  | ((p)->startCode23_16 << 16)					\
	  | ((p)->startCode15_8 << 8)					\
	  |  (p)->startCode7_0						\
	)

typedef struct Mpeg2PsPackAndCode {
    Mpeg2PsPackHeader   packHeader;
    Mpeg2PsStartCode    startCode;
} Mpeg2PsPackAndCode;

static const PipeBits MPEG2_PS_P_STD_BUFFER_FLAG = {
    0x1,				   /* '1' */
    1					   /* 1 bits */
};

static RetCodeTable mpeg2PsErrorTable[] = {
    {MPEG2_PS_ERROR_PACK_SYNTAX, NULL, "pack syntax error"},
    {MPEG2_PS_ERROR_END_CODE, NULL, "missing or invalid end code"},
    {MPEG2_PS_ERROR_SYSTEM_HDR_LEN, NULL, "system header length error"},
    {0, NULL, NULL}
};

static RetCodeId    retCodeId;

Mpeg2Ps
mpeg2PsNew(void)
{
    Mpeg2Ps             mpeg2Ps;

    if (retCodeId == 0) {
	retCodeId = retCodeRegisterWithTable(MPEG2PS_CLASSNAME,
					     mpeg2PsErrorTable);
    }
    mpeg2Ps = NEW_ZEROED(struct _Mpeg2Ps, 1);

    mpeg2Ps->po.maxChunk = mpeg2PsMaxChunk;
    mpeg2Ps->po.recognize = mpeg2PsRecognize;
    mpeg2Ps->po.parse = mpeg2PsParse;
    mpeg2Ps->po.recover = mpeg2PsRecover;
    mpeg2Ps->po.instp = mpeg2Ps;

    return mpeg2Ps;
}

void
mpeg2PsSetPesParser(Mpeg2Ps mpeg2Ps, MmpParserObject *pesp)
{
    mpeg2PsRecover(mpeg2Ps);
    mpeg2Ps->pesp = pesp;
}

MmpParserObject    *
mpeg2PsParserObject(Mpeg2Ps mpeg2Ps)
{
    return &mpeg2Ps->po;
}

void
mpeg2PsSetCallBack(Mpeg2Ps mpeg2Ps, Mpeg2PsCallBack callBack, void *token)
{
    mpeg2Ps->callBack = callBack;
    mpeg2Ps->token = token;
}

void
mpeg2PsFree(Mpeg2Ps mpeg2Ps)
{
    mpeg2PsRecover(mpeg2Ps);
    free(mpeg2Ps);
}

static size_t
mpeg2PsMaxChunk(void *instp)
{
    Mpeg2Ps             mpeg2Ps = (Mpeg2Ps) instp;

    return MAX(MPEG2_PS_MAX_CHUNK, MMP_PARSER_MAXCHUNK(mpeg2Ps->pesp));
}

/* ARGSUSED */
static RetCode
mpeg2PsRecognize(void *instp, Pipe pipe)
{
    Mpeg2PsPackAndCode *pacp = PIPE_PEEK(pipe, Mpeg2PsPackAndCode);

    return (MPEG2_PS_PACK_HEADER_START_CODE(&pacp->packHeader)
	    == MPEG2_PS_START_CODE_PACK
	    && pacp->packHeader.b01 == 0x1
	    && IS_MPEG2_PS_START_CODE_PREFIX(&pacp->startCode)
	    ? RETCODE_SUCCESS : RETCODE_FAILED);
}

static RetCode
mpeg2PsParse(void *instp, MmpContextObject *cop, Pipe pipe)
{
    Mpeg2Ps             mpeg2Ps = (Mpeg2Ps) instp;
    Mpeg2PsInfo         info;
    Mpeg2PsInfo        *infop = &info;
    RetCode             retCode;
    Mpeg2PsStartCode   *scp;

    mpeg2Ps->isDirty = TRUE;
    do {
	(void) memset(infop, 0, sizeof(*infop));

	infop->position = pipePosition(pipe);
	infop->packHeader = *PIPE_GET(pipe, Mpeg2PsPackHeader);

	if (infop->packHeader.b01 != 0x1) {
	    retCode = RETCODE_CONS(retCodeId, MPEG2_PS_ERROR_PACK_SYNTAX);
	    goto error;
	}
	if (infop->packHeader.packStuffingLength != 0) {
	    retCode = pipeSkipStuffBytes(pipe,
	      infop->packHeader.packStuffingLength, MPEG2_PS_STUFFING_BYTE);
	    if (retCode != RETCODE_SUCCESS) {
		goto error;
	    }
	}
	scp = PIPE_PEEK(pipe, Mpeg2PsStartCode);
	if (MPEG2_PS_START_CODE(scp) == MPEG2_PS_START_CODE_SYSTEM) {
	    retCode = mpeg2PsSystemHeader(mpeg2Ps, pipe, infop);
	    if (retCode != RETCODE_SUCCESS) {
		goto error;
	    }
	}
	if (mpeg2Ps->callBack != NULL) {
	    retCode = (*mpeg2Ps->callBack) (mpeg2Ps->token, infop,
					    RETCODE_SUCCESS);
	    if (retCode != RETCODE_SUCCESS) {
		return retCode;
	    }
	}
	if (mpeg2Ps->pesp == NULL) {
	    mpeg2PsPesSkip(mpeg2Ps, pipe);
	} else {
	    retCode = MMP_PARSER_PARSE(mpeg2Ps->pesp, cop, pipe);
	    if (retCode != RETCODE_SUCCESS) {
		return retCode;
	    }
	}
	scp = PIPE_PEEK(pipe, Mpeg2PsStartCode);
    } while (MPEG2_PS_START_CODE(scp) == MPEG2_PS_START_CODE_PACK);

    scp = PIPE_GET(pipe, Mpeg2PsStartCode);
    infop->packHeader.packStartCode31_24 = scp->startCode31_24;
    infop->packHeader.packStartCode23_16 = scp->startCode23_16;
    infop->packHeader.packStartCode15_8 = scp->startCode15_8;
    infop->packHeader.packStartCode7_0 = scp->startCode7_0;
    if (MPEG2_PS_START_CODE(scp) != MPEG2_PS_START_CODE_END) {
	retCode = RETCODE_CONS(retCodeId, MPEG2_PS_ERROR_END_CODE);
	goto error;
    }
    return RETCODE_SUCCESS;

error:
    if (mpeg2Ps->callBack != NULL) {
	(void) (*mpeg2Ps->callBack) (mpeg2Ps->token, infop, retCode);
    }
    return retCode;
}

static void
mpeg2PsRecover(void *instp)
{
    Mpeg2Ps             mpeg2Ps = (Mpeg2Ps) instp;

    if (! mpeg2Ps->isDirty) {
	return;
    }
    mpeg2Ps->isDirty = FALSE;
    MMP_PARSER_RECOVER(mpeg2Ps->pesp);
}

/* ARGSUSED */
static RetCode
mpeg2PsSystemHeader(Mpeg2Ps mpeg2Ps, Pipe pipe, Mpeg2PsInfo *infop)
{
    PipePosition        shEnd = pipeRelativePosition(pipe);
    PipePosition        curPos;

    infop->hasSystemHeader = TRUE;
    infop->systemHeader = *PIPE_GET(pipe, Mpeg2PsSystemHeader);

    infop->nPStdBuffer = 0;
    shEnd += MPEG2_PS_SYSTEM_HEADER_LENGTH(&infop->systemHeader)
      + sizeof(Mpeg2PsStartCode) + 2;
    while (pipeIsNextBits(pipe, MPEG2_PS_P_STD_BUFFER_FLAG)) {
	if (infop->nPStdBuffer < MPEG2_PS_MAX_P_STD_BUFFERS) {
	    infop->pStdBuffer[infop->nPStdBuffer++] = *PIPE_GET(pipe,
							 Mpeg2PsPStdBuffer);
	} else {
	    PIPE_SKIP(pipe, Mpeg2PsPStdBuffer);
	}
    }
    if ((curPos = pipeRelativePosition(pipe)) != shEnd) {
	if (curPos > shEnd) {
	    return RETCODE_CONS(retCodeId, MPEG2_PS_ERROR_SYSTEM_HDR_LEN);
	}
	pipeSkip(pipe, shEnd - curPos);
    }
    return RETCODE_SUCCESS;
}

/* ARGSUSED */
static void
mpeg2PsPesSkip(Mpeg2Ps mpeg2Ps, Pipe pipe)
{
    Mpeg2PesPacket     *ppp;

    while ((ppp = PIPE_PEEK(pipe, Mpeg2PesPacket), TRUE)
	    && IS_MPEG2_PES_PACKET_START_CODE_PREFIX(ppp)
	    && MPEG2_PES_STREAM_ID_MIN <= ppp->streamId
	    && ppp->streamId <= MPEG2_PES_STREAM_ID_MAX) {
	pipeSkip(pipe, MPEG2_PES_PACKET_LENGTH(ppp) + sizeof(Mpeg2PesPacket));
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区在线看| 欧美激情一区二区三区蜜桃视频| 韩国视频一区二区| 中文字幕人成不卡一区| 欧美精品电影在线播放| 国产精品一卡二卡| 午夜精品一区在线观看| 国产精品天干天干在线综合| 欧美日韩国产免费| 91网站在线播放| 精品一区二区三区免费视频| 亚洲影院理伦片| 国产精品另类一区| 精品福利一区二区三区| 欧美三级电影网站| 成人午夜激情在线| 狠狠色综合日日| 午夜精品视频在线观看| 亚洲精品成人a在线观看| 国产免费成人在线视频| 日韩精品一区二区三区视频播放| 色悠悠亚洲一区二区| 国产91露脸合集magnet| 欧美bbbbb| 日韩影视精彩在线| 亚洲综合成人在线| 一区二区三区四区激情| 国产精品福利在线播放| 久久久久99精品一区| 日韩欧美黄色影院| 日韩一区二区三区av| 欧美色网站导航| 欧美性三三影院| 91免费视频观看| 99精品在线观看视频| www.亚洲精品| 成人h动漫精品| 成人h版在线观看| 成人黄色一级视频| 成人黄色一级视频| 成人18精品视频| 成人av网站在线| 成人av免费在线播放| 99视频一区二区三区| av中文字幕一区| 99久精品国产| 欧洲在线/亚洲| 欧美视频精品在线| 欧美一区二区在线不卡| 91精品国产全国免费观看| 在线观看91精品国产麻豆| 欧美精品国产精品| 日韩精品一区在线| 国产日韩欧美麻豆| a级精品国产片在线观看| 亚洲一二三区不卡| 天天综合天天做天天综合| 性做久久久久久| 美美哒免费高清在线观看视频一区二区| 午夜久久福利影院| 久久99精品国产| 成人午夜av影视| 在线精品视频一区二区三四| 精品1区2区3区| 精品久久久三级丝袜| 国产欧美日本一区视频| 亚洲男人天堂av| 亚洲电影在线播放| 久久精品国产亚洲aⅴ| 国产福利电影一区二区三区| 99久久婷婷国产| 3d动漫精品啪啪1区2区免费 | 国产在线播放一区二区三区| 国产福利一区在线| 在线一区二区三区四区| 国产片一区二区| 日韩理论片中文av| 亚洲欧美在线观看| 亚洲一区二区三区四区的| 亚洲bt欧美bt精品| 国产成人夜色高潮福利影视| 91网站最新地址| 日韩欧美一级二级三级久久久| 欧美国产欧美综合| 亚洲第一搞黄网站| 高清成人免费视频| 欧美剧情片在线观看| 国产丝袜美腿一区二区三区| 亚洲一区二区在线免费观看视频| 久久99日本精品| 一本一本大道香蕉久在线精品| 7777女厕盗摄久久久| 国产精品你懂的在线欣赏| 日日夜夜一区二区| 成人一区在线观看| 在线电影欧美成精品| 国产精品久久久久久久久免费相片 | 九一九一国产精品| 91视视频在线直接观看在线看网页在线看| 欧美在线观看你懂的| 久久一二三国产| 亚洲va天堂va国产va久| 成人av网址在线| 精品久久久影院| 日韩国产精品大片| 在线观看91视频| 亚洲欧洲精品成人久久奇米网| 日本伊人午夜精品| 成人高清视频在线观看| 精品盗摄一区二区三区| 亚洲一级二级在线| aaa亚洲精品一二三区| 久久婷婷色综合| 青青草国产精品97视觉盛宴 | av一区二区不卡| 久久综合久久鬼色| 蜜臀av一区二区在线免费观看| 91搞黄在线观看| 玉米视频成人免费看| 国产伦精品一区二区三区在线观看| 久久亚洲捆绑美女| 免费观看日韩av| 欧美丰满嫩嫩电影| 亚洲一区在线播放| 色老综合老女人久久久| 亚洲素人一区二区| av午夜精品一区二区三区| 久久久午夜电影| 国产精品18久久久久久久久久久久 | 欧美亚洲日本国产| 亚洲综合在线电影| 色综合久久久久久久久久久| 欧美激情中文字幕一区二区| 国产成人亚洲综合a∨婷婷图片 | 中文字幕一区二区三区在线不卡 | 国产精品情趣视频| 成人一区二区三区在线观看| 久久久久久久久久久99999| 久久精品国产免费| 日韩免费视频一区| 美国十次综合导航| 精品国产网站在线观看| 久久精品国产亚洲一区二区三区 | 国产精品不卡一区| 99久久国产综合精品色伊| 亚洲丝袜美腿综合| 一本一道久久a久久精品| 亚洲美女视频在线观看| 欧美综合天天夜夜久久| 亚洲高清免费观看高清完整版在线观看 | 制服丝袜亚洲色图| 丝袜亚洲另类欧美综合| 91精品国产品国语在线不卡| 麻豆免费精品视频| 久久久久久久久久电影| 成人动漫av在线| 亚洲一二三四区不卡| 欧美老女人第四色| 久久精品国产在热久久| 国产午夜精品一区二区三区视频| 国产成人免费视频网站| 最新国产成人在线观看| 在线观看www91| 久久精品噜噜噜成人av农村| 久久久九九九九| 色综合一区二区| 亚洲成人精品在线观看| 欧美大片在线观看| 成人av网在线| 午夜精品久久一牛影视| 久久嫩草精品久久久精品| a美女胸又www黄视频久久| 亚洲国产精品嫩草影院| 精品国产伦一区二区三区观看体验 | 午夜日韩在线观看| 精品国产电影一区二区| 成人av在线影院| 日韩国产精品91| 亚洲国产成人在线| 欧美日韩国产高清一区| 国内成人精品2018免费看| 中文字幕一区不卡| 91精品国产一区二区| 不卡视频一二三四| 日韩av一区二区三区四区| 国产午夜精品久久久久久免费视| 欧美在线免费播放| 国产一区二区三区香蕉 | 国产乱人伦偷精品视频免下载| 中文字幕色av一区二区三区| 制服.丝袜.亚洲.另类.中文 | 国产一区二区女| 艳妇臀荡乳欲伦亚洲一区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 精品国产3级a| 欧美视频一区在线观看| 国产成a人亚洲| 午夜欧美视频在线观看| 国产精品成人免费在线| 精品免费国产二区三区|