summaryrefslogtreecommitdiff
path: root/src/input/libdvdnav/vm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/libdvdnav/vm.h')
-rw-r--r--src/input/libdvdnav/vm.h141
1 files changed, 75 insertions, 66 deletions
diff --git a/src/input/libdvdnav/vm.h b/src/input/libdvdnav/vm.h
index e4c6f1863..9b1f0cfc8 100644
--- a/src/input/libdvdnav/vm.h
+++ b/src/input/libdvdnav/vm.h
@@ -19,7 +19,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: vm.h,v 1.3 2002/09/20 12:53:53 mroi Exp $
+ * $Id: vm.h,v 1.4 2003/02/20 16:02:01 mroi Exp $
*
*/
@@ -33,8 +33,8 @@
/* DOMAIN enum */
typedef enum {
- FP_DOMAIN = 1,
- VTS_DOMAIN = 2,
+ FP_DOMAIN = 1,
+ VTS_DOMAIN = 2,
VMGM_DOMAIN = 4,
VTSM_DOMAIN = 8
} domain_t;
@@ -45,40 +45,37 @@ typedef enum {
typedef struct {
registers_t registers;
- pgc_t *pgc; /* either this or *pgc is enough? */
-
- domain_t domain;
- int vtsN; /* 0 is vmgm? */
- /* int pgcN; // either this or *pgc is enough. Which to use? */
- int pgN; /* is this needed? can allways fid pgN from cellN? */
- int cellN;
- int32_t cell_restart; /* get cell to restart */
- int blockN;
+ domain_t domain;
+ int vtsN; /* 0 is vmgm? */
+ pgc_t *pgc; /* either this or 'int pgcN' is enough? */
+ int pgN; /* is this needed? can allways fid pgN from cellN? */
+ int cellN;
+ int32_t cell_restart; /* get cell to restart */
+ int blockN;
/* Resume info */
- int rsm_vtsN;
- int rsm_blockN; /* of nav_packet */
- uint16_t rsm_regs[5]; /* system registers 4-8 */
- int rsm_pgcN;
- int rsm_cellN;
+ int rsm_vtsN;
+ int rsm_blockN; /* of nav_packet */
+ uint16_t rsm_regs[5]; /* system registers 4-8 */
+ int rsm_pgcN;
+ int rsm_cellN;
} dvd_state_t;
typedef struct vm_position_s {
- int16_t button; /* Button highlighted */
- uint32_t clut; /* CLUT to use, not needed in this struct */
- int32_t vts; /* vts number to use */
- int32_t domain; /* domain to use */
- int32_t spu_channel; /* spu channel to use */
- int32_t angle_channel; /* angle channel to use */
- int32_t audio_channel; /* audio channel to use */
- int32_t hop_channel; /* channel hopping. E.g menu button pressed */
- int32_t title; /* title number */
- int32_t chapter; /* chapter number */
- int32_t cell; /* cell number */
- int32_t cell_restart; /* get cell to restart */
- int32_t still; /* is cell still */
- int32_t vobu_start; /* block number of start of current VOBU in use */
- int32_t vobu_next; /* block number within VOBU in use */
+ int16_t button; /* Button highlighted */
+ int32_t vts; /* vts number to use */
+ int32_t domain; /* domain to use */
+ int32_t spu_channel; /* spu channel to use */
+ int32_t angle_channel; /* angle channel to use */
+ int32_t audio_channel; /* audio channel to use */
+ int32_t hop_channel; /* channel hopping. E.g menu button pressed */
+ int32_t title; /* title number */
+ int32_t chapter; /* chapter number */
+ int32_t cell; /* cell number */
+ int32_t cell_restart; /* get cell to restart */
+ int32_t cell_start; /* sector number of start of current cell in use */
+ int32_t still; /* is cell still */
+ int32_t block; /* block number within cell in use */
} vm_position_t;
typedef struct {
@@ -86,13 +83,15 @@ typedef struct {
ifo_handle_t *vmgi;
ifo_handle_t *vtsi;
dvd_state_t state;
- int badness_counter;
- int32_t hop_channel;
- char dvd_name[50];
- int dvd_name_length;
- remap_t *map;
+ int32_t hop_channel;
+ char dvd_name[50];
+ remap_t *map;
+ int stopped;
} vm_t;
+/* magic number for seeking hops */
+#define HOP_SEEK 0x1000
+
/* Audio stream number */
#define AST_REG registers.SPRM[1]
@@ -115,7 +114,7 @@ typedef struct {
/* Initialisation & destruction */
vm_t* vm_new_vm();
-void vm_free_vm(vm_t *vm);
+void vm_free_vm(vm_t *vm);
/* IFO access */
ifo_handle_t *vm_get_vmgi(vm_t *vm);
@@ -124,38 +123,48 @@ ifo_handle_t *vm_get_vtsi(vm_t *vm);
/* Reader Access */
dvd_reader_t *vm_get_dvd_reader(vm_t *vm);
-/* Jumping */
-int vm_start_title(vm_t *vm, int tt);
-int vm_jump_prog(vm_t *vm, int pr);
-int vm_jump_title_part(vm_t *vm, int title, int part);
+/* Basic Handling */
+void vm_start(vm_t *vm);
+void vm_stop(vm_t *vm);
+int vm_reset(vm_t *vm, const char *dvdroot);
+
+/* regular playback */
+void vm_position_get(vm_t *vm, vm_position_t *position);
+void vm_get_next_cell(vm_t *vm);
-/* Other calls */
-int vm_reset(vm_t *vm, char *dvdroot); /* , register_t regs); */
-int vm_start(vm_t *vm);
-int vm_position_get(vm_t *vm, vm_position_t *position);
-int vm_position_print(vm_t *vm, vm_position_t *position);
-int vm_eval_cmd(vm_t *vm, vm_cmd_t *cmd);
-int vm_get_next_cell(vm_t *vm);
-int vm_menu_call(vm_t *vm, DVDMenuID_t menuid, int block);
-int vm_resume(vm_t *vm);
-int vm_go_up(vm_t *vm);
-int vm_top_pg(vm_t *vm);
-int vm_next_pg(vm_t *vm);
-int vm_prev_pg(vm_t *vm);
+/* Jumping - all these return 1, if a hop has been performed */
+int vm_jump_pg(vm_t *vm, int pg);
+int vm_jump_title_part(vm_t *vm, int title, int part);
+int vm_jump_top_pg(vm_t *vm);
+int vm_jump_next_pg(vm_t *vm);
+int vm_jump_prev_pg(vm_t *vm);
+int vm_jump_up(vm_t *vm);
+int vm_jump_menu(vm_t *vm, DVDMenuID_t menuid);
+int vm_exec_cmd(vm_t *vm, vm_cmd_t *cmd);
+
+/* getting information */
+int vm_get_current_title_part(vm_t *vm, int *title_result, int *part_result);
int vm_get_audio_stream(vm_t *vm, int audioN);
-int vm_get_audio_active_stream(vm_t *vm);
int vm_get_subp_stream(vm_t *vm, int subpN, int mode);
+int vm_get_audio_active_stream(vm_t *vm);
int vm_get_subp_active_stream(vm_t *vm, int mode);
-void vm_get_angle_info(vm_t *vm, int *num_avail, int *current);
-void vm_get_audio_info(vm_t *vm, int *num_avail, int *current);
-void vm_get_subp_info(vm_t *vm, int *num_avail, int *current);
-int vm_get_current_title_part(vm_t *vm, int *title_result, int *part_result);
-
-subp_attr_t vm_get_subp_attr(vm_t *vm, int streamN);
-audio_attr_t vm_get_audio_attr(vm_t *vm, int streamN);
+void vm_get_angle_info(vm_t *vm, int *current, int *num_avail);
+#if 0
+/* currently unused */
+void vm_get_audio_info(vm_t *vm, int *current, int *num_avail);
+void vm_get_subp_info(vm_t *vm, int *current, int *num_avail);
void vm_get_video_res(vm_t *vm, int *width, int *height);
-int vm_get_video_aspect(vm_t *vm);
-int vm_get_video_scale_permission(vm_t *vm);
+#endif
+int vm_get_video_aspect(vm_t *vm);
+int vm_get_video_scale_permission(vm_t *vm);
+video_attr_t vm_get_video_attr(vm_t *vm);
+audio_attr_t vm_get_audio_attr(vm_t *vm, int streamN);
+subp_attr_t vm_get_subp_attr(vm_t *vm, int streamN);
+
+#ifdef TRACE
+/* Debug */
+void vm_position_print(vm_t *vm, vm_position_t *position);
+#endif
-#endif /* VM_HV_INCLUDED */
+#endif /* VM_HV_INCLUDED */