ifo.h
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:5k
源码类别:

DVD

开发平台:

Unix_Linux

  1. #ifndef __IFO_H__
  2. #define __IFO_H__
  3. #ifndef DVD_VIDEO_LB_LEN
  4. #define DVD_VIDEO_LB_LEN 2048
  5. #endif
  6. /**
  7.  * Video Info Table 
  8.  */
  9. typedef struct {
  10. #if BYTE_ORDER == BIG_ENDIAN
  11. u_char compression      : 2;
  12. u_char system           : 2;
  13. u_char ratio            : 2;
  14. u_char perm_displ       : 2;
  15. u_char line21_1         : 1;
  16. u_char line21_2         : 1;
  17. u_char source_res       : 2;
  18. u_char letterboxed      : 1;
  19. u_char mode             : 1;
  20. #else
  21. u_char perm_displ       : 2;
  22. u_char ratio            : 2;
  23. u_char system           : 2;
  24. u_char compression      : 2;
  25. u_char mode             : 1;
  26. u_char letterboxed      : 1;
  27. u_char source_res       : 2;
  28. u_char line21_2         : 1;
  29. u_char line21_1         : 1;
  30. #endif
  31. } ifo_video_info_t;
  32. /**
  33.  * Audio Sub Table
  34.  */
  35. typedef struct ifo_audio_sub_struct {
  36.         u_short lang_code; // Language Code
  37.         u_char coding_mode; // Audio Coding mode
  38.         u_char multichannel_extension; // Audio Coding mode
  39.         u_char type; // Audio Coding mode
  40.         u_char  appl_mode; // Application mode
  41.         u_char quantization; // Audio Coding mode
  42.         u_char sample_freq; // Frequency
  43.         u_char num_channels; // Quantization/DRC
  44.         u_char  caption; // Caption
  45. } ifo_audio_sub_t;
  46. /**
  47.  * Audio Table
  48.  */
  49. typedef struct {
  50.         u_int   num; // Number of Audio Subchannels
  51.         ifo_audio_sub_t *sub; // Audio Sub Channel-Descriptors
  52. } ifo_audio_t;
  53. /**
  54.  * Subpicture Sub Table
  55.  */
  56. typedef struct ifo_subpic_sub_struct {
  57.         u_short lang_code; // Language Code
  58.         u_char  caption; // Caption
  59. } ifo_subpic_sub_t;
  60. /**
  61.  * Subpicture Table
  62.  */
  63. typedef struct {
  64.         u_int   num; // Number of Audio Subchannels
  65.         ifo_subpic_sub_t *sub; // Audio Sub Channel-Descriptors
  66. } ifo_subpic_t;
  67. /**
  68.  * hmm
  69.  */
  70. typedef struct {
  71.         u_short vob_id          : 16;   // Video Object Identifier
  72.         u_char  cell_id         : 8;    // Cell Identifier
  73.         u_char                  : 8;    // don't know
  74.         u_int   start           : 32;   // Cell start
  75.         u_int   end             : 32;   // Cell end
  76. } ifo_cell_addr_t;
  77. typedef struct {
  78. u_short vob_id : 16; // Video Object Identifier
  79. u_short cell_id : 16; // Cell Identifier
  80. } ifo_pgc_cell_pos_t;
  81. /**
  82.  * Part of Title AND Title set Cell Address
  83.  */
  84. typedef struct {
  85. u_short pgc; // Program Chain (PTT)
  86. u_short pg; // Program (PTT)
  87. u_long start; // Start of VOBU (VTS? CADDR)
  88. u_long end; // End of VOBU (VTS? CADDR)
  89. } ifo_ptt_data_t;
  90. typedef struct {
  91. u_int num; // Number of Chapters
  92. ifo_ptt_data_t *data; // Data
  93. } ifo_ptt_sub_t;
  94. typedef struct {
  95. u_int num; // Number of Titles
  96. ifo_ptt_sub_t *title; // Titles
  97. } ifo_ptt_t;
  98. typedef struct {
  99.         u_int   foo             : 32;
  100.         u_int   len_time        : 32;
  101.         u_int   vobu_start      : 32;   // 1st vobu start
  102.         u_int   ilvu_end        : 32;
  103.         u_int   vobu_last_start : 32;
  104.         u_int   vobu_last_end   : 32;
  105. } ifo_pgci_cell_addr_t;
  106. #define PGCI_CELL_ADDR_LEN 24
  107. #define ID_NUM_MENU_VOBS 0
  108. #define ID_NUM_TITLE_VOBS 1
  109. #define ID_MAT 0
  110. #define ID_PTT 1
  111. #define ID_TITLE_PGCI 2
  112. #define ID_MENU_PGCI 3
  113. #define ID_TMT 4
  114. #define ID_MENU_CELL_ADDR 5
  115. #define ID_MENU_VOBU_ADDR_MAP 6
  116. #define ID_TITLE_CELL_ADDR 7
  117. #define ID_TITLE_VOBU_ADDR_MAP  8
  118. /**
  119.  * Information Table - for internal use only
  120.  */
  121.  
  122. typedef struct {
  123. u_int num_menu_vobs;
  124. u_int vob_start;
  125. u_char *data[10];
  126. int fd; // file descriptor
  127. __off64_t pos; // offset of ifo file on device 
  128. } ifo_t;
  129. /**
  130.  * Generic header
  131.  */
  132. #define IFO_HDR_LEN 8
  133. typedef struct {
  134.         u_short num     : 16;   // number of entries
  135.         u_short         : 16;   // don't known (reserved?)
  136.         u_int   len     : 32;   // length of table
  137. } ifo_hdr_t;
  138. /**
  139.  * Prototypes
  140.  */
  141. ifo_t *ifoOpen (int fd, __off64_t pos);
  142. int ifoClose (ifo_t *ifo);
  143. int ifoGetVOBStart (ifo_t *ifo);
  144. int ifoGetNumberOfTitles (ifo_t *ifo);
  145. int ifoGetNumberOfParts (ifo_t *ifo);
  146. int ifoGetVMGPTT (ifo_hdr_t *hdr, char **ptr);
  147. int ifoGetPGCI (ifo_hdr_t *hdr, int title, char **ptr);
  148. int ifoGetCLUT (char *pgc, char **ptr);
  149. int ifoGetCellPlayInfo (char *pgc, char **ptr);
  150. int ifoGetCellPos (char *pgc, char **ptr);
  151. int ifoGetProgramMap (char *pgc, char **ptr);
  152. int ifoGetCellAddr (char *cell_addr, char **ptr);
  153. ifo_subpic_t *ifoGetSPU (u_char *ptr);
  154. ifo_audio_t *ifoGetAudio (u_char *ptr);
  155. ifo_ptt_t *ifo_get_ptt (ifo_t *ifo);
  156. int ifo_get_num_title_pgci (ifo_t *ifo);
  157. u_char *ifo_get_ptr_title_pgci (ifo_t *ifo, int index);
  158. int ifoIsVTS (ifo_t *ifo);
  159. int ifoIsVMG (ifo_t *ifo);
  160. void ifoPrintVideo (u_char *ptr);
  161. void ifoPrintCellPlayInfo (u_char *ptr, u_int num);
  162. void ifoPrintCellInfo (u_char *ptr, u_int num);
  163. void ifoPrintCellPos (u_char *ptr, u_int num);
  164. void ifoPrintCLUT (u_char *ptr); 
  165. void ifoPrintProgramMap (u_char *ptr, u_int num);
  166. #ifdef PARSER
  167. void ifoPrintSPU (ifo_subpic_t *audio);
  168. void ifoPrintAudio (ifo_audio_t *audio);
  169. void ifo_print_ptt (ifo_ptt_t *ptt);
  170. void ifo_print_vts_vobu_addr_map (ifo_t *ifo);
  171. void ifo_print_vtsm_vobu_addr_map (ifo_t *ifo);
  172. void ifo_print_vts_cell_addr (ifo_t *ifo);
  173. void ifo_print_vtsm_cell_addr (ifo_t *ifo);
  174. void ifo_print_title_pgci (ifo_t *ifo);
  175. void ifo_print_tmt (ifo_t *ifo);
  176. void ifo_print_pgc_cmd (u_char *pgc_ptr);
  177. void ifo_print_toast (u_char *toast);
  178. #endif
  179. //DENT move this out
  180. #include "misc.h"
  181. #endif