📄 ifo.h
字号:
#ifndef __IFO_H__#define __IFO_H__#ifndef DVD_VIDEO_LB_LEN#define DVD_VIDEO_LB_LEN 2048#endif#define OFFSET_IFO 0x0000#define OFFSET_VTS 0x0000#define OFFSET_LEN 0x00C0#define IFO_OFFSET_TAT 0x00C0#define OFFSET_VTSI_MAT 0x0080#define IFO_OFFSET_VIDEO 0x0100#define IFO_OFFSET_AUDIO 0x0200#define IFO_OFFSET_SUBPIC 0x0250// for debug and error output/** * Video Info Table */typedef struct {#if BYTE_ORDER == BIG_ENDIAN u_char compression : 2; u_char system : 2; u_char ratio : 2; u_char perm_displ : 2; u_char line21_1 : 1; u_char line21_2 : 1; u_char source_res : 2; u_char letterboxed : 1; u_char mode : 1;#else u_char perm_displ : 2; u_char ratio : 2; u_char system : 2; u_char compression : 2; u_char mode : 1; u_char letterboxed : 1; u_char source_res : 2; u_char line21_2 : 1; u_char line21_1 : 1;#endif} ifo_video_info_t;/** * Audio Table */typedef struct {#if MPEG3_LITTLE_ENDIAN u_char num_channels : 3; // number of channels (n+1) u_char sample_freq : 2; // sampling frequency u_char quantization : 2; // quantization u_char appl_mode2 : 1; // audio application mode u_char appl_mode1 : 1; // u_char type : 2; // audio type (language included?) u_char multichannel_extension: 1; u_char coding_mode : 2;#else u_char appl_mode2 : 1; u_char quantization : 2; u_char sample_freq : 2; u_char num_channels : 3; u_char coding_mode : 2; u_char multichannel_extension: 1; u_char type : 2; u_char appl_mode1 : 1;#endif u_short lang_code : 16; // <char> description u_int foo : 8; // 0x00000000 ? u_int caption : 8; u_int bar : 8; // 0x00000000 ?} ifo_audio_t;#define IFO_AUDIO_LEN 7/** * Subpicture Table */typedef struct { u_short prefix : 16; // 0x0100 ? u_short lang_code : 16; // <char> description u_char foo : 8; // dont know u_char caption : 8; // 0x00 ?} ifo_spu_t;/** * Time Map Table header entry */#if 0typedef struct { u_char tu : 16; // time unit (in seconds) u_int : 16; // don't know} ifo_tmt_hdr_t;#endiftypedef struct { u_int : 24; // don't know u_char tu : 8; // time unit (in seconds)} ifoq_tmt_hdr_t;//#define IFO_TMT_HDR_LEN 4#define IFOQ_TMT_HDR_LEN 1/** * hmm */typedef struct { u_short vob_id : 16; // Video Object Identifier u_char cell_id : 8; // Cell Identifier u_char : 8; // don't know u_int start : 32; // Cell start u_int end : 32; // Cell end} ifo_cell_addr_t;typedef struct { u_short vob_id : 16; // Video Object Identifier u_short cell_id : 16; // Cell Identifier} ifo_pgc_cell_pos_t;/** * Part of Title AND Title set Cell Address */typedef struct { u_short pgc; // Program Chain (PTT) u_short pg; // Program (PTT) u_long start; // Start of VOBU (VTS? CADDR) u_long end; // End of VOBU (VTS? CADDR)} ifo_ptt_data_t;typedef struct { u_int num; // Number of Chapters ifo_ptt_data_t *data; // Data} ifo_ptt_sub_t;typedef struct { u_int num; // Number of Titles ifo_ptt_sub_t *title; // Titles} ifo_ptt_t;typedef struct { u_char chain_info : 8; // 0x5e 0xde(2 angles, no overlay), 0x5f 0x9f 0x9f 0xdf(4 angles overlay), 0x2 0xa 0x8(1 angle) u_char foo : 8; // parent control ?? u_char still_time : 8; u_char cell_cmd : 8; //u_int foo : 32; u_int len_time : 32; u_int vobu_start : 32; // 1st vobu start u_int ilvu_end : 32; u_int vobu_last_start : 32; u_int vobu_last_end : 32;} ifo_pgci_cell_addr_t;#define PGCI_CELL_ADDR_LEN 24#define ID_NUM_MENU_VOBS 0#define ID_NUM_TITLE_VOBS 1#define ID_MAT 0#define ID_PTT 1#define ID_TSP 1#define ID_TITLE_PGCI 2#define ID_MENU_PGCI 3#define ID_TMT 4#define ID_MENU_CELL_ADDR 5#define ID_MENU_VOBU_ADDR_MAP 6#define ID_TITLE_CELL_ADDR 7#define ID_TITLE_VOBU_ADDR_MAP 8/** * Information Table - for internal use only */ typedef struct { u_int num_menu_vobs; u_int vob_start; u_char *data[10]; int fd; // file descriptor int64_t pos; // offset of ifo file on device } ifo_t;/** * Generic header */#define IFO_HDR_LEN 8#define IFOQ_HDR_LEN 2typedef struct { u_short num : 16; // number of entries u_short : 16; // don't known (reserved?) u_int len : 32; // length of table} ifo_hdr_t;typedef struct { u_short : 16; // don't known (reserved?) u_short num : 16; // number of entries u_int len : 32; // length of table} ifoq_hdr_t;/** * Prototypes */ifo_t *ifoOpen (int fd, int64_t pos);int ifoClose (ifo_t *ifo);u_int ifoGetVOBStart (ifo_t *ifo);int ifoGetNumberOfTitles (ifo_t *ifo);int ifoGetNumberOfParts (ifo_t *ifo);int ifoGetVMGPTT (ifo_hdr_t *hdr, char **ptr);int ifoGetPGCI (ifo_hdr_t *hdr, int title, char **ptr);int ifoGetCLUT (char *pgc, char **ptr);u_int ifoGetCellPlayInfo (u_char *pgc, u_char **ptr);u_int ifoGetCellPos (u_char *pgc, u_char **ptr);int ifoGetProgramMap (char *pgc, char **ptr);int ifoGetCellAddr (char *cell_addr, char **ptr);int ifoGetCellAddrNum (char *hdr);int ifoGetAudio (char *hdr, char **ptr);int ifoGetSPU (char *hdr, char **ptr);ifo_ptt_t *ifo_get_ptt (ifo_t *ifo);int ifo_get_num_title_pgci (ifo_t *ifo);u_char *ifo_get_ptr_title_pgci (ifo_t *ifo, int index);char *ifoDecodeLang (u_short descr);int ifoIsVTS (ifo_t *ifo);int ifoIsVMG (ifo_t *ifo);void ifoPrintVideo (u_char *ptr);void ifoPrintCellPlayInfo (u_char *ptr, u_int num);void ifoPrintCellInfo (u_char *ptr, u_int num);void ifoPrintCellPos (u_char *ptr, u_int num);void ifoPrintCLUT (u_char *ptr); void ifoPrintProgramMap (u_char *ptr, u_int num);#ifdef PARSERvoid ifoPrintAudio (ifo_audio_t *ptr, u_int num);void ifoPrintSPU (ifo_spu_t *ptr, u_int num);void ifoPrintTMT (ifo_t *ifo);void ifoPrintVMOP (u_char *opcode);void ifoPrint_ptt (ifo_ptt_t *ptt);void ifoPrint_vts_vobu_addr_map (ifo_t *ifo);void ifoPrint_vtsm_vobu_addr_map (ifo_t *ifo);void ifoPrint_vts_cell_addr (ifo_t *ifo);void ifoPrint_vtsm_cell_addr (ifo_t *ifo);void ifoPrint_title_pgci (ifo_t *ifo);void ifoPrint_pgc_cmd (u_char *pgc_ptr);void ifoPrintTSP (u_char *toast);void ifoPrint_pgc (u_char *ptr);#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -