📄 dvd_vmgi.h
字号:
/*****************************************************************************
******************************************************************************
** **
** Copyright (c) 2003 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 dvd_vmgi.h
*
* Structures to parse through VMG DVD information files. All structures and
* algorithms based on the DVD Part 3 Video Specification Version 1. VMG
* information is in Section 4.1
*
* $Id: dvd_vmgi.h,v 1.11 2006/10/04 21:30:24 rbehe Exp $
*/
#ifndef DVD_VMGI_H
#define DVD_VMGI_H
#ifdef __cplusplus
extern "C" {
#endif
#define Logical_Block 2048
/* Title menu */
#define TTM_EXST 0x80 /* Title Menu entry PGC exists */
/* Region Code Masks */
#define RMA8_MASK 0x80
#define RMA7_MASK 0x40
#define RMA6_MASK 0x20
#define RMA5_MASK 0x10
#define RMA4_MASK 0x08
#define RMA3_MASK 0x04
#define RMA2_MASK 0x02
#define RMA1_MASK 0x01
/* Masks for Video Attributes VMGM_V_ATR */
#define VIDEO_COMPRESSION 0xC0
#define MPEG_1_COMPLIENT 0
#define MPEG_2_COMPLIENT 0x40
#define TV_SYSTEM 0x30
#define TV_525_60 0
#define TV_625_50 0x10
#define ASPECT_RATIO_MASK 0x0C
#define RATIO_4_3 0
#define RATIO_16_9 0x0C
#define DISPLAY_MODE 0x03
#define PAN_SCAN_AND_LETTERBOX 0x00
#define PAN_SCAN_ONLY 0x01
#define LETTERBOX_ONLY 0x02
#define RESERVED_VIDEO_MODE 0x03
#define LINE_21_1 0x80
#define LINE_21_2 0x40
#define PICTURE_RESOLUTION 0x38
#define RESOLUTION_0 0x00 /* 720x480 (720x576) */
#define RESOLUTION_1 0x08 /* 704x480 (704x576) */
#define RESOLUTION_2 0x10 /* 352x480 (352x576) */
#define RESOLUTION_3 0x18 /* 352x240 (352x288) */
#define PICTURE_LETTERBOX 0x04
/* Masks for Audio Attributes VMGM_AST_ATR */
#define AUDIO_CODING 0xE0
#define AC_3_CODING 0x00
#define MPEG_1_2_CODING 0x40
#define MPEG_2_EXTENSION 0x60
#define LINEAR_PCM_AUDIO 0x80
#define DTS_AUDIO 0xC0
#define SDDS_AUDIO 0xE0
#define QUANT_DRC 0xC0
#define NO_DRC_EXISTS 0x00
#define DRC_EXISTS 0x40
#define QUANT_16BITS 0x00
#define QUANT_20BITS 0x40
#define QUANT_24BITS 0x80
#define SAMPLE_FREQ 0x30
#define FS_48KHZ 0x00
#define FS_96KHZ 0x10
#define NUM_AUDIO_CHAN 0x07
#define NUM_AUDIO_CHAN_1 0x00
#define NUM_AUDIO_CHAN_2 0x01
#define NUM_AUDIO_CHAN_3 0x02
#define NUM_AUDIO_CHAN_4 0x03
#define NUM_AUDIO_CHAN_5 0x04
#define NUM_AUDIO_CHAN_6 0x05
#define NUM_AUDIO_CHAN_7 0x06
#define NUM_AUDIO_CHAN_8 0x07
/* Masks for TT_SRP */
#define TT_TY_MASK 0x40
#define TT_PB_TY1_MASK 0x20
#define TT_PB_TY2_MASK 0x10
#define TT_PB_TY3_MASK 0x08
#define TT_PB_TY4_MASK 0x04
#define UOP1_MASK 0x02
#define UOP2_MASK 0x01
/* Maximum values */
#define MAX_NUM_LANG 8 /* Max number of Languages */
#ifdef FIXED_VMGM_PGCI
#define MAX_VMGM_PGCI_SRP 100 /* Max number of PGCI SRPs for Languages */
#endif
#define MAX_NUM_VTS 99 /* Max number of VTS */
#define MAX_NUM_PTL_LVL 8 /* Max number of Parental Levels */
#define MAX_NUM_TT 99 /* Max number of Titles */
#define MAX_NUM_CELLS 255 /* Max number of cells */
#define MAX_AUDIO_CH 8 /* Max Number of Audio Channels */
#define MAX_SP_CH 32 /* Max Number of Sub-picture Channels */
#define MAX_COLORS 16 /* Number of colors for the Sub-picture plt */
#define MAX_PRE_CMD_NS 128 /* Max number of pre commands */
#define MAX_PST_CMD_NS 128 /* Max number of post commands */
#define MAX_CEL_CMD_NS 128 /* Max number of cell commands */
#define MAX_NUM_PG 99 /* Max number of programs */
/*#define MAX_NUM_CTY 255 Max number of countries */
#define MAX_NUM_CTY 5 /* Max number of countries */
#define MAX_VMGM_VOBU_SA 50
#define MAX_VMGM_PGCI_BUF 1000
/* Volume Set Identifier Structure */
typedef struct _vlms_id_data
{
USHORT num_of_volumes; /* # of Volumes in Volume Set */
USHORT volume_number; /* Volume number in Volume Set */
UBYTE disc_side_id; /* Disc Side (A or B) */
} vlms_id_data;
/* Video Manger Information Management Table (VMGI_MAT) Structure */
typedef struct _vmgi_mat
{
CHAR vmg_id[12]; /* VMG Identifier */
ULONG vmg_ea; /* End address of the VMG */
ULONG vmgi_ea; /* End address of the VMGI */
USHORT vern; /* Version number of the DVD Video Spec */
UBYTE vmg_cat[4]; /* Video Manager Category */
vlms_id_data vlms_id; /* Volume Set Identifier */
USHORT vts_n; /* Number of Video Title Sets */
CHAR pvr_id[32]; /* Provider unique ID */
UBYTE pos_cd[8]; /* POS Code */
ULONG vmgi_mat_ea; /* End address of VMGI_MAT */
ULONG fp_pgci_sa; /* Start address of first play PGCI */
ULONG vmgm_vobs_sa; /* Start address of VMGM_VOBS */
ULONG tt_srpt_sa; /* Start address of title set search pointers */
ULONG vmgm_pgci_ut_sa; /* Start address of PGCI_UT */
ULONG ptl_mait_sa; /* Start Address of PTL_MAIT */
ULONG vts_atrt_sa; /* Start Address of VTS_ATRT */
ULONG txtdt_mg_sa; /* Start Address of TXTDT_MG */
ULONG vmgm_c_adt_sa; /* Start Address of VMGM_C_ADT */
ULONG vmgm_vobu_admap_sa; /* Start Address of VMGM_VOBU_ADMAP */
UBYTE vmgm_v_atr[2]; /* Video Attribute of VMGM */
UBYTE vmgm_ast_n[2]; /* Number of Audio streams in VMGM */
UBYTE vmgm_ast_atr[8]; /* Audio Attribute of VMGM */
UBYTE vmgm_spst_n[2]; /* Number of Sub-picture streams of VMGM */
UBYTE vmgm_spst_atr[6]; /* Sub-picture attributes of VMGM */
} vmgi_mat_struct;
/* Title Search Pointer Table (TT_SRPT) Structure */
typedef struct _tt_srpti
{
USHORT tt_srp_n; /* Number of Title Search pointers */
ULONG tt_srpt_ea; /* End adderss of Title Search pointers */
} tt_srpti_struct;
/* Title Search Pointer (TT_SRP) Structure */
typedef struct _tt_srp
{
UBYTE tt_pb_ty; /* Title Playback type */
UBYTE agl_n; /* Number of Angles */
USHORT ptt_n; /* Number of Part of Titles */
UBYTE tt_ptl_id_fld[2]; /* Parental ID for Title */
UBYTE vtsn; /* Video Title Set Number */
UBYTE vts_ttn;
ULONG vts_sa; /* Video Title Set Start Address */
} tt_srp_struct;
/* VMGM_PGCI_UTI Program Chain Unit Information Table */
typedef struct _vmgm_pgci_uti
{
USHORT vmgm_lu_n; /* Number of VMGM Language Units */
ULONG vmgm_pgci_ut_ea; /* End address of VMGM_PGCI_UT_EA */
} vmgm_pgci_uti_struct;
/* VMGM_LU_SRP VMGM Language Search Pointer */
typedef struct _vmgm_lu_srp
{
UCHAR vmgm_lcd[2]; /* VMGM Language Code */
UBYTE vmgm_exst; /* VMGM existence */
ULONG vmgm_lu_sa; /* Start Address of VMGM_LU */
} vmgm_lu_srp_struct;
/* VMGM_LUI VMGM Language Unit Information */
typedef struct _vmgm_lui
{
USHORT vmgm_pgci_srp_n; /* # of VMGM PGCI Search Pointers */
ULONG vmgm_lu_ea; /* End address of Language Unit */
} vmgm_lui_struct;
/* VMGM_PGCI_SRP VMGM Program Chain Information Search Pointers */
typedef struct _vmgm_pgci_srp
{
UBYTE vmgm_pgc_cat[4]; /* VMGM PGC Catagory */
ULONG vmgm_pgci_sa; /* Start Address of VMGM_PGCI */
} vmgm_pgci_srp_struct;
/* PTL_MAITI Parental Managment Information Table */
typedef struct _ptl_maiti
{
USHORT cty_n; /* Number of Countries */
USHORT vts_n; /* Number of Video Title Sets */
ULONG ptl_mait_ea; /* End Address of PTL_MAIT */
} ptl_maiti_struct;
/* PTL_MAI Parental Managment Information Search Pointer */
typedef struct _ptl_mai_srp
{
UBYTE cty_cd[2]; /* Country Code */
USHORT ptl_mai_sa; /* Start address of PTL_MAI */
} ptl_mai_srp_struct;
/* VTS_ATRTI Video Title Set Attribute Table Information */
typedef struct _vts_atrti
{
USHORT vts_n; /* Number of VTS (Video Title Sets) */
ULONG vts_atrt_ea; /* End address of the VTS_ATRT */
} vts_atrti_struct;
/* VMGM_C_ADTI Video Manager Menu Cell Address Table Information */
typedef struct _vmgm_c_adti
{
USHORT vmgm_vob_n; /* Number of VOBs in the VMGM_VOBS */
ULONG vmgm_c_adt_ea; /* End address of the VMGM_C_ADT */
} vmgm_c_adti_struct;
/* VMGM_CPI Video Manager Menu Cell Piece Information */
typedef struct _vmgm_cpi
{
USHORT vmgm_vob_idn; /* VOB IF number for the VMGM_CP */
UBYTE vmgm_c_idn; /* End address of the VMGM_C_ADT */
ULONG vmgm_cp_sa; /* Start Address of VMGM_CP */
ULONG vmgm_cp_ea; /* End address of VMGM_CP */
} vmgm_cpi_struct;
typedef struct _cur_bufd /* currently buffered */
{
ULONG ulSSec; /* "start sector" */
ULONG ulCOff; /* "current offset sector" */
ULONG ulESec; /* "end sector" - number of sectors to read */
} cur_bufd_struct;
/* Variables */
/* Struct containing the Video Manager Information */
/* Management table */
extern vmgi_mat_struct vmgi_mat;
/* Struct containing the Title Search Pointer */
/* Table Info */
extern tt_srpti_struct tt_srpti;
extern tt_srp_struct tt_srp[MAX_NUM_TT]; /* Array of TT_SRP */
extern vmgm_pgci_uti_struct vmgm_pgci_uti;
extern vmgm_lu_srp_struct vmgm_lu_srp[MAX_NUM_LANG];
extern vmgm_lui_struct vmgm_lui[MAX_NUM_LANG];
#ifdef FIXED_VMGM_PGCI
extern vmgm_pgci_srp_struct vmgm_pgci_srp[MAX_NUM_LANG][MAX_VMGM_PGCI_SRP];
#else
extern vmgm_pgci_srp_struct *vmgm_pgci_srp[MAX_NUM_LANG];
#endif
/* First array LU#, second PGCI# */
extern ptl_maiti_struct ptl_maiti;
extern ptl_mai_srp_struct ptl_mai_srp[MAX_NUM_CTY];
extern USHORT ptl_lvli[MAX_NUM_LANG][MAX_NUM_PTL_LVL][MAX_NUM_VTS];
/* First array is language then parental level, then VTS */
extern vts_atrti_struct vts_atrti;
extern ULONG vts_atr_srp[MAX_NUM_VTS];
extern vmgm_c_adti_struct vmgm_c_adti;
extern vmgm_cpi_struct vmgm_cpi[MAX_NUM_CELLS];
extern ULONG vmgm_vobu_admap_ea;
extern ULONG vmgm_vobu_sa[50];
/* function prototypes */
extern void Parse_VMGI_MAT(void);
extern void parse_pgci_gi(ULONG pgci_sa);
extern void parse_pgc_cmdti(USHORT pgc_cmdt_sa, ULONG pgci_sa);
extern void Parse_TT_SRPT(ULONG tt_srpt_sa, ULONG vmgi_sa);
extern void Parse_VMGM_PGCI_UT(ULONG vmgm_pgci_ut_sa);
extern void Parse_PTL_MAIT(ULONG ptl_mait_sa);
extern void Parse_VTS_ATRT(ULONG vts_atrt_sa);
extern void Parse_VMGM_C_ADT(ULONG vmgm_c_adt_sa);
extern void Parse_VMGM_VOBU_ADMAP(ULONG vmgm_vobu_admap_sa);
extern UBYTE GetTable(cur_bufd_struct *cBfd, UBYTE ubEA_index);
/* Error checking and OSD print out prototype */
extern void error_check(ULONG, ULONG, char *);
/* function prototype */
extern UBYTE get_vmgi_ifo(ULONG, ULONG);
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -