⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vcd.h

📁 这是DVD中伺服部分的核心代码
💻 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 + -