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

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

?? av_play.c

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

/*
 * $Log$
 */

#include <stdlib.h>
#include <ctype.h>
#include "av_play.h"
#include "const.h"
#include "buffer.h"
#include "constvar.h"
#include "dsa.h"
#include "display.h"
#include "mpeg1vid.h"
#include "tdm.h"
#include "timedef.h"
#include "vcxi.h"
#include "util.h"
#include "xport.h"
#ifdef CUST3
#include "vcd.h"
#include "custdsa.h"
#endif
#include "sysinfo.h"
#include "debug.h"
#ifdef ECHO
#include "echo.h"
#endif
#ifdef CUST71
#include "play.h"
#include "fsosd.h"
#endif

#include "play.h"


#define PRINTF(x)

/*------------------------------------------------------------------------
  External Variables
------------------------------------------------------------------------*/
extern int play_sector_state;

/*------------------------------------------------------------------------
  Function Prototypes
------------------------------------------------------------------------*/
static int play_speed_start();

/*------------------------------------------------------------------------
  Definitions
------------------------------------------------------------------------*/
#define VIDEO_INIT_STATE		0
#define	VIDEO_SLOW_MOTION		1
#define VIDEO_FF			2
#define VIDEO_FR			3
#define VIDEO_PAUSE			4
#define AUDIO_FF			5
#define AUDIO_FR			6
#define AUDIO_NORMAL			7
#define AUDIO_PAUSE			8
#define VIDEO_NORMAL			9
#define VIDEO_STILL			10
#define VIDEO_DO_STILL			11
#define VIDEO_STEP			12
#define VIDEO_WAIT_TIMEOUT		13
/* add for ZOOM, no B frame can be zoomed, so, pause must be 
   actived at I or P frame */

#define VIDEO_DATA_TYPE			0
#define AUDIO_DATA_TYPE			1

#define TurnOffTDM system_reset

/*------------------------------------------------------------------------
  Local functions
------------------------------------------------------------------------*/
static int start_play_still();

/*------------------------------------------------------------------------
  Global Variables
------------------------------------------------------------------------*/
int	   vcx_fast_speed_done;

static int previous_sector;	/* stored the cd sector that will be used
				   to start later.			*/
#ifdef CUST71
static int ff_time_limit=0;
#endif
static int skip_mmssff;     /* The skip time for FF/FR      */
static int fast_speed_time_limit; /* the end time of FF/FR mode.	*/
static int timeout_begin_time;
static int play_start_time;
static int play_end_time;
static int still_type;		/* e1 or e2 */
static char data_type=0;		/* VIDEO or AUDIO */
int video_state;	        /* state of av play state machine.	*/
int cd_pause;		 /* 1 -> in pause mode.			*/
static char slow_resume=0;
static unsigned int	cdda_track_start_time;

/*------------------------------------------------------------------------
  Function:
  Description: In some cases, ther servo will stop and we do not notice.
               We have to avoid program hangs in the while loop.
------------------------------------------------------------------------*/
void turn_off_data()
{
    int time_out;

    TDM_off = 1;
    
    time_out = glbTimer + TWO_SECOND;

    while (XPORT_active) {
	if (glbTimer >= time_out) {
	    /* force XPORT_active to 0 to get out the loop. */
	    TDM_stop(1);	/* save stopCDtime */
	}
#ifdef ECHO
	MIC_service();
#endif
    }

    TDM_off = 0;	/* In case XPORT is not active */
}

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

  Parameters:
      start_mmssff : 
          the start time in BCD's minute, second and frame format.
      end_mmssff:
          the end time in BCD's minute, second and frame format.

  Description:
      This function will play a section of audio CD from start_mmssff
      to end_mmssff. When this section is finish, the end_of_play
      variable will be set to 1.
------------------------------------------------------------------------*/
int av_play_cdda_audio(int track_mmssff, int start_mmssff, int end_mmssff)
{
    reset_video_normal_mode(0);
    system_reset();
    system_start();

/*
  if (cd_pause) {
      dsa_pauserelease();
      cd_pause = 0;
    }
*/		
    cdda_track_start_time = track_mmssff;
    endCDtime = end_mmssff;

   if((play_state == PLAY_FR_STATE) || (play_state == PLAY_FF_STATE))
       vcx_playvideo_only = 1;
   else
       vcx_playvideo_only = 0;


    playCDDA(track_mmssff, start_mmssff, end_mmssff);

/* Victor: just add a end_of_play reset here to be safe and in sync with other
   operation like play_motion and etc. This should be redundente because play.c
   will reset end_of_play when each playitem is played. And I already reset it 
   in dsa.c when end_of_play is set by TDM.c when we read PSD sectors. But I 
   still got a false end_of_play set by somebody once ?! */
    end_of_play = 0;

#if (CUST3 || CUST4)
    play_start_time = start_mmssff;
#else
    {
	extern int goto_time;
	if (!goto_time)
	play_start_time = start_mmssff;
	goto_time = 0;
    }
#endif

    data_type = AUDIO_DATA_TYPE;

    video_state = AUDIO_NORMAL;
}

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

  Parameters:
      start_mmssff : 
          the start time in BCD's minute, second and frame format.
      end_mmssff:
          the end time in BCD's minute, second and frame format.

  Description:
      This function will play a section of motion video from start_mmssff
      to end_mmssff. When this section is finish, the end_of_play
      variable will be set to 1.
------------------------------------------------------------------------*/
int av_play_motion_video(int start_mmssff, int end_mmssff)
{
    /* set relative variables */
    endCDtime = end_mmssff;
    end_of_play = 0;
    
    /* clear buffers and reset some variables */
    reset_video_normal_mode(1);
    clear_dec();

    data_type = VIDEO_DATA_TYPE;
    video_state = VIDEO_NORMAL;

    return (playSectors(start_mmssff, 0xe0, 2324));
}

#if (CUST3 && !CUST71)
/*------------------------------------------------------------------------
  Function: av_play_motion_track

  Parameters:
	track : which track we want to play

  Description:
      This function will play a track
------------------------------------------------------------------------*/
int av_play_motion_track(int track)
{
    endCDtime = adjCDtime(CDinfo.leadout, AHEAD_TIME, -1);
    end_of_play = 0;

    /* clear buffers and reset some variables */
    reset_video_normal_mode(1);
    clear_dec();

    data_type = VIDEO_DATA_TYPE;
    video_state = VIDEO_NORMAL;
    playMotionVideoTrack(track);

    return (1);
}
#endif

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

  Parameters:
      start_mmssff : 
          the start time in BCD's minute, second and frame format.
      end_mmssff:
          the end time in BCD's minute, second and frame format.
      type : value should be "0xe1" or "0xe2".
  Description:
      This function will play a section of still video from start_mmssff
      to end_mmssff. When this section is finish, the end_of_play
      variable will be set to 1.
------------------------------------------------------------------------*/
int av_play_still(int start_mmssff, int end_mmssff, int type)
{
    /* store variables used later */
    play_start_time = start_mmssff;
    play_end_time = end_mmssff;
    still_type = type;
    end_of_play = 0;

    /* clear buffers */
    reset_video_normal_mode(1);

    /* clear buffers */
    clear_dec();

    TDM_item_edc = 0;	/* Clear EDC count so we'll detect any error */
    start_play_still();
    return (1);
}

static int start_play_still()
{
    endCDtime = play_end_time & x00ffff00;
    end_of_play = 0;

    data_type = VIDEO_DATA_TYPE;
    video_state = VIDEO_NORMAL;

    /* reset decoder to reset mode */
    return (playSectors(play_start_time & x00ffff00, still_type, 2324));
}

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

  Description:
      This function will pause the playing section.
------------------------------------------------------------------------*/
int set_pause;
int av_play_pause()
{

    if (video_state == VIDEO_SLOW_MOTION) {
	av_play_resume();
	set_pause = 1;
	return;
    } else if ((video_state == VIDEO_FF) || (video_state == VIDEO_FR)) {
	av_play_resume();
	set_pause = 1;
    	vcx_playvideo_only = 1; /* Mute the audio until pause */
	timeout_begin_time = glbTimer;
	video_state = VIDEO_WAIT_TIMEOUT;
	return;
    }

    if (data_type == AUDIO_DATA_TYPE) {
	video_state = AUDIO_PAUSE;
	TDM_stop(1);	/* Simply turn off XPORT to stop more data coming */
	/* Kill TDM so when we restart, left/right will not swap	*/
	mvd[tdmctl0] = 0x400;
	mvd[tdmrcvslots0] = 0;
    } else {

#ifndef DVD_VCD
	/* stop the TDM */	    
	if (XPORT_active) {
	    /* Stop TDM/DMA and save the last location */
	    turn_off_data();
	}
	previous_sector = stopCDtime;
#endif
	video_state = VIDEO_PAUSE;
	vcx_pause = 1;
	oh_my(0xe);
    }

    /*
     * For audio CD, we need to pause it first before calling
     * system_audio_partial_reset. Therefore, calling dsa_pause is
     * essential for CDDA. It doesn't hurt to call dsa_pause for
     * video CD (and may even be essential for some targets.
     */
    dsa_pause();
    system_audio_partial_reset(0);

    cd_pause = 1;

    return (1);
}

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

  Description:
      This function will take the player from trick mode to normal
      mode.

      trick mode includes FF/FR, slow motion, step and pause.
------------------------------------------------------------------------*/
int av_play_resume()
{
#ifdef CUST71
    SET_MUTEOFF;
#endif
    if (video_state == VIDEO_SLOW_MOTION) {
	system_audio_partial_reset(0);	/* Fix audio break. */
	slow_resume = 1;
	set_pause = 0;
	return 1;
    } else if (video_state == VIDEO_PAUSE || video_state == VIDEO_STEP)
	reset_video_normal_mode(0);
    else
	reset_video_normal_mode(1);

    switch (video_state) {
    case VIDEO_FF:
    case VIDEO_FR:
	clear_dec();
	playSectors(previous_sector, vcx_user_video_stream, 2324);
	break;
    case AUDIO_FF:
    case AUDIO_FR:
	playCDDA(cdda_track_start_time, previous_sector, endCDtime);
	break;
    case VIDEO_PAUSE:
    	oh_my(0xd);
	playSectors(stopCDtime, picture_type, 2324);
	break;
    case AUDIO_PAUSE:
	/* 
	 * Don't use 
	 * playCDDA(cdda_track_start_time, previous_sector, endCDtime);
	 * Due to DSA in-precision, we may stuck at the same place
	 * continuously if we just pause/release.
	 */
	XPORT_restart_at(XPORT_OFFSET_PLAY_CDDA, 1);
	TDM_turn_on();
	break;
    case VIDEO_STEP:
#ifdef CUST71
	system_audio_partial_reset(1);	/* Fix audio break. */
#endif
	playSectors(previous_sector, 0xe0, 2324);
	break;
    default:
	set_pause = 0;
    }

    video_state = VIDEO_INIT_STATE;

    return (1);
}

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

  Parameters:
      field_length : The number of field time that a picture should be
                     display. For a normal speed NTSC picture, the
		     field_length is 2. If we want to make the slow
		     motion to 1/2 speed of normal speed, we need to
		     set field_length value to 4.

  Description:
      Plays slow motion.
------------------------------------------------------------------------*/
int av_play_slow_motion(int field_length)
{
    slow_resume = 0;
    reset_video_normal_mode(0);

    vcx_pause = 0;
    vcx_slow_motion = field_length;
    vcx_playvideo_only = 1;

    if (video_state == VIDEO_PAUSE) {
	playSectors(previous_sector, 0xe0, 2324);
    }

    video_state = VIDEO_SLOW_MOTION;
}

/*------------------------------------------------------------------------
  Function:av_play_step
  Description:
      When this function is called, the player will display a new 
      decoded picture.
------------------------------------------------------------------------*/
int av_play_step()
{
    if (video_state != VIDEO_STEP) {
	vcx_pause = 0;
	vcx_slow_motion = vcx_fast_forward = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆蜜桃一区二区三区| 精品国产乱码久久久久久图片| 亚洲精品视频自拍| 日韩精品一区在线| 日韩不卡一二三区| 欧美mv日韩mv亚洲| 欧美精品xxxxbbbb| 色婷婷综合久久久| 一本一本大道香蕉久在线精品| 久久国产尿小便嘘嘘| 国产精品乱码一区二区三区软件| 欧美精品乱码久久久久久| 91精品办公室少妇高潮对白| caoporen国产精品视频| 成人美女视频在线观看| 成人午夜av影视| 欧美性猛片xxxx免费看久爱| 中文字幕一区二区三区精华液| 91精品国产综合久久精品| 色婷婷av一区二区三区之一色屋| 高清不卡在线观看| 国产精品99久久久久久有的能看 | 日韩欧美激情四射| 91超碰这里只有精品国产| 色爱区综合激月婷婷| 欧美日韩精品是欧美日韩精品| 91在线小视频| 色94色欧美sute亚洲13| 欧美乱妇23p| 日韩欧美综合一区| 精品国产精品网麻豆系列| 国产欧美一区二区三区在线老狼| 久久久亚洲欧洲日产国码αv| 久久精品男人的天堂| 一区二区中文视频| 日韩电影免费一区| 国产一区二区在线看| 99re免费视频精品全部| 精品久久久久一区| 香蕉久久夜色精品国产使用方法 | 精品日韩av一区二区| 国产欧美综合在线观看第十页| 亚洲少妇30p| 蜜臀精品一区二区三区在线观看| 国产一区二区女| 色婷婷av一区二区三区gif | 香蕉久久一区二区不卡无毒影院| 看电视剧不卡顿的网站| 99久久精品免费观看| 欧美精品高清视频| 日韩美女精品在线| 国内精品国产成人国产三级粉色 | 秋霞午夜鲁丝一区二区老狼| 欧美日韩一区二区三区高清 | 日韩精品在线一区| 国产精品麻豆视频| 国产乱妇无码大片在线观看| 欧美在线一区二区三区| 中文字幕在线观看不卡视频| 日韩黄色在线观看| 91豆麻精品91久久久久久| 中文字幕精品—区二区四季| 午夜精品国产更新| 欧美日韩不卡一区| 亚洲色图欧美激情| 国产精品系列在线观看| 日韩视频永久免费| 久久福利视频一区二区| 91精品欧美福利在线观看 | 一区二区三区国产精华| 99久久久无码国产精品| 国产欧美视频在线观看| 久久国产精品一区二区| 久久久亚洲欧洲日产国码αv| 日韩极品在线观看| 日韩一区二区免费在线电影| 五月开心婷婷久久| 欧美一区二区在线观看| 九九精品视频在线看| 久久久久国产精品麻豆| 国产精品综合二区| 亚洲男人的天堂av| 欧美亚洲国产一区在线观看网站| caoporm超碰国产精品| 欧美精品亚洲二区| 综合精品久久久| 欧美午夜精品久久久| 视频一区二区不卡| 精品国产乱码久久久久久浪潮 | 精品国产3级a| 国产不卡在线播放| 国产亚洲一区二区三区| av色综合久久天堂av综合| 国产精品麻豆久久久| 美脚の诱脚舐め脚责91| 国产欧美一区二区在线观看| 国产在线精品一区二区不卡了| 国产拍欧美日韩视频二区 | 不卡免费追剧大全电视剧网站| 亚洲人成网站精品片在线观看| 欧美福利一区二区| 亚洲成人黄色小说| 欧美激情综合在线| 欧美精品一级二级三级| 成人深夜在线观看| 亚洲国产视频在线| 国产喷白浆一区二区三区| 欧美男男青年gay1069videost| 国产在线播放一区三区四| 国产精品乱码久久久久久| 日韩免费福利电影在线观看| 在线观看日韩国产| 91影视在线播放| 国产成人av资源| 国产精品中文字幕欧美| 日本aⅴ免费视频一区二区三区| 国产亚洲自拍一区| 欧美国产视频在线| 久久精品人人做人人综合| 欧美精品视频www在线观看| 国产一区二三区| 日本中文在线一区| 久久影院电视剧免费观看| 在线观看一区二区视频| 午夜私人影院久久久久| 一区二区三区高清| 久久婷婷久久一区二区三区| 亚洲美女在线一区| 99精品视频一区二区三区| 国产精品免费看片| av电影天堂一区二区在线| 中文字幕一区三区| 亚洲一区中文日韩| 国产成人精品免费| 欧美一区二区视频在线观看| 69精品人人人人| 成人av网址在线观看| 韩国欧美国产1区| 玉足女爽爽91| 欧美大片一区二区| 欧美专区亚洲专区| 欧美一a一片一级一片| 久久先锋影音av鲁色资源| 久久久国产综合精品女国产盗摄| 欧美体内she精视频| av不卡在线观看| 欧美色窝79yyyycom| 精品精品欲导航| 久久久精品人体av艺术| 国产精品美女久久久久久久| 一片黄亚洲嫩模| 亚洲自拍偷拍图区| 久久成人免费网| 成人免费毛片片v| 欧洲av一区二区嗯嗯嗯啊| 91精品国产高清一区二区三区| 日本一区二区三区国色天香 | 一本久久精品一区二区| 欧美mv日韩mv国产网站app| 一区二区三区中文字幕| 国产原创一区二区三区| 欧美一级片在线| 成人欧美一区二区三区1314| 韩国精品久久久| 日韩一级黄色大片| 中文字幕不卡在线播放| 懂色中文一区二区在线播放| 中文字幕一区在线观看视频| 欧美性猛交xxxxxx富婆| 蜜臀久久久99精品久久久久久| 3d动漫精品啪啪一区二区竹菊| 精品久久国产97色综合| 亚洲一区视频在线观看视频| www.色精品| 一区二区三区中文字幕精品精品| 成人爽a毛片一区二区免费| 欧美国产精品一区| 国产99久久精品| 国产欧美一区二区三区鸳鸯浴| 高清shemale亚洲人妖| 国产精品色婷婷| 91成人免费在线| 日韩电影在线一区二区| 91精品国产色综合久久不卡电影| 午夜视黄欧洲亚洲| 日韩一区二区电影在线| 懂色av一区二区三区蜜臀| 中文字幕第一区| 在线观看一区不卡| 人妖欧美一区二区| 国产视频一区在线播放| 99视频有精品| 美女爽到高潮91| 国产日韩精品一区二区三区| 色综合天天狠狠| 久久66热偷产精品| 国产欧美一区二区精品仙草咪| 99精品视频在线观看免费| 蜜臀国产一区二区三区在线播放 | 久久国产综合精品|