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

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

?? vcd.c

?? 一個兩碟控制的VCD的代碼,兩碟之間的轉動及連續播放,已大量生產的CODE.
?? C
?? 第 1 頁 / 共 2 頁
字號:
	    time = *((unsigned int *)&scratch_buf[index]) & x00ffffff;
	    if (time > CDtime) {
		entry_number = previous_number;
		break;
	    }
    }

/* If not found (!found), use entry_number..which has already been
 * incremented correctly. Don't use previous_number.
 * Yong, this will accomplish what you tried with the CUST3 ifdef.
 */
#if 0 
    /* We treat it as the last entry in the last track */
    if (!found) {
#ifdef CUST3
	entry_number = get_total_entry_number() - 1;
#else
	entry_number = previous_number;
#endif
    }
#endif /* PV */

    return (entry_number);
}

#ifdef ABSOLUTE_GOTO_TIME
/*------------------------------------------------------------------------
  Function:get_track_number
  Parameters:
      CDtime : BCD 0x00mmssff format.
  Description:
      Given a bcd time, return a track number that the CDtime is in
      that track.
  Return:
      0 : NO good.
------------------------------------------------------------------------*/
int get_track_number(int CDtime)
{
    int addr;
    int total_track_size;
    int track_number = 0;
    int found = 0;
    int track_begin_time;
    int track;
    int i;
    unsigned char *scratch_buf;

    /* check if the time is too big */
    if (CDtime >= (CDinfo.leadout & x00ffffff))
	return 0;

    total_track_size = (CDinfo.lasttrack - CDinfo.firsttrack) * 4;
    addr = TRACK_INFO_OFFSET + 4; /* skip the physical track 1 */

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

	/* find the track */
    for (i = 0; i < total_track_size; i++) {
	    track_number++;
	    track_begin_time = *((unsigned int *)&scratch_buf[4*i]) &x00ffffff;

	    if (track_begin_time > CDtime) {
		track_number--;	     /* The previous track is the right one. */
		found = 1;
		break;
	    }
    }

    if (!found)
	track_number = CDinfo.lasttrack;

    return (track_number);
}

#endif

/*-----------------------------------------------------------
  Function: get_track_info
  Return Value:
    GOOD -> success
    BAD -> failure
-----------------------------------------------------------*/
int get_track_info(unsigned char track_num, unsigned int *start_mmssff,
		   unsigned int *end_mmssff, unsigned char *type)
{
#if 1
    int addr, last_track;
    unsigned char *scratch_buf;

#ifdef CUST4 /* CUST4 syscon gives us physical not logical track */
    last_track  = CDinfo.lasttrack - 1;
#else
    last_track  = CDinfo.lasttrack;
#endif /*CUST4*/

    if ((track_num < CDinfo.firsttrack) || 
	(track_num > last_track))
	return (BAD);

    /* get the track info data */
    addr = track_num * 4 + TRACK_INFO_OFFSET;
    scratch_buf = (char *)((addr | x2000000)& x0fffffff);

    *start_mmssff = (*((unsigned int *)&scratch_buf[0])) & x00ffffff;
    if (track_num < last_track) {
	*end_mmssff =  (*((unsigned int *)&scratch_buf[4])) & x00ffffff;
    }
    else { /* it is the last track, so the end_mmssff is the leave out time */
	*end_mmssff =  CDinfo.leadout & x00ffffff;
    }

    *end_mmssff = adjCDtime(*end_mmssff, 0x0100, 0);	/* minus 1 second */

    *type = (scratch_buf[0] & 0x40) >> 6;	/* check bit 6 for audio or data */
				        /* 0 -> CDDA. */
    return (GOOD);

#else	/* get track info from entries.vcd */

 /* get track info from entries.vcd */
    int addr;
    int last_entry;
    int i, j;
    int find_first = 0;
    unsigned char *scratch_buf; 

    /* check whether the seg_num is a good one */
    *start_mmssff = 0x2933;

track_num++;

    if (track_num < 2 || track_num > 99)
	return (BAD);


    addr = ENTRY_START_OFFSET; /* 0 base */

    last_entry = get_total_entry_number();

    for (i = 0; i < last_entry; i++) {
	if (!(mod_func(i, 64))) /* get next 64 long word bytes */ {
	    addr = ENTRY_START_OFFSET + i * 4; /* 4 bytes per entry */
    	    scratch_buf = (char *)((addr | x2000000)& x0fffffff);
	}

	j = mod_func(i, 64);	/* find the offset from scratch_buf */

	/* check we find the first entry whose track number == track_num */
	if ((scratch_buf[4*j] == track_num) && (!find_first)) {
	    *start_mmssff = (*((unsigned int *)&scratch_buf[4*j])) & x00ffffff;
	    find_first = 1;

	}

	/* check we find the first entry of the next track */
	if ((scratch_buf[4*j] != track_num) && (find_first)) {
	    *end_mmssff = (*((unsigned int *)&scratch_buf[4*j])) & x00ffffff;
	    break;

	}
    }
    
    return (GOOD);
#endif
}

/*-----------------------------------------------------------
  Function: reset_PSD
  NOTE: This function should be called when a new disk is
        put in CD drive.
-----------------------------------------------------------*/
void reset_PSD()
{
    PSD_start_addr = -1;
    PSD_end_addr = -1;
}

/*-----------------------------------------------------------
  Function: get_PSD
  Description: For a given PSD offset, it copys data from
     the PSD offset to buffer.

  Return Value:
     The number of bytes copied.
-----------------------------------------------------------*/
#if 1 /*def ECHO*/
#define SECTION_SIZE		512	/* bytes */
char * get_PSD(int offset, int size)
{
    int addr;
    int sector;
    int start_mmssff, search_mmssff;
    unsigned char  ss, ff, search_ff, search_ss;
    int tmp;
    int end_addr;

    addr = offset * 8;	/* Offset multiplier */
    end_addr = addr + size;
    if ((addr < PSD_start_addr || addr >= PSD_end_addr) ||
	(end_addr >= PSD_end_addr)) {
	int num_of_sectors, i;
	int start_section;	/* 512 bytes is one section. */
	int start_offset;
	int end_section;

	/* We get one sector for PSD if all data we need belong to one sector.
	   Otherwise, we need cross two secotrs.*/
	start_section = (addr % PSD_SECTOR_SIZE) / SECTION_SIZE;
	end_section = (end_addr % PSD_SECTOR_SIZE) / SECTION_SIZE;

	/* byte position from 0 to 511 is section 1.
	   byte position form 512 to 1023 is section 2.... */
	if (start_section == 3) {
	    /* the last section of the first sector
	       and the first section of the next one. */
	    num_of_sectors = 2;
	} else {
	    num_of_sectors = 1;
	}

	sector = addr / PSD_SECTOR_SIZE;
	start_offset = start_section * SECTION_SIZE;
	PSD_start_addr = sector * PSD_SECTOR_SIZE + 
	                 (start_section * SECTION_SIZE);
	PSD_end_addr = PSD_start_addr + PSD_SIZE;

	for (i = 0; i < num_of_sectors; i++) {
	    int offset;

	    sector += i;
	    tmp = (34 + sector) % 75; 
	    ff = hex2bcd[tmp]; /* 75 sector / second */
	    tmp = (34 + sector) / 75;
	    ss = hex2bcd[tmp + 0x04];
	
	    search_mmssff = (ss << 8) | ff;
	    getSectors(search_mmssff, 1, 2048);

	    if (num_of_sectors == 1) {
		put_scratch(PSD_START_OFFSET, (CDI_ptr + start_offset), 
			    SECTION_SIZE * 2);
	    } else {
		/* two sectors case */
		if (i == 0) {
		    put_scratch(PSD_START_OFFSET, (CDI_ptr + start_offset), 
				SECTION_SIZE);
		} else {
		    put_scratch((PSD_START_OFFSET + SECTION_SIZE), CDI_ptr, 
				SECTION_SIZE);
		}
	    }	
	}
    }

    addr -= PSD_start_addr;	/* adjust the addr */
    return (char *)((addr + PSD_START_OFFSET)|x2000000);
}

#else	/* ECHO */

char * get_PSD(int offset, int size)
{
    int addr;
    int sector;
    int start_mmssff, search_mmssff;
    unsigned char  ss, ff, search_ff, search_ss;
    int tmp;

    addr = offset * 8;	/* Offset multiplier */

    if ((addr < PSD_start_addr || addr >= PSD_end_addr) ||
	((addr + size) >= PSD_end_addr)) {
	/* get a new PSD data */
	int num_of_sectors, i;
	sector = addr / PSD_SECTOR_SIZE;
				/* use software mod/div  function. */
				/* since we do not want to inclue */
				/* div/mod library. */

	/* We need to decide whether we get a complete sector for PSD or
	   two half-secotr from 2 sectors for PSD. */
	if (((sector + 1) * PSD_SECTOR_SIZE) >= (addr + size)) {
	    num_of_sectors = 1;
	    PSD_start_addr = sector * PSD_SECTOR_SIZE;
	} else {
	    num_of_sectors = 2;
	    PSD_start_addr = sector * PSD_SECTOR_SIZE + (PSD_SECTOR_SIZE >> 1);
	}
	PSD_end_addr = PSD_start_addr + PSD_SECTOR_SIZE;

	for (i = 0; i < num_of_sectors; i++) {
	    sector += i;
	    tmp = (34 + sector) % 75; 
	    ff = hex2bcd[tmp]; /* 75 sector / second */
	    tmp = (34 + sector) / 75;
	    ss = hex2bcd[tmp + 0x04];
	
	    search_mmssff = (ss << 8) | ff;
	    getSectors(search_mmssff, 1, 2048);

	    if (num_of_sectors == 1)
		put_scratch(PSD_START_OFFSET, CDI_ptr, PSD_SECTOR_SIZE);
	    else if (i == 0)
		put_scratch(PSD_START_OFFSET, CDI_ptr+(PSD_SECTOR_SIZE >> 1), 
			    PSD_SECTOR_SIZE >> 1);
	    else
		put_scratch(PSD_START_OFFSET + (PSD_SECTOR_SIZE >> 1), 
			    CDI_ptr, PSD_SECTOR_SIZE >> 1);
	}
    }

    addr -= PSD_start_addr;	/* adjust the addr */
    return (char *)((addr + PSD_START_OFFSET));
}
#endif  /* ECHO */

#ifdef PRE_EMPHASIS
int is_track_pre_emphasis(int track_num)
{
    int		addr;
    char	control;
    unsigned char *scratch_buf; 

    /* get the track info data */
    addr = track_num * 4 + TRACK_INFO_OFFSET;
    scratch_buf = (char *)((addr | x2000000)& x0fffffff);

    control = scratch_buf[0] >> 4;

    /* see red book for info */   
    control &= 0xd;
    if ((control == 0x1) || (control == 0x9))
	return 1;

    return 0;
}
#endif /*PRE_EMPHASIS*/

#ifdef SCENE
/*-----------------------------------------------------------
  Function: get_list_offset
  Description: For a given list ID number, it gets the 
     the corresponding list ID offset.

  Return Value:
     The list ID offset.
-----------------------------------------------------------*/
unsigned short get_list_offset(unsigned int list_id_num)
{
    int odd_id = 0;
    unsigned int addr;
    unsigned short list_offset;
    unsigned char *scratch_buf; 

    if (list_id_num & 0x1) { /* Check for odd number */
	list_id_num &= 0xfffffffe;
	odd_id = 1;
    }     
    addr = (list_id_num << 1); /* (2 * list_id_num) bytes */
    addr += LOT_VCD_OFFSET;
    scratch_buf = (char *)((addr | x2000000)& x0fffffff);
    
    if (odd_id)
	list_offset = *((unsigned short *)(&scratch_buf[2]));
    else
	list_offset = *((unsigned short *)(scratch_buf));

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


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
懂色一区二区三区免费观看| 欧美一区二区三区视频| 欧美日本一区二区三区四区| 久久久久国产精品厨房| 日韩在线观看一区二区| 色综合久久中文综合久久97| 久久久久久久精| 美国毛片一区二区| 欧美色视频一区| 亚洲视频在线观看三级| 91麻豆免费看| 国产精品入口麻豆原神| 麻豆免费精品视频| 91精品啪在线观看国产60岁| 亚洲靠逼com| av亚洲精华国产精华| 国产日韩精品视频一区| 久久99精品国产麻豆不卡| 欧美久久久久久久久| 亚洲精品免费电影| 色老头久久综合| 中文字幕一区免费在线观看| 丰满白嫩尤物一区二区| 国产午夜三级一区二区三| 经典三级在线一区| 精品久久久久久久人人人人传媒 | 在线观看一区日韩| 亚洲美女淫视频| 99精品视频在线播放观看| 自拍偷拍欧美激情| av在线不卡免费看| 综合久久综合久久| 在线观看免费视频综合| 一区二区三区欧美日| 欧美日韩一区二区三区免费看| 一区二区三区欧美久久| 欧美日本精品一区二区三区| 激情文学综合丁香| 久久嫩草精品久久久久| 国产资源在线一区| 国产亚洲欧美日韩俺去了| 粉嫩av一区二区三区| 成人欧美一区二区三区白人 | 91精品婷婷国产综合久久竹菊| 日韩激情av在线| 日韩精品一区在线| 国产91在线观看| 一区二区三区在线高清| 91麻豆精品国产91久久久 | 亚洲精品国产成人久久av盗摄 | 91在线国内视频| 伊人性伊人情综合网| 欧美久久久久免费| 国内精品久久久久影院薰衣草| 国产亚洲综合在线| 91色综合久久久久婷婷| 日韩电影在线观看一区| 久久网这里都是精品| 白白色亚洲国产精品| 亚洲成人777| 久久精品亚洲乱码伦伦中文| 91国偷自产一区二区开放时间| 日韩福利视频网| 亚洲国产精品成人综合| 欧美影视一区在线| 国产中文字幕精品| 一区二区日韩电影| www激情久久| 91官网在线免费观看| 看电视剧不卡顿的网站| 另类小说图片综合网| 中文字幕在线观看不卡视频| 91精品国产一区二区三区| 国产91精品一区二区麻豆亚洲| 天天色天天爱天天射综合| 日本一区二区免费在线| 51精品久久久久久久蜜臀| av不卡免费在线观看| 日av在线不卡| 亚洲综合久久av| 国产精品另类一区| 精品国产三级a在线观看| 91成人免费网站| 国产成人av自拍| 青青草精品视频| 亚洲一区免费视频| 中文字幕日韩av资源站| 久久久精品中文字幕麻豆发布| 欧美三级视频在线观看| 91丨九色丨蝌蚪富婆spa| 狠狠色丁香婷婷综合久久片| 日韩av电影免费观看高清完整版在线观看 | 久久亚洲精精品中文字幕早川悠里 | 视频在线在亚洲| 亚洲精品免费一二三区| 成人免费一区二区三区视频| 国产精品嫩草影院av蜜臀| 久久这里只精品最新地址| 91精品国产免费| 7777女厕盗摄久久久| 欧美在线影院一区二区| 日本福利一区二区| 成人av免费在线| 东方欧美亚洲色图在线| 国产在线精品一区二区夜色| 老司机午夜精品| 麻豆91精品91久久久的内涵| 免费精品视频在线| 美日韩一区二区三区| 蜜桃免费网站一区二区三区| 日本不卡视频一二三区| 日韩高清不卡一区二区三区| 午夜精品久久久久久久| 亚洲国产乱码最新视频 | 欧美三级韩国三级日本三斤| eeuss鲁一区二区三区| 97国产精品videossex| 色综合久久中文字幕综合网| 色香蕉久久蜜桃| 欧美色视频在线观看| 欧美精品第一页| 精品久久免费看| 久久精品夜夜夜夜久久| 国产精品毛片久久久久久| 日韩理论在线观看| 亚洲一区影音先锋| 人人狠狠综合久久亚洲| 国模少妇一区二区三区| 国产不卡视频一区| 在线看日本不卡| 91麻豆精品国产91久久久久| 久久久影视传媒| 综合自拍亚洲综合图不卡区| 亚洲一区二区在线免费观看视频| 日韩制服丝袜av| 91蝌蚪porny成人天涯| 欧美人与z0zoxxxx视频| 精品国精品国产| 中文字幕在线观看一区二区| 亚洲www啪成人一区二区麻豆| 九九精品视频在线看| gogogo免费视频观看亚洲一| 欧美精品欧美精品系列| 久久久久久久久蜜桃| 亚洲综合自拍偷拍| 久久成人麻豆午夜电影| 91小视频免费看| 精品国产露脸精彩对白 | 99国内精品久久| 7777精品伊人久久久大香线蕉的 | 91亚洲精品一区二区乱码| 欧美日本在线一区| 亚洲国产精品黑人久久久| 五月天婷婷综合| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 日本道色综合久久| 精品国产123| 亚洲成人动漫在线免费观看| 国产精品一级黄| 91精品欧美一区二区三区综合在 | 亚洲成av人片在www色猫咪| 激情六月婷婷综合| 色偷偷久久人人79超碰人人澡| 欧美mv日韩mv亚洲| 亚洲激情男女视频| 国产河南妇女毛片精品久久久 | 久久国产麻豆精品| 91免费在线看| 久久精品亚洲精品国产欧美kt∨ | 国产精品12区| 欧美一区二区在线观看| 亚洲免费大片在线观看| 大陆成人av片| 26uuu国产在线精品一区二区| 亚洲国产精品一区二区尤物区| 成人爽a毛片一区二区免费| 日韩午夜激情av| 亚洲成人高清在线| 日本丰满少妇一区二区三区| 国产精品看片你懂得| 国产精品一区不卡| 欧美精品一区二区三| 日本成人中文字幕| 欧美日韩一区二区在线观看视频| 亚洲人成网站色在线观看| 国产成都精品91一区二区三| 久久一区二区三区四区| 蜜桃视频第一区免费观看| 欧美一区二区三区在线看| 午夜精品视频一区| 欧美三级韩国三级日本一级| 夜夜操天天操亚洲| 欧美三级日韩在线| 亚洲午夜一区二区三区| 一本久久综合亚洲鲁鲁五月天 | 日韩欧美国产午夜精品| 日本亚洲三级在线| 日韩欧美国产一区在线观看| 久久精品噜噜噜成人av农村| 日韩亚洲欧美综合|