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

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

?? buffer.c

?? 一個兩碟控制的VCD的代碼,兩碟之間的轉動及連續播放,已大量生產的CODE.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* SCCSID @(#)buffer.c	1.97 4/17/98 *//* * $Log$ */#include "common.h"#include "debug.h"#include "util.h"#include "low.h"#include "dsc.h"#include "buffer.h"#include "vp.h"#include "vcxi.h"#include "tdm.h"#include "sysinfo.h"#include "xport.h"#ifdef MPEG1#ifdef SVCD#include "mpegvid.h"#else#include "mpeg1vid.h"#endif#else#include "mpeg2vid.h"#endif#ifdef AC3#include "ac3.h"#else#include "mpgaudio.h"#endif#ifdef ECHO#include "echo.h"#endif#ifdef SPDIF#include "ioport.h"#endif#ifdef SPATIAL#include "kara.h"#endif/**************************************************************************** Local defines. ****************************************************************************/#define	done_but_needed(ch) \    ((!buscon_is_running(ch))&&(mask & buscon_##ch##_runbit))#undef	DUMP_VBV_WHEN_FULL/**************************************************************************** Debugging. ****************************************************************************/#ifndef ECHOKEYDEBUGVAR(PCM_starvings, 0);	/* Number of times PCM starved */#endifKEYDEBUGVAR(ABV_overflow, 0);	/* Number of times ABV overflowed */KEYDEBUGVAR(VBV_overflow, 0);	/* Number of times VBV overflowed */#define PRINTF(a)/**************************************************************************** Local function prototypes. ****************************************************************************//**************************************************************************** Local variables. ****************************************************************************/#ifdef MVD_BOARDstatic int is_TDM;#else#define is_TDM	1#endif#ifdef DVD_VCD#include "talk.h"static int a_xfer_cnt;static int ABV_is_full;#define check_abv_full() do {						\	if (!ABV_is_full) {						\	   ABV_is_full = 1;;					        \	   a_xfer_cnt = 1;				                \	}  else a_xfer_cnt++;						\} while (0)#define A_XFER_LIMIT		3500#define A_EMPTY_SLOT		1176 /* dword */#define check_abv_ok() do {						\    if ((ABV_size - data) >= (A_EMPTY_SLOT  + ABV_write)) {		\	if (ABV_is_full && (a_xfer_cnt > A_XFER_LIMIT)) {		\	    ABV_is_full = 0; a_xfer_cnt = 0;				\	    tell_master_sbv_is_full(0);					\	}								\    }									\} while (0)#endif/****************************************************************************** If there's enough room in DRAM initiate a xport buscon to sys buff.  rdptr == wrptr means buffer empty. In the case of TDM we do it anyway. ******************************************************************************/#ifdef XFER_USE_MACRO#define xportv_xfer_TDM()	do {					\    int space = VBV_rdptr - VBV_wrptr;					\    if (space <= 0) space += VBV_size;				  	\    if (space <= VBV_write) {						\	oh_my(0x16);							\	KEYDEBUGINC(1, VBV_overflow);					\	DBG_log_error(99, 1, space, VID_decoding_in_progress, 0, 0);	\	VBV_rdptr = VBV_wrptr;						\    }									\    buscon_xfer(xportv, BDMA_USEDX, VBV_wrptr, VBV_write, 1);		\} while (0)#define xporta_xfer_TDM()	do {					\    int i;								\      int space = ABV_rdptr - ABV_wrptr;					\    if (space <= 0) space += ABV_size;				  	\    if (space <= ABV_write) {						\	oh_my(0x17);							\	KEYDEBUGINC(1, ABV_overflow);					\	DBG_log_error(99, 2, space, VID_decoding_in_progress, 0, 0);	\	ABV_wrptr = ABV_rdptr;						\	for (i = 0; i < 2; i++) {					\	    ABV_wrptr += ABV_write;					\	    if (ABV_wrptr >= ABV_end) ABV_wrptr = ABV_start;		\	}								\	ABV_wrptr_save = ABV_wrptr;					\	BUF_ABV_overflow = 1;						\    }									\    buscon_xfer(xporta, BDMA_USEDX, ABV_wrptr, ABV_write, 1);		\} while (0)#ifdef MVD_BOARD#define xportv_xfer_non_TDM()	do {					\    int space = VBV_rdptr - VBV_wrptr;					\    if (space <= 0) space += VBV_size;				  	\    if (space > VBV_write) {						\	buscon_xfer(xportv, BDMA_USEDX, VBV_wrptr, VBV_write, 1);	\	VBV_filling = 1;						\    } else {								\	VBV_filling = 0;						\    }									\  } while (0)#define xporta_xfer_non_TDM()	do {					\    int space = ABV_rdptr - ABV_wrptr;					\    if (space <= 0) space += ABV_size;				  	\    if (space > ABV_write) {						\	buscon_xfer(xporta, BDMA_USEDX, ABV_wrptr, ABV_write, 1);	\	ABV_filling = 1;						\    } else {								\	ABV_filling = 0;						\    }									\} while (0)#endif#elsevoid xportv_xfer_TDM(){    int space = VBV_rdptr - VBV_wrptr;    if (space <= 0) space += VBV_size;    if (space <= VBV_write) {	oh_my(0x16);	KEYDEBUGINC(1, VBV_overflow);	DBG_log_error(99, 1, space, VID_decoding_in_progress, 0, 0);	VBV_rdptr = VBV_wrptr;    }    buscon_xfer(xportv, BDMA_USEDX, VBV_wrptr, VBV_write, 1);}void xporta_xfer_TDM(){    int i;    int space = ABV_rdptr - ABV_wrptr;    if (space <= 0) space += ABV_size;#ifdef DVD_VCD    if (TDM_isCDDA)	/* since the data input rate is not same as			   the ouput data, we need to do checking			   and inform master to send more. */	check_abv_full();#endif    if (space <= ABV_write) {	oh_my(0x17);	KEYDEBUGINC(1, ABV_overflow);	DBG_log_error(99, 2, space, VID_decoding_in_progress, 0, 0);	/* 	 * Keep 2*ABV_write data in ABV so hufdeca can continue until	 * the next time we get into mpgaudio.	 */	ABV_wrptr = ABV_rdptr;	for (i = 0; i < 2; i++) {	    ABV_wrptr += ABV_write;	    if (ABV_wrptr >= ABV_end) ABV_wrptr = ABV_start;	}	ABV_wrptr_save = ABV_wrptr;	BUF_ABV_overflow = 1;    }    buscon_xfer(xporta, BDMA_USEDX, ABV_wrptr, ABV_write, 1);}#ifdef MVD_BOARDvoid xportv_xfer_non_TDM(){    int space = VBV_rdptr - VBV_wrptr;    if (space <= 0) space += VBV_size;    if (space > VBV_write) {	buscon_xfer(xportv, BDMA_USEDX, VBV_wrptr, VBV_write, 1);	VBV_filling = 1;    } else {	VBV_filling = 0;    }}void xporta_xfer_non_TDM(){    int space = ABV_rdptr - ABV_wrptr;    if (space <= 0) space += ABV_size;    if (space > ABV_write) {	buscon_xfer(xporta, BDMA_USEDX, ABV_wrptr, ABV_write, 1);	ABV_filling = 1;    } else {	ABV_filling = 0;    }}#endif#endif#define xportv_xfer()	do {		\    if (is_TDM) xportv_xfer_TDM();	\    else xportv_xfer_non_TDM();		\} while (0);#define xporta_xfer()	do {		\    if (is_TDM) xporta_xfer_TDM();	\    else xporta_xfer_non_TDM();		\} while (0);/****************************************************************************** Just finished a xport buscon to sys buff. Update sys buff write ptr. If xfer to huffdec is not running, start a new one. ******************************************************************************/#ifdef DUMP_VBV_WHEN_FULL#define VBV_wrap() do { 	\    static int fp = -1;		\    fp = DBG_dump_memory((char *)dram(VBV_start), 4*VBV_size, fp, "video.bit");\    VBV_wrptr = VBV_start;	\} while (0)#else#define VBV_wrap() VBV_wrptr = VBV_start#endif#ifdef DUMP_ABV_WHEN_FULL#define ABV_wrap() do { 	\    static int fp = -1;		\    fp = DBG_dump_memory((char *)dram(ABV_start), 4*ABV_size, fp, "audio.bit");\    ABV_wrptr = ABV_start;	\} while (0)#else#define ABV_wrap() ABV_wrptr = ABV_start#endif#ifdef WATCHDOG#define xportv_xfer_end()	do {				\    VBV_wrptr += VBV_write;					\    VBV_ABV_xport_xfer_count++;					\    if (VBV_wrptr == VBV_end) VBV_wrap();			\    DBG_log_buffer(20, VBV_write, VBV_wrptr, VBV_rdptr, 0, 0);	\    if (!VBV_draining) {					\	hufdecv_xfer();						\	if (VBV_draining) buscon_irq_enable(buscon_hufdecv_runbit);	\    }								\} while (0)#define xporta_xfer_end()	do {				\    ABV_wrptr += ABV_write;					\    VBV_ABV_xport_xfer_count++;					\    if (ABV_wrptr == ABV_end) ABV_wrap();			\    oh_my(0x10);						\    DBG_log_buffer(21, ABV_write, ABV_wrptr, ABV_rdptr, 0, 0);	\    if ((!TDM_isCDDA)&&(!ABV_draining)) {			\	hufdeca_xfer();						\	if (ABV_draining) buscon_irq_enable(buscon_hufdeca_runbit);	\    }								\} while (0)#else#define xportv_xfer_end()	do {				\    VBV_wrptr += VBV_write;					\    if (VBV_wrptr == VBV_end) VBV_wrap();			\    DBG_log_buffer(20, VBV_write, VBV_wrptr, VBV_rdptr, 0, 0);	\    if (!VBV_draining) {					\	hufdecv_xfer();						\	if (VBV_draining) buscon_irq_enable(buscon_hufdecv_runbit);	\    }								\} while (0)#define xporta_xfer_end()	do {				\    ABV_wrptr += ABV_write;					\    if (ABV_wrptr == ABV_end) ABV_wrap();			\    oh_my(0x10);						\    DBG_log_buffer(21, ABV_write, ABV_wrptr, ABV_rdptr, 0, 0);	\    if ((!TDM_isCDDA)&&(!ABV_draining)) {			\	hufdeca_xfer();						\	if (ABV_draining) buscon_irq_enable(buscon_hufdeca_runbit);	\    }								\} while (0)#endif/****************************************************************************** If there's enough data in sys buff and we're not CDDAing, initiate a xfer to huffdec,  ******************************************************************************/#ifdef XFER_USE_MACRO#define hufdecv_xfer()	do {						\    int data = VBV_wrptr - VBV_rdptr;					\    if (data < 0) data += VBV_size;					\    if (data >= VBV_read) {						\	buscon_xfer(hufdecv, BDMA_USEDX, VBV_rdptr, VBV_read, 1);	\    	VBV_draining = 1;						\    } else { 								\    	VBV_draining = 0;						\    }									\} while (0)#define hufdeca_xfer()	do {						\    int data;								\    if (TDM_isCDDA) break;						\    data = ABV_wrptr - ABV_rdptr;					\    if (data < 0) data += ABV_size;					\    if (data >= ABV_read) {						\	buscon_xfer(hufdeca, BDMA_USEDX, ABV_rdptr, ABV_read, 1);	\    	ABV_draining = 1;						\    } else {								\    	ABV_draining = 0;						\    }									\} while (0)#elsevoid hufdecv_xfer(){    int data = VBV_wrptr - VBV_rdptr;    if (data < 0) data += VBV_size;    if (data >= VBV_read) {	buscon_xfer(hufdecv, BDMA_USEDX, VBV_rdptr, VBV_read, 1);    	VBV_draining = 1;    } else {     	VBV_draining = 0;    }}void hufdeca_xfer(){    int data;    if (TDM_isCDDA) return;    data = ABV_wrptr - ABV_rdptr;    if (data < 0) data += ABV_size;    if (data >= ABV_read) {	buscon_xfer(hufdeca, BDMA_USEDX, ABV_rdptr, ABV_read, 1);    	ABV_draining = 1;    } else {    	ABV_draining = 0;    }}#ifdef DVD_VCDvoid ABV_check_underflow(){    int data;    data = ABV_wrptr - ABV_rdptr;    check_abv_ok();}#endif#endif/****************************************************************************** Just finished a xfer to huffdec. Update sys buff read ptr. If xport buscon is not running, start a new one. ******************************************************************************/#ifdef WATCHDOG #define hufdecv_xfer_end()	do {			\    VBV_rdptr += VBV_read;				\    VBV_ABV_huffman_xfer_count++;			\    if (VBV_rdptr == VBV_end) VBV_rdptr = VBV_start;	\    if (!VBV_filling) {					\	xportv_xfer();					\  	if (VBV_filling) buscon_irq_enable(buscon_xportv_runbit);	\    }							\} while (0)#define hufdeca_xfer_end()	do {			\    if (TDM_isCDDA) break;				\    ABV_rdptr += ABV_read;				\    VBV_ABV_huffman_xfer_count++;			\    if (ABV_rdptr == ABV_end) ABV_rdptr = ABV_start;	\    if (!ABV_filling) {					\	xporta_xfer();					\  	if (ABV_filling) buscon_irq_enable(buscon_xporta_runbit);	\    }							\} while (0)#else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人动漫在线免费观看| 亚洲午夜精品久久久久久久久| 91精品国产手机| 精品国产亚洲在线| 亚洲综合自拍偷拍| 成人手机在线视频| 91精品国产乱| 亚洲精品乱码久久久久久| 精品系列免费在线观看| 欧美日韩电影在线播放| 国产精品久久久久三级| 久久99国产精品免费网站| 色婷婷久久99综合精品jk白丝| 久久亚洲二区三区| 日韩精品欧美成人高清一区二区| av在线播放成人| 国产午夜三级一区二区三| 麻豆国产精品777777在线| 欧美自拍丝袜亚洲| 亚洲精品国产视频| av在线播放不卡| 国产精品久久久久影院老司| 国产99久久久国产精品潘金| 精品电影一区二区三区| 毛片不卡一区二区| 91精选在线观看| 三级亚洲高清视频| 欧美日韩国产一区| 亚洲国产一区二区在线播放| 91黄色激情网站| 亚洲色图在线视频| 91麻豆成人久久精品二区三区| 国产精品欧美极品| 成人综合激情网| 国产精品卡一卡二| 国产成人99久久亚洲综合精品| 2023国产精华国产精品| 久久国产剧场电影| 精品对白一区国产伦| 韩国精品久久久| 精品美女在线观看| 国产精品自在在线| 欧美国产日本视频| 91麻豆国产精品久久| 一区二区三区中文在线观看| 在线观看亚洲精品视频| 亚洲成人av在线电影| 亚洲欧美激情在线| 亚洲大片在线观看| 4438x成人网最大色成网站| 日韩国产一区二| 欧美tk—视频vk| 国产乱色国产精品免费视频| 久久免费美女视频| 不卡电影免费在线播放一区| 亚洲女子a中天字幕| 欧美日韩你懂得| 免费在线成人网| 久久精品无码一区二区三区| av在线播放不卡| 三级影片在线观看欧美日韩一区二区 | 久久91精品国产91久久小草| 精品久久一二三区| 成人一级片在线观看| 一区二区日韩电影| 日韩一二在线观看| 高清视频一区二区| 亚洲一二三四区| 精品黑人一区二区三区久久| 成人高清免费观看| 视频一区二区不卡| 中文字幕一区二区视频| 555www色欧美视频| 丁香网亚洲国际| 日韩有码一区二区三区| 国产精品丝袜久久久久久app| 在线精品视频免费播放| 韩国精品久久久| 亚洲成人一区在线| 中文字幕不卡三区| 日韩欧美国产一区二区在线播放| 综合网在线视频| 91精品在线一区二区| 99视频一区二区三区| 亚洲视频图片小说| 美女高潮久久久| 精品成人在线观看| 国产成人精品www牛牛影视| 一区二区三区鲁丝不卡| 国产日韩视频一区二区三区| 欧美人与禽zozo性伦| 不卡视频在线看| 国产乱人伦偷精品视频免下载| 亚洲一级片在线观看| 久久精品在线观看| 日韩欧美在线1卡| 欧美日韩综合色| 色综合色狠狠综合色| 国产成人精品免费在线| 国产伦精品一区二区三区免费| 亚洲国产成人精品视频| 亚洲乱码中文字幕| 国产精品不卡一区二区三区| 久久这里都是精品| 欧美电视剧在线观看完整版| 欧美日韩一区二区不卡| 在线免费亚洲电影| 日本在线不卡一区| 亚洲精品国产精华液| 国产精品国产自产拍高清av王其| 久久久亚洲国产美女国产盗摄 | 日本大香伊一区二区三区| 成人一级片网址| 国产suv精品一区二区三区| 国模冰冰炮一区二区| 日韩成人免费看| 亚洲韩国精品一区| 国产精品免费免费| 91美女蜜桃在线| 色综合天天狠狠| 91成人在线精品| 欧美麻豆精品久久久久久| 欧美日韩1区2区| 777亚洲妇女| 欧美成人猛片aaaaaaa| 26uuu另类欧美亚洲曰本| 久久蜜桃一区二区| 国产精品久久久久久一区二区三区| 国产精品国产自产拍高清av王其 | 91在线视频观看| 91免费国产在线观看| 在线欧美日韩精品| 这里只有精品视频在线观看| 日韩一区二区视频| 欧美激情在线一区二区三区| 亚洲午夜一区二区| 日本高清成人免费播放| 欧美视频在线不卡| 日韩欧美一级精品久久| ㊣最新国产の精品bt伙计久久| 国产精品麻豆网站| 亚洲综合视频在线观看| 天堂影院一区二区| 国产一区啦啦啦在线观看| eeuss影院一区二区三区| 欧美亚洲动漫另类| 日韩欧美国产综合| 亚洲欧美综合色| 视频一区二区欧美| 成人激情校园春色| 欧美日韩一区二区三区免费看| 日韩欧美亚洲一区二区| 日本一二三不卡| 日韩中文字幕麻豆| 岛国av在线一区| 欧美美女一区二区| 日韩午夜激情电影| 欧美妇女性影城| 欧美韩国一区二区| 日韩电影在线一区| 成人精品小蝌蚪| 欧美日韩国产高清一区| 国产欧美日韩综合精品一区二区| 亚洲午夜激情av| 粉嫩13p一区二区三区| 欧美精品三级在线观看| 中文字幕乱码久久午夜不卡| 日韩福利电影在线观看| 91伊人久久大香线蕉| 精品国产一区二区精华| 午夜欧美2019年伦理| www.成人网.com| 欧美一区二区日韩| 亚洲欧美偷拍卡通变态| 国产精品素人一区二区| 亚洲成人自拍一区| 99re这里只有精品6| 久久人人超碰精品| 日韩av成人高清| 在线国产电影不卡| 亚洲视频在线一区观看| 国产91丝袜在线18| 日韩女优电影在线观看| 亚洲国产日韩一级| 成人v精品蜜桃久久一区| 久久综合狠狠综合久久激情 | 6080国产精品一区二区| 久久久久成人黄色影片| 亚洲色图另类专区| 国产91精品入口| 久久精品男人天堂av| 国精品**一区二区三区在线蜜桃| 777a∨成人精品桃花网| 五月婷婷激情综合| 欧美男人的天堂一二区| 亚洲国产wwwccc36天堂| 欧美视频一二三区| 首页国产丝袜综合| 8v天堂国产在线一区二区| 五月婷婷久久综合|