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

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

?? vcd.c

?? 一個兩碟控制的VCD的代碼,兩碟之間的轉動及連續播放,已大量生產的CODE.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright 1996, ESS Technology, Inc.					*/
/* SCCSID @(#)vcd.c	1.39 3/24/98 */

/*
 * $Log$
 */

#include <stdio.h>
#include "util.h"
#include "const.h"
#include "constvar.h"
#include "drammem.h"
#include "vcd.h"
#include "dsa.h"
#include "tdm.h"
#include "echo.h"
#include "custom.h"

#ifdef SCENE
#include "fsosd.h"
#endif
/* Peter I moved INFO_VCD_OFFSET to vcd.h - Ming */

#if 1 

#define INFO_VCD_SIZE		400	/* bytes */
#define ENTRIES_VCD_SIZE	800
#define PSD_SIZE		1024
#define TRACK_SIZE		400
#define MAX_ENTRY_NUM		195
#else
#define INFO_VCD_SIZE		800	/* bytes */
#define ENTRIES_VCD_SIZE	2048
#define PSD_SIZE		2048
#define TRACK_SIZE		400
#define MAX_ENTRY_NUM		500

#endif

#define MAC_ENTRIES_VCD_OFFSET	(MAC_INFO_VCD_OFFSET + INFO_VCD_SIZE)
int ENTRIES_VCD_OFFSET     =	(MAC_INFO_VCD_OFFSET + INFO_VCD_SIZE);

#define PSD_SECTOR_SIZE		2048
#define MAC_PSD_START_OFFSET	(MAC_ENTRIES_VCD_OFFSET + ENTRIES_VCD_SIZE)
int PSD_START_OFFSET	   =    (MAC_ENTRIES_VCD_OFFSET + ENTRIES_VCD_SIZE);

#define MAC_TRACK_INFO_OFFSET	(PSD_SIZE + MAC_PSD_START_OFFSET)
int TRACK_INFO_OFFSET	   =	(PSD_SIZE + MAC_PSD_START_OFFSET);

#define MAX_SEGMENT_NUM	1980	/* from 1 to 1980 */
#define ENTRY_START_OFFSET	(12 + MAC_ENTRIES_VCD_OFFSET)

#ifdef SCENE
#define LOT_VCD_SIZE		4992
#define LOT_VCD_OFFSET		((OSD_DRAM_START << 2) + 4608/*OSD_SIZE*/)
#endif /*SCENE*/

#define GOOD			1
#define BAD			0

unsigned int *TrackInfoAdr = (unsigned int *)(MAC_TRACK_INFO_OFFSET | 0x12000000);

#ifdef  CUST6
unsigned int *toc_data = (unsigned int *)(MAC_TRACK_INFO_OFFSET | 0x12000000);
#endif /* CUST6 */

int PSD_start_addr;	/* start offset of PAD data in dram. */
int PSD_end_addr;	/* end offset of PAD data in dram. */
short numAVtrack;	/* Number of MPEG track. CDDA follows */
unsigned int x0fffffff = 0x0fffffff;
unsigned int x2000000 = 0x2000000;

/*-----------------------------------------------------------
  Function: dump_info_vcd
-----------------------------------------------------------*/
int dump_info_vcd()
{
    /* get the infovcd to system buffer */
    if (!getSectors(0x000400, 1, 2048))
	return (BAD);
    
    if (put_scratch(INFO_VCD_OFFSET, CDI_ptr + 56, INFO_VCD_SIZE) != INFO_VCD_SIZE)
	return (BAD);

    return (GOOD);
}

/*-----------------------------------------------------------
  Function: dump_entries_vcd
-----------------------------------------------------------*/
int dump_entries_vcd()
{
    int tmp, tmp1, tmp2, maxtrack;
    unsigned int * ptr;

    numAVtrack = 99;	/* Initialize to no AV track */

    /* get the infovcd to system buffer */
    if (!getSectors(0x000401, 1, 2048))
	return (BAD);
    
    /*
     * Find out how many AV tracks are there. Any track higher than
     * that is a CDDA track!
     */
    ptr = (unsigned int *) ((unsigned char *) CDI_ptr + 8);
    tmp1 = *ptr & 0xffff;		/* Number of entries used	*/
    ptr = (unsigned int *) ((unsigned char *) CDI_ptr + 12);
    for (maxtrack = 0, tmp = 1; tmp <= tmp1; tmp++, ptr++) {
	/* Translate BCD track number to HEX track number */
	tmp2 = (*ptr >> 28) & 0xf;
	tmp2 = (tmp2 << 3) + (tmp2 << 1) + ((*ptr >> 24) & 0xf);
	if (tmp2 > maxtrack) maxtrack = tmp2;
    }
    numAVtrack = maxtrack - 1;

    if (put_scratch(ENTRIES_VCD_OFFSET, CDI_ptr, ENTRIES_VCD_SIZE) != ENTRIES_VCD_SIZE)
	return (BAD);

    return (GOOD);
}

#ifdef SCENE
/*-----------------------------------------------------------
  Function: dump_lot_vcd
-----------------------------------------------------------*/
int dump_lot_vcd(void)
{
    /* get the lot.vcd to system buffer */
    if (!getSectors(0x000402, 3, 2048))
	return (BAD);

    if (put_scratch(LOT_VCD_OFFSET, CDI_ptr, LOT_VCD_SIZE) != LOT_VCD_SIZE)
	return (BAD);

    return (GOOD);
}
#endif /*SCENE*/

/*-----------------------------------------------------------
  Function: get_segment_info
  Description: Given a segment number, it returns the
     segment content and the number of segments that it
     contains.
  
  Return Value:
     GOOD -> sucess.
     BAD -> failure.
-----------------------------------------------------------*/
int get_segment_length(char *ptr, char *end_ptr, unsigned char *content)
{
    int len;
    int found_end_seg;
    unsigned char	test_content;

    if (((*ptr & 0x20) != 0) ||(*ptr == 0x0))	/* check valid seg. */
	return (0);

    *content = *ptr++;
    len = 1;	
    test_content = (*content | 0x20);	/* second or later seg. */

    found_end_seg = 0;
    for (; ptr < end_ptr; ptr++) {
	if (*ptr == test_content)
	    len ++;
	else return (len); /* found */
    }

    return (0);
}

int get_segment_info(int seg_num, unsigned char *content, int *len)
{
    int start_seg;
    int start_addr;
    unsigned char	*ptr, *end_ptr;

    /* check whether the seg_num is a good one */
    if (seg_num < 1 || seg_num > MAX_SEGMENT_NUM)
	return (BAD);

    start_seg = seg_num - 1; 	 /* 0 base */
    
    /* if the start_seg is not in the segment cache, we need to get the whole
       segment info */
    if (start_seg < INFO_VCD_SIZE) {
#ifdef DVD_VCD
	ptr = (char *) ((INFO_VCD_OFFSET + start_seg) | 0x12000000);
	end_ptr = (char *) (INFO_VCD_OFFSET + INFO_VCD_SIZE + 0x12000000);
#else
	ptr = (char *) (INFO_VCD_OFFSET + start_seg);
	end_ptr = (char *) (INFO_VCD_OFFSET + INFO_VCD_SIZE);
#endif
	*len = get_segment_length(ptr, end_ptr, content);
	if (*len)
	    return (GOOD);
    }

    if (!getSectors(0x000400, 1, 2048))
	return (BAD);

    ptr = CDI_ptr + 56 + start_seg;
    end_ptr = CDI_ptr + 2048;
    *len = get_segment_length(ptr, end_ptr, content);
    if (*len)
	return (GOOD);

    return (BAD);
}

/*-----------------------------------------------------------
  Function: get_total_entry_number
-----------------------------------------------------------*/
int get_total_entry_number()
{
    int addr;
    int last_entry;
    unsigned char *scratch_buf;

    addr = ENTRIES_VCD_OFFSET + 8;

    /* get 4 bytes starting at addr */
    scratch_buf = (char *)((addr | x2000000)& x0fffffff);

    last_entry = 0;
    last_entry = (scratch_buf[2] << 8) + scratch_buf[3];
    return (last_entry);
}

/*-----------------------------------------------------------
  Function: get_entry_info
  Return Value:
    GOOD -> success
    BAD -> failure
-----------------------------------------------------------*/
int get_entry_info(int entry_num, unsigned char *track_num,
		   unsigned int *start_mmssff,
		   int *end_mmssff)
{
    int addr;
    int last_entry;
    unsigned char *scratch_buf; 

    /* check whether the seg_num is a good one */
    last_entry = get_total_entry_number();
    if (entry_num < 1 || entry_num > last_entry)
	return (BAD);

    addr = ENTRY_START_OFFSET + (entry_num - 1) * 4; /* 0 base */
    
    /* get 8 bytes starting at addr */
    scratch_buf = (char *)((addr | x2000000)& x0fffffff);
    
    /* get the track and start mmssff info */
    *track_num = bcd2hex[scratch_buf[0]];
    *start_mmssff = *((unsigned int *)scratch_buf) & x00ffffff;
    
    if (entry_num == last_entry)
	*end_mmssff =  CDinfo.leadout & x00ffffff;
    else
	*end_mmssff = *((unsigned int *)&scratch_buf[4]) & x00ffffff;

    return (GOOD);
}

/*------------------------------------------------------------------------
  Function:

  Parameters:
      INPUT:
          track_number

      OUTPUT
          *beg 	The beginning entry number of the input track.
	  *end  The end entry number of the input track.

      RETURN:
          The number of entries of the input track.

  Description:
------------------------------------------------------------------------*/
int get_track_entries(unsigned char track_number, unsigned int *beg,
		      unsigned int *end)
{
    int entry_number;
    int last_entry;
    int total_entry_size;
    int addr;
    int entry;
    int i;
    int done = 0;
    unsigned char *scratch_buf; 

    last_entry = get_total_entry_number();

    total_entry_size = last_entry * 4; /* 4 bytes per entry */

    /* init variables */
    *beg = 0;
    *end = last_entry;
    addr = ENTRY_START_OFFSET;
    entry_number = 1;

    track_number += 1;	/* physical track = user logical track + 1 */
    track_number = hex2bcd[track_number]; /* entry is bcd format */

	    /* get entry data */
    scratch_buf = (char *)((addr | x2000000)& x0fffffff);

	/* Go through each entry and find beg and end entry of the track */
    for (i = 0; i < total_entry_size; i++) {
	    /* check if we change track */
	    if ((track_number == scratch_buf[4*i]) && (*beg == 0)) {
		*beg = entry_number;
	    } else if (track_number < scratch_buf[4*i]) {
		*end = entry_number - 1;
		break;
	    }

	    entry_number++;
    }

    if (!(*beg))
	return (0);

    return ((*end - *beg) + 1);	/* total number of entries */
}

/*------------------------------------------------------------------------
  Function:

  Parameters:

  Description:
    Given a mmssff CDtime, find out the the entry number in the track
    that CDtime is in the entry play period.
------------------------------------------------------------------------*/
int get_entry_number(int CDtime)
{
    int last_entry;
    int total_entry_size;
    unsigned char track_number = 0;
    int entry_number;
    int previous_number;
    int i, index;
    int entry;
    int addr;
    int time;
    unsigned char *scratch_buf;


    if (CDtime == 0) /* In trick modes currCDtime often gets reset */
	CDtime = stopCDtime;

    last_entry = get_total_entry_number();
    total_entry_size = last_entry * 4; /* 4 bytes per entry */

    addr = ENTRY_START_OFFSET;
    entry_number = 1;

    scratch_buf = (char *)((addr | x2000000)& x0fffffff);

    for (i = 0; i < total_entry_size; i++) {
	    index = i<<2;
	    previous_number = entry_number;

	    /* check if we change track */
	    if (track_number != scratch_buf[index]) {
		entry_number = 1;
		track_number = scratch_buf[index];
	    } else {
		entry_number++;
	    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产综合久久久久影院| 欧美专区亚洲专区| 亚洲一二三四区| 久久综合国产精品| 欧美日韩视频在线第一区| eeuss鲁片一区二区三区在线观看| 日本伊人色综合网| 亚洲精品国产一区二区三区四区在线| 欧美videos中文字幕| 亚洲欧美日韩一区二区三区在线观看| 欧美午夜在线观看| 色中色一区二区| 不卡的av电影| 91麻豆国产福利在线观看| 成人综合在线观看| 成人美女视频在线看| 北条麻妃一区二区三区| av电影在线观看完整版一区二区 | 日韩精品一区二区三区视频在线观看 | 亚洲自拍欧美精品| 亚洲一线二线三线久久久| 一区二区三区中文在线| 亚洲一区在线电影| 日韩成人dvd| 国产制服丝袜一区| 99这里只有久久精品视频| 91在线观看免费视频| 欧美在线制服丝袜| 日韩片之四级片| 国产日韩v精品一区二区| 国产精品卡一卡二| 天天免费综合色| 国产99精品国产| 91高清视频免费看| 1区2区3区国产精品| 亚洲欧美日韩小说| 看片的网站亚洲| 91丨九色丨蝌蚪富婆spa| 欧美老女人第四色| 国产精品天干天干在观线| 亚洲一区二区成人在线观看| 久久99精品国产91久久来源| 成人av免费网站| 日韩写真欧美这视频| 91蜜桃免费观看视频| 国产xxx精品视频大全| 色综合久久天天| 欧美日韩一区二区三区在线看| 亚洲精品在线免费播放| 国产成人免费在线观看不卡| 欧美日韩免费电影| 国产精品国产a| 久久国产麻豆精品| 欧美军同video69gay| 国产精品久久久久久亚洲毛片 | 亚洲激情一二三区| jvid福利写真一区二区三区| 日韩欧美精品三级| 日本亚洲三级在线| 91论坛在线播放| 国产精品国产成人国产三级| 国产成人午夜高潮毛片| 精品国产髙清在线看国产毛片| 亚洲va中文字幕| 欧美乱妇一区二区三区不卡视频| 国产精品久久三区| a在线欧美一区| 日韩一区中文字幕| 99久久精品国产麻豆演员表| 亚洲精品一区二区三区蜜桃下载| 蜜臀av一区二区| 日韩欧美一级二级三级久久久| 麻豆精品视频在线观看视频| 欧美一级午夜免费电影| 精品一区二区免费| 国产婷婷色一区二区三区| 成人一区二区三区视频| 亚洲老妇xxxxxx| 欧美一区二区网站| 高清国产一区二区| 亚洲精品自拍动漫在线| 欧美日韩国产首页在线观看| 精品综合免费视频观看| 久久久不卡网国产精品二区| 91蜜桃婷婷狠狠久久综合9色| 香蕉久久一区二区不卡无毒影院| 91麻豆精品国产综合久久久久久| 国产综合成人久久大片91| 中文字幕 久热精品 视频在线| 欧美视频中文字幕| 麻豆国产精品777777在线| 国产精品欧美久久久久一区二区| 91片在线免费观看| 蜜芽一区二区三区| 亚洲欧洲三级电影| 欧美不卡一区二区| 欧美卡1卡2卡| 成人激情文学综合网| 天天综合天天做天天综合| 日本一区二区三区四区 | 亚洲人成精品久久久久久| 日韩一级二级三级| 在线观看www91| 97久久超碰精品国产| 国产精品一线二线三线精华| 亚洲精品欧美专区| 国产亚洲综合av| 精品国产自在久精品国产| 91福利国产成人精品照片| 成人毛片在线观看| 成人免费毛片高清视频| 日韩成人免费在线| 日韩毛片在线免费观看| 色综合久久久久| 91精品91久久久中77777| 日本不卡在线视频| 国产精品欧美综合在线| 久久综合九色综合97婷婷女人 | 国产精品久久久久永久免费观看 | 国产精品一级片在线观看| 天天爽夜夜爽夜夜爽精品视频 | 国产精品毛片久久久久久| 日韩欧美一区二区久久婷婷| 这里只有精品99re| 欧美天堂亚洲电影院在线播放| 波多野结衣的一区二区三区| 国产成人综合在线| 国产精品一区二区久激情瑜伽| 久久精品噜噜噜成人av农村| 石原莉奈一区二区三区在线观看| 亚洲成在人线免费| 五月婷婷激情综合| 无码av中文一区二区三区桃花岛| 亚洲风情在线资源站| 日韩精品一级中文字幕精品视频免费观看| 亚洲色欲色欲www| 一区二区三区精品视频在线| 一区二区在线观看视频| 亚洲日本青草视频在线怡红院| 亚洲女人****多毛耸耸8| 亚洲宅男天堂在线观看无病毒| 亚洲精品老司机| 天涯成人国产亚洲精品一区av| 免费久久精品视频| 国产精品亚洲人在线观看| av一区二区三区黑人| 欧美男人的天堂一二区| 欧美电视剧免费观看| 亚洲国产精品ⅴa在线观看| 中文无字幕一区二区三区| 一区二区三区中文免费| 国产主播一区二区三区| 色婷婷综合激情| 精品免费99久久| 亚洲精品中文在线影院| 日韩电影一区二区三区四区| 粉嫩在线一区二区三区视频| 91精品福利在线一区二区三区 | 欧美日韩二区三区| 亚洲国产精品传媒在线观看| 亚洲18女电影在线观看| 国产成人亚洲综合a∨婷婷| 欧美专区日韩专区| 亚洲午夜私人影院| 国产成人精品影院| 欧日韩精品视频| 国产精品三级电影| 国产乱码一区二区三区| 欧美电视剧在线观看完整版| 亚洲地区一二三色| 欧美在线免费观看视频| 亚洲精品视频一区二区| 不卡的av电影| 18欧美乱大交hd1984| 成人动漫视频在线| 国产日韩av一区| 国产成+人+日韩+欧美+亚洲| 精品蜜桃在线看| 精品一区二区三区免费毛片爱| 欧美精三区欧美精三区| 亚洲综合色成人| 成人黄页在线观看| 国产精品国产成人国产三级 | 91国偷自产一区二区开放时间 | 亚洲天堂网中文字| 国产成人av一区二区三区在线 | 一区二区三区中文免费| 日本韩国欧美在线| 亚洲精品成人少妇| 欧美私人免费视频| 日本不卡一区二区三区高清视频| 欧美主播一区二区三区| 亚洲电影第三页| 欧美亚男人的天堂| 免费久久99精品国产| 久久久久国产精品麻豆ai换脸| 精品一二三四区| 亚洲女同ⅹxx女同tv| 欧美性受xxxx| 国产一区二区免费在线|