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