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

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

?? play.c

?? 一個兩碟控制的VCD的代碼,兩碟之間的轉(zhuǎn)動及連續(xù)播放,已大量生產(chǎn)的CODE.
?? C
?? 第 1 頁 / 共 5 頁
字號:
    cur_vcd_playitem = playitem_number;

    /* 2..99 -> play track */
    if ((playitem_number > 1) && (playitem_number < 100)) {
        play_track(playitem_number - 1); /* convert to 1 base */

        cur_track_number = playitem_number - 1; /* for display purpose */
    } else if ((playitem_number > 99) && (playitem_number < 600)) {
        play_entry(playitem_number - 99); /* 100..599 -> play entry */
    } else if ((playitem_number > 999) && (playitem_number < 2980)) {
        play_segment(playitem_number - 999); /* 1000..2979 -> play segment */
    } else {
        /* wrong item number. We go to the PLAY_WAIT_TIME_STATE and
	   hopefully, we will get good play item next time after
	   time expired or user inputs.*/
	play_state = PLAY_WAIT_TIME_STATE;
    }
}

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

  Parameters:

  Description: This function checks if we need to adjust the
               play_item_end_time.
------------------------------------------------------------------------*/
void check_playing_time()
{
    int mmssff;

    /* if we are playing item from play list, we need to check the */
    /* playing time.                                               */
    if ((cur_list_state ==  PLAY_LIST_STATE) &&
        (play_list_playing_time > 0)) {
        mmssff = logical2physical(5*(play_list_playing_time));
        play_item_end_time =
            adjCDtime(play_item_start_time, mmssff, 1);
    }
}

/*------------------------------------------------------------------------
  Function: play_track
  Parameters:
      track_number: The track number to be played. The track number is
          1 base. For VideoCD, the mpeg track number starts at 2 is
          converted to 1 base. Fox example: If we want to play track 2
          on video CD, the track_number should be 1.
  Description:
      It plays an MPEG audio/video track.
------------------------------------------------------------------------*/
static void play_track(int track_number)
{
    int mmssff;

    /* reset bad audio frame counter to zero at the beginning */
       bad_track_len = 0;

    /* reset picture_type to normal */
    picture_type = 0xe0;
    /* update panel */
    panel_play_track(track_number);

    /* 15-08-96 Alger */
    getTrackTime(track_number, &CurrentTrackTime);
    dsa_reset();

    /* get track info */
    get_track_info(track_number, &play_item_begin_time,
                   &play_item_real_end_time,
                   &play_item_type);
    play_item_start_time = play_item_begin_time;
    play_item_end_time = play_item_real_end_time;


    /* find out whether the track contains entries */
     if ((CDinfo.type == CD_VCD) && (!PBC_on) &&
	 (PLAY_vcd_type & (VCD_TYPE_11|VCD_TYPE_20)) &&
         (play_item_type == DATA_TRACK)) {
         track_entry_number = get_track_entries(track_number,
                                                &track_entry_beg,
                                                &track_entry_end);

         track_current_entry = track_entry_beg;

         if (!intro_mode && track_entry_number > 1) {
             play_state = PLAY_ENTRY_LIST_STATE;
             return;
         }
    }

    PRINTF(("track %d, start time %x, end time %x\n", track_number,
       play_item_start_time, play_item_end_time));

    /* if we are playing item from play list, we need to check the */
    /* playing time.                                               */
    check_playing_time();

    /* set the play_end time to INTRO_TIME_MMSSFF */
    if (intro_mode) {
        mmssff = adjCDtime(play_item_start_time, INTRO_TIME_MMSSFF, 1);
        if (play_item_end_time >= mmssff) {
	    second_endCDtime = mmssff;
        }
    }

    play_item_mode = PLAY_INFO_STOP_MODE;

    /* go to play */
    play_state = PLAY_NORMAL_STATE;
    return;
}

/*------------------------------------------------------------------------
  Function: play_entry
  Parameters:
      entry_number: The entry number that this function will play.
  Description:
      Play an entry in VIDEO CD.
------------------------------------------------------------------------*/
static void play_entry(int entry_number)
{
    unsigned char track_number;

    /* get entry info */
    get_entry_info(entry_number, &track_number,
                   &play_item_start_time,  /* entry start time */
                   &play_item_real_end_time);

    /* update panel & OSD */
    cur_track_number = track_number - 1;
    panel_play_track(cur_track_number);

    /* get track info, since we play entry until track end */
    get_track_info(track_number - 1, /* logical track starts at 1 */
		   &play_item_begin_time,  /* starting time of track */
                   &play_item_real_end_time,
                   &play_item_type);
    play_item_end_time = play_item_real_end_time;

    PRINTF(("entry %d, start time %x, end time %x\n", entry_number,
       play_item_start_time, play_item_end_time));

    /* if we are playing item from play list, we need to check the */
    /* playing time.                                               */
    check_playing_time();

    play_item_mode = PLAY_INFO_STOP_MODE;
    play_item_type = DATA_TRACK;

    /* go to play */
    PRINTF(("Play Entry %d\n", entry_number));
    play_state = PLAY_NORMAL_STATE;

    return;
}

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

  Parameters:

  Description:
------------------------------------------------------------------------*/
static void play_entry_in_track(int entry_number)
{
    int mmssff;
    int dummy2;
    unsigned char dummy1;

    PANEL_PLAY_INDEX((entry_number - track_entry_beg + 1));

    /* get the next entry time for updating lcd in the futurte */
    if (!get_entry_info(entry_number + 1, &dummy1, &next_entry_time,
                   &dummy2)) {
        next_entry_time = x00999999;    /* no next entry */
    }

    /* since the beg_time will be modified to entry beg_time by
       play_entry function, we have to store it. */

    mmssff = play_item_begin_time;

    /* play entry */
    play_entry(entry_number);
    play_item_begin_time = mmssff;
}

/*------------------------------------------------------------------------
  Function: play_segment
  Parameters:
      segment_number
  Description:
------------------------------------------------------------------------*/
static void play_segment(int segment_number)
{
    unsigned char content;
    int           len;  /* # of segment */
    int           seconds;
    int		video_type;

    /* get segment content and play length */
    get_segment_info(segment_number, &content, &len);

    /* compute the start and end time */
    if (first_seg_ad == 0)      /* in case we do not have value. */
        first_seg_ad = 0x0500;

    seconds = bcd2hex[((first_seg_ad >> 16) & 0xff)] * 60; /* min -> sec */
    seconds += bcd2hex[(first_seg_ad >> 8) & 0xff] + (segment_number -1) * 2;
    play_item_begin_time =
        logical2physical(seconds * 75); /* Sec->Frm */
    play_item_start_time = play_item_begin_time;
    play_item_end_time =
        logical2physical((seconds + len * 2) * 75);
    play_item_real_end_time = play_item_end_time;
    play_item_type = DATA_TRACK;

    /* if we are playing item from play list, we need to check the */
    /* playing time.                                               */
    check_playing_time();

    play_item_mode = PLAY_INFO_STOP_MODE;
    PRINTF(("seg %d, start 0x%x, end 0x%x\n",
            segment_number,
            play_item_start_time,
            play_item_end_time));

    /* check play type */
    video_type = content & 0xC;        /* bit 2..3 */
    play_still_retry = 3;		/* Retry still 3 times if error	*/
    play_state = PLAY_STILL_STATE;	/* Assume it is still		*/

    if (video_type == 4) {
        seg_sel = 1;
        PRINTF(("E1\n"));
    } else
    if (video_type == 8) {
        seg_sel = 2;
        PRINTF(("E2\n"));
    } else {
    /* if the zoom level != 1, reset it */
#ifdef ZOOM
	if (zoom_level) {
	    zoom_reset();
	}
#endif
        seg_sel = 0;
	play_still_retry = 0;
        play_state = PLAY_NORMAL_STATE;
        PRINTF((" Motion\n"));
    }

    picture_type = 0xe0 | seg_sel;

    panel_play_track(0);
    cur_track_number = 0; /* Set for OSD */

    return;
}


#ifdef MDC_GAME
static void play_mdc_game(int segment_number)
{
    int           seconds;
#ifndef NEW_OSD
    OSD_clear_region(6);
    OUTOSD(1,"PLEASE WAITING ...","PLEASE WAITING ...",1);
#endif

#ifdef FU_HUASHENG
    VFD_icon(VFDICON_game_on);
#endif

    /* compute the start time */
    if (first_seg_ad == 0)      /* in case we do not have value. */
        first_seg_ad = 0x0500;  /* assume set to 00:05:00 */

    seconds = bcd2hex[((first_seg_ad >> 16) & 0xff)] * 60; /* min -> sec */
    seconds += bcd2hex[(first_seg_ad >> 8)] + (segment_number -1000) * 2;
    play_item_begin_time =
        logical2physical(seconds * 75); /* Sec->Frm */
    play_item_start_time = play_item_begin_time;

    MDC_play_game(play_item_start_time,mdc_game_list_buffer_size);

    PRINTF(("seg %d, st art 0x%x\n",
            segment_number,
            play_item_start_time));

    panel_play_track(0);
    cur_track_number = 0; /* Set for OSD */
    play_state = PLAY_WAIT_GAME_STATE;
    return;
}
#endif



/*------------------------------------------------------------------------
  Function:assign_selection_list
  Parameters:
      scratch: Is a pointer to the selection list data.
  Description:
      Assign selection data to a selection_list structure.
------------------------------------------------------------------------*/
static void assign_selection_list(unsigned char *scratch_buf)
{
    selection_list_number_of_selections = scratch_buf[2];
    selection_list_base_of_selection_number = scratch_buf[3];
    list_previous_list_offset = *((short *)(scratch_buf+6));
    list_next_list_offset = *((short *)(scratch_buf+8));
    selection_list_default_list_offset = *((short *)(scratch_buf+12));
    list_return_list_offset = *((short *)(scratch_buf+10));
    selection_list_time_out_list_offset = *((short *)(scratch_buf+14));
    selection_list_wait_time_for_timeout = scratch_buf[16];
    selection_list_loop_count_and_jump_timing = scratch_buf[17];
    selection_list_play_item_number = *((short *)(scratch_buf+18));

    selection_list_loop_count =
        (selection_list_loop_count_and_jump_timing & 0x7f); /* bit 0-6 */

    if (selection_list_play_item_number <= MAX_TRACK_NUMBER) {
        /* HACK: We ignore the jump time for track, since track might
           take a long time and user will think that the player is
           dead since the player is not accepting any new key. */
        selection_list_jump_time  = 0;
    } else {
        selection_list_jump_time =
            selection_list_loop_count_and_jump_timing & 0x80;
    }
}

/*------------------------------------------------------------------------
  Function:assign_play_list
  Parameters:
      scratch: Is a pointer to a play list data.
  Description:
      Assign selection data to a play_list structure.
------------------------------------------------------------------------*/
static void assign_play_list(unsigned char *scratch_buf)
{
    play_list_number_of_items = scratch_buf[1];
    list_previous_list_offset = *((short *)(scratch_buf+4));
    list_next_list_offset = *((short *)(scratch_buf+6));
    list_return_list_offset = *((short *)(scratch_buf+8));
    play_list_playing_time = *((short *)(scratch_buf+10));
    play_list_play_item_wait_time = scratch_buf[12];
    play_list_auto_pause_wait_time = scratch_buf[13];
    play_list_play_item_number = 1;     /* default play item */
}


#ifdef MDC_GAME
static void assign_mdc_game_list(unsigned char *scratch_buf)
{
    play_list_number_of_items = 1;
    list_previous_list_offset = *((short *)(scratch_buf+4));
    list_next_list_offset = *((short *)(scratch_buf+6));
    list_return_list_offset = list_next_list_offset;
    play_list_playing_time = 0xff;
    play_list_play_item_wait_time = 0xff;
    play_list_auto_pause_wait_time = 0xff;
    play_list_play_item_number = 1;     /* default play item */

    mdc_game_list_buffer_size = * ((short *)(scratch_buf + 10));
}
#endif

/*--------------------------------------------------------------------
   Parameters:
   begin_time   is the time in 1/64 unit when timer is set.
   expire_time  is the wait time in VIDEO CD represetation.

   Return value:
       Return 1 when time expired. Otherwise return 0.
----------------------------------------------------------------------*/
static int is_time_expired(unsigned int begin_time, short expire_time)
{
    int expire_seconds;
    int expire_time_period;     /* in 1/64 second unit */
    int time_pass;

    /* no wait */
    if (expire_time == 0)
        return (1);

    /* infinite */
    if (expire_time == 0xff)
        return (0);

    expire_seconds =
        (expire_time <= 60) ? expire_time : (expire_time - 60)*10 + 60;
    expire_time_period = expire_seconds * ONE_SECOND;

    time_pass = glbTimer - begin_time;
    if (time_pass < 0) time_pass -= 1;

    if (time_pass >= expire_time_period) {
        return (1);
    }
    return (0);
}

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

  Description:
     This function returns a random value between 1 and mode_number
     (included) .

  NOTE: This function only works for mode_number <= 256
------------------------------------------------------------------------*/
#define MASK    0x57
unsigned int SeedSeed = 0xbadface;
int get_random_number(unsigned char mod_number)
{
    int number;

    if (SeedSeed & x80000000)
        SeedSeed = ((SeedSeed ^ MASK) << 1) | 1;
    else
        SeedSeed <<= 1;

    number = SeedSeed >> 24;

    while (number >= mod_number)
        number -= mod_number;

    number++;   /* get number from 1 to mod_number */

    return (number);
}

static void fill_track_list()
{
    int track_num;
    int i;

    track_list_max = 0; /* do not remove, since find_track_number
			   needs it. */

    for (i  = 0; i < CDinfo.lasttrack; i++) {
	if (shuffle_on) {
	    do {
		track_num = get_random_number(CDinfo.lasttrack);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内外成人在线视频| 国产一区二区三区久久久| 日韩欧美二区三区| 97se狠狠狠综合亚洲狠狠| 视频在线观看一区二区三区| 国产人妖乱国产精品人妖| 欧美日韩1区2区| 9l国产精品久久久久麻豆| 免费在线观看不卡| 曰韩精品一区二区| 久久久国际精品| 欧美日本在线播放| 欧美视频在线不卡| 成人黄色综合网站| 精东粉嫩av免费一区二区三区| 一区二区三区四区av| 国产欧美日韩另类视频免费观看| 欧美一级搡bbbb搡bbbb| 欧美在线你懂的| 91丨porny丨首页| 国产成人日日夜夜| 精品午夜久久福利影院| 日韩高清不卡一区二区三区| 亚洲男人的天堂在线观看| 国产精品欧美一级免费| 精品盗摄一区二区三区| 欧美一区二区精品| 欧美一区二区在线免费播放| 在线看日韩精品电影| 91污在线观看| heyzo一本久久综合| 不卡的电影网站| 成人精品国产免费网站| 成人看片黄a免费看在线| 国产麻豆精品在线| 国产精品一二三| 国产·精品毛片| 国产一区二区三区四| 国产综合色在线| 国产又黄又大久久| 高清在线成人网| 成人精品视频一区二区三区尤物| 韩国三级在线一区| 国产高清不卡二三区| 成人小视频免费在线观看| 国产成人av一区| 99久久精品情趣| 一本大道久久a久久精二百| 成人免费看的视频| 91啪亚洲精品| 色国产综合视频| 欧美日韩一本到| 4438x成人网最大色成网站| 日韩写真欧美这视频| 欧美成人激情免费网| 欧美精品一区二区三区很污很色的| 欧美精品一区二区久久久| 久久久久久毛片| 亚洲欧美日韩久久| 亚洲成av人片在线观看无码| 日本不卡视频一二三区| 国产一区二区三区在线观看精品 | 精品精品国产高清一毛片一天堂| 精品久久久影院| 国产精品毛片久久久久久久| 亚洲精品国产高清久久伦理二区| 午夜电影一区二区| 激情小说亚洲一区| 9i看片成人免费高清| 在线播放欧美女士性生活| 精品国产一区二区三区不卡| 日韩一区有码在线| 日本va欧美va欧美va精品| 韩国一区二区视频| 在线视频一区二区三| 精品国产乱码久久久久久牛牛| 国产精品国产三级国产aⅴ无密码| 一区二区三区精品| 国产一区二区三区四| 色哟哟欧美精品| 欧美一区二区三区视频免费播放| 久久麻豆一区二区| 亚洲一线二线三线久久久| 精品一区二区在线观看| 91小视频在线免费看| 欧美成人女星排名| 亚洲精品高清在线观看| 狠狠色伊人亚洲综合成人| 91蜜桃在线免费视频| 精品少妇一区二区三区免费观看| √…a在线天堂一区| 日本欧美一区二区在线观看| 懂色一区二区三区免费观看| 欧美日韩视频在线观看一区二区三区 | 天天影视色香欲综合网老头| 国产伦理精品不卡| 在线成人午夜影院| 亚洲天堂成人网| 国产综合久久久久久鬼色| 欧美日韩国产中文| 中文字幕一区二区在线观看| 蜜桃视频在线观看一区| 欧美在线观看一二区| 欧美韩国日本不卡| 免费观看成人鲁鲁鲁鲁鲁视频| 97久久精品人人做人人爽50路| 日韩欧美一级二级| 亚洲电影一级黄| 91网站在线观看视频| 日韩精品在线一区二区| 亚洲va国产天堂va久久en| 91在线视频在线| 久久久精品蜜桃| 久久99深爱久久99精品| 制服丝袜国产精品| 亚洲与欧洲av电影| 一本久久综合亚洲鲁鲁五月天 | 51精品秘密在线观看| 亚洲欧美日韩小说| 国产.精品.日韩.另类.中文.在线.播放| 欧美性极品少妇| 亚洲精品中文在线影院| 成人性色生活片免费看爆迷你毛片| 精品三级在线看| 日本不卡一二三区黄网| 欧美日免费三级在线| 亚洲精品成人少妇| 97精品久久久午夜一区二区三区 | 制服丝袜在线91| 亚洲国产视频网站| 欧洲一区在线电影| 亚洲一区精品在线| 欧美三级午夜理伦三级中视频| 亚洲最色的网站| 欧美色区777第一页| 亚洲国产cao| 欧美丰满一区二区免费视频| 亚洲成人动漫在线观看| 欧美精选一区二区| 男人的天堂久久精品| 日韩视频一区二区在线观看| 男男视频亚洲欧美| 精品国产亚洲一区二区三区在线观看| 久久国产综合精品| 久久免费电影网| 国产成人亚洲综合色影视| 亚洲国产高清不卡| 成人av电影在线| 亚洲女人的天堂| 欧美精品久久99久久在免费线 | 精品无人码麻豆乱码1区2区| 久久婷婷成人综合色| 国产不卡视频在线播放| 国产精品家庭影院| 在线看日本不卡| 奇米888四色在线精品| 久久亚区不卡日本| 一本色道久久综合亚洲精品按摩| 亚洲精品乱码久久久久久日本蜜臀| 欧美怡红院视频| 麻豆国产精品777777在线| 久久久久国产精品免费免费搜索| 成人一区二区视频| 亚洲国产一区二区三区| 欧美一二三区在线| 成人性视频网站| 午夜影院在线观看欧美| 精品少妇一区二区三区免费观看| 国产成人精品在线看| 亚洲一区二区三区精品在线| 欧美久久一区二区| 国产精品原创巨作av| 精品中文字幕一区二区| 国产日韩欧美一区二区三区乱码| 色哟哟精品一区| 狠狠狠色丁香婷婷综合久久五月| 亚洲人成电影网站色mp4| 欧美一级二级在线观看| 91在线观看成人| 精品一区二区三区不卡| 亚洲视频免费观看| 日韩一区和二区| 99久久er热在这里只有精品66| 日韩高清在线一区| 国产精品久久看| 欧美精三区欧美精三区| 成人综合在线观看| 日日摸夜夜添夜夜添国产精品 | 国产精品乱码人人做人人爱| 91精品福利视频| 国产成人在线观看| 日本中文一区二区三区| 亚洲特黄一级片| 久久久久久9999| 日韩欧美一级二级三级| 欧美亚洲精品一区| aaa国产一区| 国产suv一区二区三区88区| 性欧美疯狂xxxxbbbb| 亚洲伦理在线免费看|