00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef LIBDVDNAV_VM_H
00024 #define LIBDVDNAV_VM_H
00025
00026
00027
00028 typedef enum {
00029 FP_DOMAIN = 1,
00030 VTS_DOMAIN = 2,
00031 VMGM_DOMAIN = 4,
00032 VTSM_DOMAIN = 8
00033 } domain_t;
00034
00038 typedef struct {
00039 registers_t registers;
00040
00041 domain_t domain;
00042 int vtsN;
00043 pgc_t *pgc;
00044 int pgcN;
00045 int pgN;
00046 int cellN;
00047 int32_t cell_restart;
00048 int blockN;
00049
00050
00051 int rsm_vtsN;
00052 int rsm_blockN;
00053 uint16_t rsm_regs[5];
00054 int rsm_pgcN;
00055 int rsm_cellN;
00056 } dvd_state_t;
00057
00058 typedef struct vm_position_s {
00059 int16_t button;
00060 int32_t vts;
00061 domain_t domain;
00062 int32_t spu_channel;
00063 int32_t angle_channel;
00064 int32_t audio_channel;
00065 int32_t hop_channel;
00066 #if 0
00067
00068 int32_t title;
00069 int32_t chapter;
00070 #endif
00071 int32_t cell;
00072 int32_t cell_restart;
00073 int32_t cell_start;
00074 int32_t still;
00075 int32_t block;
00076 } vm_position_t;
00077
00078 typedef struct {
00079 dvd_reader_t *dvd;
00080 ifo_handle_t *vmgi;
00081 ifo_handle_t *vtsi;
00082 dvd_state_t state;
00083 int32_t hop_channel;
00084 char dvd_name[50];
00085 char dvd_serial[15];
00086 remap_t *map;
00087 int stopped;
00088 } vm_t;
00089
00090
00091 #define HOP_SEEK 0x1000
00092
00093
00094
00095 #define AST_REG registers.SPRM[1]
00096
00097 #define SPST_REG registers.SPRM[2]
00098
00099 #define AGL_REG registers.SPRM[3]
00100
00101 #define TTN_REG registers.SPRM[4]
00102
00103 #define VTS_TTN_REG registers.SPRM[5]
00104
00105 #define TT_PGCN_REG registers.SPRM[6]
00106
00107 #define PTTN_REG registers.SPRM[7]
00108
00109 #define HL_BTNN_REG registers.SPRM[8]
00110
00111 #define PTL_REG registers.SPRM[13]
00112
00113
00114 vm_t *vm_new_vm(void);
00115 void vm_free_vm(vm_t *vm);
00116
00117
00118 ifo_handle_t *vm_get_vmgi(vm_t *vm);
00119 ifo_handle_t *vm_get_vtsi(vm_t *vm);
00120
00121
00122 dvd_reader_t *vm_get_dvd_reader(vm_t *vm);
00123
00124
00125 int vm_start(vm_t *vm);
00126 void vm_stop(vm_t *vm);
00127 int vm_reset(vm_t *vm, const char *dvdroot);
00128
00129
00130 vm_t *vm_new_copy(vm_t *vm);
00131 void vm_merge(vm_t *target, vm_t *source);
00132 void vm_free_copy(vm_t *vm);
00133
00134
00135 void vm_position_get(vm_t *vm, vm_position_t *position);
00136 void vm_get_next_cell(vm_t *vm);
00137
00138
00139 int vm_jump_pg(vm_t *vm, int pg);
00140 int vm_jump_cell_block(vm_t *vm, int cell, int block);
00141 int vm_jump_title_part(vm_t *vm, int title, int part);
00142 int vm_jump_title_program(vm_t *vm, int title, int pgcn, int pgn);
00143 int vm_jump_top_pg(vm_t *vm);
00144 int vm_jump_next_pg(vm_t *vm);
00145 int vm_jump_prev_pg(vm_t *vm);
00146 int vm_jump_up(vm_t *vm);
00147 int vm_jump_menu(vm_t *vm, DVDMenuID_t menuid);
00148 int vm_jump_resume(vm_t *vm);
00149 int vm_exec_cmd(vm_t *vm, vm_cmd_t *cmd);
00150
00151
00152 int vm_get_current_menu(vm_t *vm, int *menuid);
00153 int vm_get_current_title_part(vm_t *vm, int *title_result, int *part_result);
00154 int vm_get_audio_stream(vm_t *vm, int audioN);
00155 int vm_get_subp_stream(vm_t *vm, int subpN, int mode);
00156 int vm_get_audio_active_stream(vm_t *vm);
00157 int vm_set_audio_active_stream(vm_t *vm, int audioN);
00158 int vm_get_subp_active_stream(vm_t *vm, int mode);
00159 void vm_get_angle_info(vm_t *vm, int *current, int *num_avail);
00160 #if 0
00161
00162 void vm_get_audio_info(vm_t *vm, int *current, int *num_avail);
00163 void vm_get_subp_info(vm_t *vm, int *current, int *num_avail);
00164 #endif
00165 void vm_get_video_res(vm_t *vm, int *width, int *height);
00166 int vm_get_video_aspect(vm_t *vm);
00167 int vm_get_video_scale_permission(vm_t *vm);
00168 int vm_get_video_format(vm_t *vm);
00169 video_attr_t vm_get_video_attr(vm_t *vm);
00170 audio_attr_t vm_get_audio_attr(vm_t *vm, int streamN);
00171 subp_attr_t vm_get_subp_attr(vm_t *vm, int streamN);
00172 ifo_handle_t *vm_get_title_ifo(vm_t *vm, uint32_t title);
00173 void vm_ifo_close(ifo_handle_t *ifo);
00174
00175
00176
00177 #ifdef TRACE
00178
00179 void vm_position_print(vm_t *vm, vm_position_t *position);
00180 #endif
00181
00182
00183 #endif