/xbmc/cores/dvdplayer/DVDInputStreams/dvdnav/vm.h

http://github.com/xbmc/xbmc · C Header · 186 lines · 113 code · 24 blank · 49 comment · 0 complexity · c6471d2c09703bcd1d5d0c39829168de MD5 · raw file

  1. /*
  2. * Copyright (C) 2000, 2001 H?kan Hjort
  3. * Copyright (C) 2001 Rich Wareham <richwareham@users.sourceforge.net>
  4. *
  5. * This file is part of libdvdnav, a DVD navigation library. It is modified
  6. * from a file originally part of the Ogle DVD player.
  7. *
  8. * libdvdnav is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * libdvdnav is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License along
  19. * with libdvdnav; if not, write to the Free Software Foundation, Inc.,
  20. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  21. */
  22. #ifndef LIBDVDNAV_VM_H
  23. #define LIBDVDNAV_VM_H
  24. #include "remap.h"
  25. #include "dvdnav_internal.h"
  26. /* DOMAIN enum */
  27. typedef enum {
  28. FP_DOMAIN = 1,
  29. VTS_DOMAIN = 2,
  30. VMGM_DOMAIN = 4,
  31. VTSM_DOMAIN = 8
  32. } domain_t;
  33. /**
  34. * State: SPRM, GPRM, Domain, pgc, pgN, cellN, ?
  35. */
  36. typedef struct {
  37. registers_t registers;
  38. domain_t domain;
  39. int vtsN; /* 0 is vmgm? */
  40. pgc_t *pgc; /* either this or 'int pgcN' is enough? */
  41. int pgcN; /* but provide pgcN for quick lookup */
  42. int pgN; /* is this needed? can allways fid pgN from cellN? */
  43. int cellN;
  44. int32_t cell_restart; /* get cell to restart */
  45. int blockN;
  46. /* Resume info */
  47. int rsm_vtsN;
  48. int rsm_blockN; /* of nav_packet */
  49. uint16_t rsm_regs[5]; /* system registers 4-8 */
  50. int rsm_pgcN;
  51. int rsm_cellN;
  52. } dvd_state_t;
  53. typedef struct vm_position_s {
  54. int16_t button; /* Button highlighted */
  55. int32_t vts; /* vts number to use */
  56. domain_t domain; /* domain to use */
  57. int32_t spu_channel; /* spu channel to use */
  58. int32_t angle_channel; /* angle channel to use */
  59. int32_t audio_channel; /* audio channel to use */
  60. int32_t hop_channel; /* channel hopping. E.g menu button pressed */
  61. #if 0
  62. /* currently unused */
  63. int32_t title; /* title number */
  64. int32_t chapter; /* chapter number */
  65. #endif
  66. int32_t cell; /* cell number */
  67. int32_t cell_restart; /* get cell to restart */
  68. int32_t cell_start; /* sector number of start of current cell in use */
  69. int32_t still; /* is cell still */
  70. int32_t block; /* block number within cell in use */
  71. } vm_position_t;
  72. typedef struct {
  73. dvd_reader_t *dvd;
  74. ifo_handle_t *vmgi;
  75. ifo_handle_t *vtsi;
  76. dvd_state_t state;
  77. int32_t hop_channel;
  78. char dvd_name[50];
  79. char dvd_serial[15];
  80. remap_t *map;
  81. int stopped;
  82. } vm_t;
  83. /* magic number for seeking hops */
  84. #define HOP_SEEK 0x1000
  85. /* Audio stream number */
  86. #define AST_REG registers.SPRM[1]
  87. /* Subpicture stream number */
  88. #define SPST_REG registers.SPRM[2]
  89. /* Angle number */
  90. #define AGL_REG registers.SPRM[3]
  91. /* Title Track Number */
  92. #define TTN_REG registers.SPRM[4]
  93. /* VTS Title Track Number */
  94. #define VTS_TTN_REG registers.SPRM[5]
  95. /* PGC Number for this Title Track */
  96. #define TT_PGCN_REG registers.SPRM[6]
  97. /* Current Part of Title (PTT) number for (One_Sequential_PGC_Title) */
  98. #define PTTN_REG registers.SPRM[7]
  99. /* Highlighted Button Number (btn nr 1 == value 1024) */
  100. #define HL_BTNN_REG registers.SPRM[8]
  101. /* Parental Level */
  102. #define PTL_REG registers.SPRM[13]
  103. /* Initialisation & destruction */
  104. vm_t *vm_new_vm(void);
  105. void vm_free_vm(vm_t *vm);
  106. /* IFO access */
  107. ifo_handle_t *vm_get_vmgi(vm_t *vm);
  108. ifo_handle_t *vm_get_vtsi(vm_t *vm);
  109. /* Reader Access */
  110. dvd_reader_t *vm_get_dvd_reader(vm_t *vm);
  111. /* Basic Handling */
  112. int vm_start(vm_t *vm);
  113. void vm_stop(vm_t *vm);
  114. int vm_reset(vm_t *vm, const char *dvdroot);
  115. /* copying and merging - useful for try-running an operation */
  116. vm_t *vm_new_copy(vm_t *vm);
  117. void vm_merge(vm_t *target, vm_t *source);
  118. void vm_free_copy(vm_t *vm);
  119. /* regular playback */
  120. void vm_position_get(vm_t *vm, vm_position_t *position);
  121. void vm_get_next_cell(vm_t *vm);
  122. /* Jumping - all these return 1, if a hop has been performed */
  123. int vm_jump_pg(vm_t *vm, int pg);
  124. int vm_jump_cell_block(vm_t *vm, int cell, int block);
  125. int vm_jump_title_part(vm_t *vm, int title, int part);
  126. int vm_jump_title_program(vm_t *vm, int title, int pgcn, int pgn);
  127. int vm_jump_top_pg(vm_t *vm);
  128. int vm_jump_next_pg(vm_t *vm);
  129. int vm_jump_prev_pg(vm_t *vm);
  130. int vm_jump_up(vm_t *vm);
  131. int vm_jump_menu(vm_t *vm, DVDMenuID_t menuid);
  132. int vm_jump_resume(vm_t *vm);
  133. int vm_exec_cmd(vm_t *vm, vm_cmd_t *cmd);
  134. /* getting information */
  135. int vm_get_current_menu(vm_t *vm, int *menuid);
  136. int vm_get_current_title_part(vm_t *vm, int *title_result, int *part_result);
  137. int vm_get_audio_stream(vm_t *vm, int audioN);
  138. int vm_get_subp_stream(vm_t *vm, int subpN, int mode);
  139. int vm_get_audio_active_stream(vm_t *vm);
  140. int vm_get_subp_active_stream(vm_t *vm, int mode);
  141. void vm_get_angle_info(vm_t *vm, int *current, int *num_avail);
  142. void vm_get_audio_info(vm_t *vm, int *current, int *num_avail);
  143. void vm_get_subp_info(vm_t *vm, int *current, int *num_avail);
  144. void vm_get_video_res(vm_t *vm, int *width, int *height);
  145. int vm_get_video_aspect(vm_t *vm);
  146. int vm_get_video_scale_permission(vm_t *vm);
  147. video_attr_t vm_get_video_attr(vm_t *vm);
  148. audio_attr_t vm_get_audio_attr(vm_t *vm, int streamN);
  149. subp_attr_t vm_get_subp_attr(vm_t *vm, int streamN);
  150. ifo_handle_t *vm_get_title_ifo(vm_t *vm, uint32_t title);
  151. void vm_ifo_close(ifo_handle_t *ifo);
  152. int vm_get_state(vm_t *vm, dvd_state_t *save_state);
  153. int vm_set_state(vm_t *vm, dvd_state_t *save_state);
  154. /* Uncomment for VM command tracing */
  155. /* #define TRACE */
  156. #ifdef TRACE
  157. /* Debug */
  158. void vm_position_print(vm_t *vm, vm_position_t *position);
  159. #endif
  160. /* XBMC added functions */
  161. vm_t* dvdnav_get_vm(dvdnav_t *self);
  162. #endif /* LIBDVDNAV_VM_H */