📄 vcd.h
字号:
/*****************************************************************************
******************************************************************************
** **
** Copyright (c) 2002 Videon Central, Inc. **
** All rights reserved. **
** **
** The computer program contained herein contains proprietary information **
** which is the property of Videon Central, Inc. The program may be used **
** and/or copied only with the written permission of Videon Central, Inc. **
** or in accordance with the terms and conditions stipulated in the **
** agreement/contract under which the programs have been supplied. **
** **
******************************************************************************
*****************************************************************************/
/**
* @file
* vcd.h
*
* Code to support navigator to DVD port.
*
* $Id: vcd.h,v 1.22 2006/09/08 21:29:05 rbehe Exp $
*/
#ifndef __VCD_H__
#define __VCD_H__
namespace vcd {
typedef enum
{
STOPPED = 1,
UNLOADED = 2,
NORMAL_PLAYING = 3,
SLOW_FORWARD = 4,
FAST_FORWARD = 5,
PAUSED = 6,
FAST_REVERSE = 7,
SLOW_REVERSE = 8,
POWER_ON_FP = 9,
DRIVE_EMPTY = 10,
FULL_STOPPED = 11,
CELL_STILL = 12
} NAV_STATE;
typedef enum
{
VCD_VER_VCD = 0x1,
VCD_VER_HQVCD = 0x2,
VCD_VER_SVCD = 0x3,
VCD_VER_UNKNOWN = 0X4
} VCD_VER;
typedef struct _rsm_info
{
UBYTE pbc_mode;
UBYTE g_pbc_on;
UBYTE g_track;
USHORT g_scene;
UBYTE pbc_play_time[4];
} rsm_info_struct;
typedef struct tagNAV_VCD_LOCATION
{
ULONG ulSize;
rsm_info_struct rsm;
} NAV_VCD_LOCATION;
/*
* Navigation queue messages KEY_ : messages from button/remote input task
* L20 : messages from L64020 Comment notes: From OSD - means message
* arrives from OSD task OSD_... - message sent to OSD_TASK from NAV_TASK
*/
typedef enum tagNAV_COMMAND
{
KEY_PLAY = 0, /* Start normal playback */
KEY_FWD_PLAY,
KEY_STOP, /* Stop, blue screen, goto title beginning */
KEY_PAUSE_ON, /* Pause on */
KEY_PAUSE_OFF, /* Pause off */
KEY_STEP, /* Single step frame */
KEY_TITLE_PLAY, /* Play the title by "title number" Parameters: 1 - ULONG TitleNum From OSD */
KEY_TIME_SEARCH, /* Jump to time in same title, From OSD Task Parameters: 1 - ULONG time */
KEY_SHUFFLE_PLAY, /* shuffle titles in program, OSD_SHUFFLE */
KEY_REPEAT, /* Request to repeat one title, OSD_REPEAT */
KEY_A_B, /* Places a marker for repeat, OSD_A_B First press is marker A, Second press is marker B, Third press clears mode */
KEY_AUDIO_SELECT, /* Flips language choices, OSD_AUDIO_SELECT */
KEY_NEXT_PG, /* next PTT, OSD_NEXT_PTT */
KEY_PREV_PG, /* prev PTT, OSD_PREV_PTT */
KEY_RETURN, /* RETURN KEY */
KEY_PBC, /* PBC */
KEY_NUMBER, /* Numeric input, OSD_0 */
KEY_PLAY_LOCATION
} NAV_COMMAND;
#define VCD_MSG_SIZE 16
/* Defines for TOC Control Field bits */
#define TOC_CONTROL_FIELD_AUDIO 0x00
#define TOC_CONTROL_FIELD_PREEMPHASIS 0x01
#define TOC_CONTROL_FIELD_DATA_TRACK 0x04
#define TOC_CONTROL_FIELD_INCREMENTAL 0x01
/* TOC (512byte) */
typedef struct
{
UBYTE cont; /* Control/Addr. Bit */
UBYTE tno; /* TNO */
UBYTE tim[3];
} TOC;
typedef struct
{
TOC first; /* First TNO */
TOC last; /* Last TNO */
TOC out; /* Read Out Time */
TOC tno[99]; /* TNO Start Time */
UBYTE dummy[2];
} TOC_INFO;
#define TOC_FST 0x0A0 /* First TNO */
#define TOC_LST 0x0A1 /* Last TNO */
#define TOC_OUT 0x0A2 /* Read Out Time */
/* INFO.VCD(00:04:00) (2048byte) */
typedef struct
{
BYTE str[8];
USHORT ver;
UBYTE disc_id[16];
UBYTE album_vol[2];
UBYTE album_seq[2];
UBYTE map_size[13];
UBYTE status;
ULONG psd_size;
UBYTE fseg_addr[3];
UBYTE offset;
USHORT max_list_id;
USHORT max_seg_num;
UBYTE seg_play_item[1980];
UBYTE ext_status;
UBYTE disc_type;
UBYTE dummy[10];
} INFO_VCD;
#define PITEM_NMPEGA 0x00
#define PITEM_MONOA 0x01
#define PITEM_STEREO 0x02
#define PITEM_DUAL 0x03
#define PITEM_NMPEGV 0x00
#define PITEM_NTNSTL 0x04
#define PITEM_NTHSTL 0x08
#define PITEM_NTNMOV 0x0C
#define PITEM_PLNSTL 0x14
#define PITEM_PLHSTL 0x18
#define PITEM_PLNMOV 0x1C
/* ENTRIES.VCD(00:04:01) (2048byte) */
typedef struct
{
UBYTE tno;
UBYTE sector[3];
} ENTRY;
typedef struct
{
UBYTE str[8];
UBYTE ver[2];
USHORT entries_used;
ENTRY entry[500];
UBYTE dummy[36];
} ENTRY_VCD;
typedef struct
{
UBYTE msf[3];
UBYTE ogt;
UBYTE audio;
} SVCD_TRACK_INFO;
/* svcd: This contains the track info for svcd */
typedef struct
{
UBYTE str[8];
USHORT ver;
UBYTE num_tracks;
SVCD_TRACK_INFO tracks[407];
UBYTE dummy[2];
} TRACKS_SVD;
#define PLAY_LIST_HD 0x10
#define SELECT_LIST_HD 0x18
#define END_LIST_HD 0x1F
typedef struct
{
UBYTE head;
UBYTE item_no;
USHORT list_id;
USHORT pre_list_off;
USHORT next_list_off;
USHORT ret_list_off;
USHORT play_time;
UBYTE play_wait_time;
UBYTE pause_wait_time;
USHORT pin[128];
} PLAY_LIST;
typedef struct
{
UBYTE head;
UBYTE dummy;
UBYTE nos;
UBYTE bsn;
USHORT list_id;
USHORT pre_list_off;
USHORT next_list_off;
USHORT ret_list_off;
USHORT def_list_off;
USHORT tout_list_off;
UBYTE wait_time;
UBYTE loop_jump;
USHORT pin;
USHORT bsn_off[99];
} SELECT_LIST;
typedef struct
{
UBYTE head;
UBYTE dummy[7];
} END_LIST;
#define PLY_TIM_EOF 0x00
#define PIN_MIN_TRACK 2
#define PIN_MAX_TRACK 99
#define PIN_MAX_ENTRI 599
#define PIN_MAX_DUMMY 999
#define PIN_MAX_SEGME 2979
/* PBC Message Constants */
#define MSG_TIM_OUT 0x00
#define MSG_KEY 0x01
#define MSG_CONTROL 0x02
#define MSG_FE_END 0x04
#define MSG_FE_LBA 0x05
#define MSG_START_VCD 0x06
#define MSG_DISC_QUEUE_FULL 0x07
#define MSG_PLAY_END 0x08
#define MSG_PBC_TASK_EXIT 0x0F
/* (g_random_mode) */
#define PMODE_NORMAL 0 /* NORMAL */
#define PMODE_RANDOM 2 /* RANDOM */
/* (g_play_kind) */
#define PKIND_STOP 0 /* STOP */
#define PKIND_PLAY 1 /* PLAY */
#define PKIND_PAUSE 2 /* PAUSE */
#define PKIND_SLOW 3 /* SLOW */
#define PKIND_FF 4 /* FF */
/* FEA_PLAY_CD */
#define FEA_PLAY_CD_ABO 0x00 /* ABORT & PLAY */
#define FEA_PLAY_CD_QUE 0x01 /* QUEUEING PLAY */
/* timer controls */
#define TIM_CONT_STOP 0x00 /* Timer Stop */
#define TIM_CONT_START 0x01 /* Timer Start */
/* (g_pbc_on) */
#define PBC_ON 0x01 /* PBC ON */
#define PBC_OFF 0x00 /* PBC OFF */
#define PLAY_SET_CDDA 0x01 /* CD-DA */
#define PLAY_SET_PLAY 0x02 /* PLAY */
/* RANDOM PLAy */
#define PROGRAM_MAX 32 /* RANDOM ENTRY MAX */
#define ADD_MSF 0
#define SUBTRACT_MSF 1
#define GO_NEXT_PREV 1
#define STOP_NEXT_PREV 0
#define VCD_ON 1
#define VCD_OFF 0
#define PBC_MODE_LOAD 0x00
#define PBC_MODE_STOP 0x01
#define PBC_MODE_PLAY 0x04
#define PBC_MODE_END 0x05
#define PBC_MODE_HALT 0x07
#define PBC_SCENE_ON 0x01 /* SCENE ON */
#define PBC_SCENE_OFF 0x00 /* SCENE OFF */
#define PBC_MENU_ON 0x01 /* MENU ON */
#define PBC_MENU_OFF 0x00 /* MENU OFF */
#define CUR_TRACK 0
#define PREV_TRACK 1
#define LOT_BUF_SIZE 0x10000 /* 32 sectors */
#define PSD_BUF_SIZE 0x80000
extern LOADER_HANDLE tLoader;
extern DR_HANDLE tDR;
extern PE_HANDLE tPE;
extern OS_MSG_Q_ID queue_vcd;
/* VCD Stuff */
extern TOC_INFO g_toc_info;
extern INFO_VCD g_info_vcd;
extern ENTRY_VCD g_entry_vcd;
extern TRACKS_SVD g_tracks_svd;
extern UBYTE pbc_mode;
extern UBYTE g_pbc_on;
extern UBYTE g_random_mode;
extern UBYTE g_play_kind;
extern UBYTE g_track;
extern USHORT g_scene;
extern UBYTE g_time[2];
extern UBYTE pbc_play_time[4];
extern ULONG pbc_apause_tim;
extern ULONG g_max_time;
extern UBYTE s_msf[3], e_msf[3];
extern UBYTE cdda_track;
extern UBYTE logo_on;
extern UBYTE g_track_prev;
extern UBYTE cd_max_tno;
extern UBYTE cd_max_tno_cdda;
extern USHORT g_pg_entry[PROGRAM_MAX];
extern UBYTE g_pg_entry_max;
extern UBYTE g_pg_play_point;
extern UBYTE vcd_override_off;
extern UBYTE next_prev_key;
extern USHORT *g_lot_addr;
extern UBYTE *g_psd_addr;
extern UBYTE pbc_end_flag;
extern UBYTE audio_channel_mode;
extern ULONG ulPlaySpeed;
extern UBYTE g_repeat_mode;
extern UBYTE A_B_count;
extern UBYTE VERSION_FLG;
ULONG pbc_main(void *);
void pbc_init(void);
void pbc_play_end(void);
UBYTE pbc_scene_play(void);
USHORT pbc_next_check(void);
USHORT pbc_prev_check(void);
USHORT pbc_ret_check(void);
UBYTE pbc_list_play(ULONG);
USHORT pbc_play_list(void);
USHORT pbc_selection_list(void);
USHORT pbc_play_item(USHORT, USHORT);
USHORT pbc_track_play(USHORT, USHORT);
USHORT pbc_entry_play(USHORT, USHORT);
void pbc_seg_play(USHORT);
void pbc_timeout_proc();
void pbc_fe_msf_rcv(ULONG *);
void pbc_waite_time_req(UBYTE, ULONG);
void pbc_stop_com(void);
ULONG msf_sector_length(UBYTE *, UBYTE *);
UBYTE com_bcdtobin(UBYTE);
UBYTE load_cd_toc(void);
UBYTE load_vcd_info(const char*, const char*);
UBYTE load_vcd_entry(const char*, const char*);
UBYTE load_vcd_lot(const char*, const char*);
UBYTE load_vcd_psd(const char*, const char*);
ULONG com_tno_time_bcdtobin(UBYTE *);
void com_tno_time_bintobcd(ULONG, UBYTE *);
USHORT com_tno_time_get(UBYTE, UBYTE *, UBYTE *);
void pbc_apause(void);
ULONG combine_msf(UBYTE *);
UBYTE com_bintobcd(UBYTE);
ULONG msf_modify(ULONG, ULONG, UBYTE);
UBYTE cd_start_tno_get(NAV_COMMAND);
UBYTE cd_next_tno_get(void);
UBYTE cd_prev_tno_get(UBYTE);
void cd_restore_prog_tno( UBYTE ubDir );
UBYTE com_random_get(UBYTE);
void com_shuffle_get(UBYTE, USHORT *);
UBYTE com_bcd_chk(UBYTE);
void stop_on_error(void);
void update_timedisp_vcd(void);
CHAR get_vcd_info(void);
void pbc_key_proc_halt(NAV_COMMAND, ULONG, ULONG);
UBYTE check_g_track_end(void);
UBYTE timesearch_valid(BOOLEAN, UBYTE *);
UBYTE load_tracks_svd(void);
void reset_play_point(void);
UBYTE check_cdrom_cdda(void);
void set_track_params(UBYTE);
UBYTE check_karifo(void);
void set_map_value(UBYTE,UBYTE);
ULONG get_vcd_max_time(void);
UBYTE get_track_time(UBYTE, ULONG *, ULONG *);
void logo_display(void);
void logo_hide(void);
UBYTE vcd_current_track(void);
ULONG get_disk_playing_time(void);
ULONG get_title_time(void);
UBYTE get_max_number_track(void);
UBYTE get_track_num(void);
void pbcParseSelectList( SELECT_LIST *pslist, UBYTE *pbpsd );
void pbcParsePlayList( PLAY_LIST *pplaylist, UBYTE *pbpsd );
} /* end namespace */
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -