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

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

?? vcd.c

?? 一個兩碟控制的VCD的代碼,兩碟之間的轉(zhuǎn)動及連續(xù)播放,已大量生產(chǎn)的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一区二区三区免费野_久草精品视频
欧美日韩亚洲国产综合| 久久尤物电影视频在线观看| 蜜桃视频一区二区三区在线观看| 亚洲精品欧美激情| 亚洲特级片在线| 国产精品免费网站在线观看| 久久久久99精品一区| 久久人人97超碰com| 国产亚洲美州欧州综合国| 久久久久久电影| 日韩一区二区三区电影在线观看| 精品日本一线二线三线不卡| 欧美不卡视频一区| 精品国产一区二区三区久久久蜜月 | 精彩视频一区二区| 99久久99久久精品免费看蜜桃| 91官网在线免费观看| 久久久久99精品一区| 九九视频精品免费| 丝袜美腿一区二区三区| 成人伦理片在线| 亚洲欧美激情一区二区| 日韩激情一二三区| 亚欧色一区w666天堂| 一个色妞综合视频在线观看| 亚洲欧美激情插| 亚洲妇熟xx妇色黄| 紧缚奴在线一区二区三区| 国产精品99久久久久久有的能看| www.亚洲免费av| 欧美日韩精品一二三区| 精品久久久久久久久久久久久久久久久 | 日本中文字幕一区| 久久97超碰色| av一区二区三区| 欧美一区二区在线视频| 中文字幕av在线一区二区三区| 自拍偷自拍亚洲精品播放| 亚洲午夜免费视频| 极品销魂美女一区二区三区| 色综合久久中文综合久久牛| 91精品国产一区二区三区蜜臀| 国产视频一区二区在线观看| 亚洲日本va在线观看| 精品一区中文字幕| 91成人免费网站| 中文字幕欧美日本乱码一线二线| 亚洲成a人片在线不卡一二三区| 国产精品18久久久久久久网站| 欧美中文字幕一区二区三区 | 69av一区二区三区| 国产精品久久影院| 免费高清不卡av| 色婷婷一区二区三区四区| 国产亚洲人成网站| 日韩av在线发布| 欧美日韩成人在线一区| 日韩一区中文字幕| 国产成人免费高清| 欧美电影免费观看高清完整版| 一二三四区精品视频| jlzzjlzz亚洲日本少妇| 国产亚洲一区二区三区| 日本最新不卡在线| 欧美一区二区在线免费观看| 午夜欧美2019年伦理| 色综合天天综合狠狠| 国产精品久久久久aaaa樱花| 高清国产一区二区| 国产欧美日本一区二区三区| 毛片av一区二区| 欧美一区二区三区四区高清| 首页国产丝袜综合| 欧美精品久久久久久久久老牛影院| 亚洲欧洲制服丝袜| 一本久道中文字幕精品亚洲嫩| 国产精品电影一区二区三区| 老司机免费视频一区二区| 国产资源精品在线观看| 精品国产一区二区亚洲人成毛片 | 久久久电影一区二区三区| 美国十次了思思久久精品导航| 91超碰这里只有精品国产| 亚洲第一福利一区| 欧美一级xxx| 狠狠色狠狠色综合系列| 精品国产成人在线影院 | 日av在线不卡| 日韩欧美国产一区二区三区| 美腿丝袜亚洲综合| 久久嫩草精品久久久精品| 国产成人免费在线观看| 亚洲免费观看视频| 欧美日韩不卡视频| 久久69国产一区二区蜜臀| 久久精品日产第一区二区三区高清版| 国产精品18久久久久久久久久久久| 国产精品久久久久桃色tv| 91黄色在线观看| 琪琪一区二区三区| 国产香蕉久久精品综合网| 99精品视频在线观看免费| 亚洲成人免费在线观看| 7777女厕盗摄久久久| 国产夫妻精品视频| 亚洲综合免费观看高清在线观看| 在线不卡a资源高清| 国产高清不卡二三区| 亚洲精品老司机| 精品日韩在线一区| 91美女精品福利| 久久国产精品99久久人人澡| 国产午夜精品久久久久久免费视 | 亚洲国产精品天堂| 久久久.com| 欧美喷水一区二区| 国产精品夜夜嗨| 爽爽淫人综合网网站| 亚洲欧美一区二区久久| 91精品国产高清一区二区三区 | 成人高清伦理免费影院在线观看| 亚洲精品视频自拍| 国产亚洲精品超碰| 欧美日韩国产高清一区二区三区| 九一九一国产精品| 亚洲一线二线三线视频| 中文字幕欧美日韩一区| 欧美成va人片在线观看| 91农村精品一区二区在线| 国产一区二区三区黄视频| 亚洲一区二区三区自拍| 欧美国产乱子伦| 久久综合九色欧美综合狠狠| 欧美视频精品在线| 91亚洲精品久久久蜜桃网站| 免费视频最近日韩| 婷婷激情综合网| 亚洲在线观看免费视频| 亚洲欧美一区二区三区久本道91 | youjizz久久| 国产精品亚洲一区二区三区妖精| 亚洲影院理伦片| 亚洲欧美一区二区三区国产精品| 久久综合久久鬼色中文字| 欧美日韩专区在线| av一区二区三区黑人| 国产精品一区在线观看你懂的| 蜜桃传媒麻豆第一区在线观看| 午夜视频久久久久久| 水野朝阳av一区二区三区| 亚洲一区二区在线视频| 亚洲免费视频中文字幕| 自拍偷在线精品自拍偷无码专区| 国产欧美精品一区二区色综合| 日本一二三四高清不卡| 国产精品视频一二| 国产三级精品视频| 国产日韩欧美在线一区| 日韩精品资源二区在线| 精品久久久影院| 久久精品免视看| 亚洲精选视频免费看| 亚洲一区二区三区美女| 视频一区在线播放| 久久99国产乱子伦精品免费| 久久精品国产亚洲a| 激情图片小说一区| 国产成人精品午夜视频免费| 99亚偷拍自图区亚洲| 色婷婷亚洲婷婷| 看片网站欧美日韩| 中文字幕第一页久久| 久久亚洲欧美国产精品乐播| 日韩一级片在线观看| 亚洲精品在线观看视频| 国产日韩av一区二区| 亚洲欧美一区二区久久| 视频一区欧美精品| 国产一区日韩二区欧美三区| 99久久伊人网影院| 欧美剧在线免费观看网站| 精品日韩在线一区| 亚洲三级免费观看| 日本美女视频一区二区| 国产福利一区二区三区| 色偷偷久久一区二区三区| 欧美变态tickle挠乳网站| 亚洲欧洲精品成人久久奇米网| 亚洲成av人片一区二区| 国产成人av自拍| 欧美高清视频不卡网| 国产精品卡一卡二| 男人操女人的视频在线观看欧美| 国产91精品一区二区麻豆网站| 欧美性受xxxx黑人xyx性爽| 久久亚洲捆绑美女| 亚洲成人一区二区在线观看| 国模少妇一区二区三区| 欧美吞精做爰啪啪高潮| 国产午夜精品一区二区三区视频 |