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

📄 dvd_vmgi.h

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