comparison vm/vm.h @ 0:427b7da5cbdb src

first split of dvdread; it's just a copy of dvdnav still to be cleaned
author nicodvb
date Sun, 01 Jun 2008 08:39:07 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:427b7da5cbdb
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
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
21 *
22 * $Id$
23 *
24 */
25
26 #ifndef VM_H_INCLUDED
27 #define VM_H_INCLUDED
28
29 /* DOMAIN enum */
30
31 typedef enum {
32 FP_DOMAIN = 1,
33 VTS_DOMAIN = 2,
34 VMGM_DOMAIN = 4,
35 VTSM_DOMAIN = 8
36 } domain_t;
37
38 /**
39 * State: SPRM, GPRM, Domain, pgc, pgN, cellN, ?
40 */
41 typedef struct {
42 registers_t registers;
43
44 domain_t domain;
45 int vtsN; /* 0 is vmgm? */
46 pgc_t *pgc; /* either this or 'int pgcN' is enough? */
47 int pgcN; /* but provide pgcN for quick lookup */
48 int pgN; /* is this needed? can allways fid pgN from cellN? */
49 int cellN;
50 int32_t cell_restart; /* get cell to restart */
51 int blockN;
52
53 /* Resume info */
54 int rsm_vtsN;
55 int rsm_blockN; /* of nav_packet */
56 uint16_t rsm_regs[5]; /* system registers 4-8 */
57 int rsm_pgcN;
58 int rsm_cellN;
59 } dvd_state_t;
60
61 typedef struct vm_position_s {
62 int16_t button; /* Button highlighted */
63 int32_t vts; /* vts number to use */
64 domain_t domain; /* domain to use */
65 int32_t spu_channel; /* spu channel to use */
66 int32_t angle_channel; /* angle channel to use */
67 int32_t audio_channel; /* audio channel to use */
68 int32_t hop_channel; /* channel hopping. E.g menu button pressed */
69 #if 0
70 /* currently unused */
71 int32_t title; /* title number */
72 int32_t chapter; /* chapter number */
73 #endif
74 int32_t cell; /* cell number */
75 int32_t cell_restart; /* get cell to restart */
76 int32_t cell_start; /* sector number of start of current cell in use */
77 int32_t still; /* is cell still */
78 int32_t block; /* block number within cell in use */
79 } vm_position_t;
80
81 typedef struct {
82 dvd_reader_t *dvd;
83 ifo_handle_t *vmgi;
84 ifo_handle_t *vtsi;
85 dvd_state_t state;
86 int32_t hop_channel;
87 char dvd_name[50];
88 remap_t *map;
89 int stopped;
90 } vm_t;
91
92 /* magic number for seeking hops */
93 #define HOP_SEEK 0x1000
94
95
96 /* Audio stream number */
97 #define AST_REG registers.SPRM[1]
98 /* Subpicture stream number */
99 #define SPST_REG registers.SPRM[2]
100 /* Angle number */
101 #define AGL_REG registers.SPRM[3]
102 /* Title Track Number */
103 #define TTN_REG registers.SPRM[4]
104 /* VTS Title Track Number */
105 #define VTS_TTN_REG registers.SPRM[5]
106 /* PGC Number for this Title Track */
107 #define TT_PGCN_REG registers.SPRM[6]
108 /* Current Part of Title (PTT) number for (One_Sequential_PGC_Title) */
109 #define PTTN_REG registers.SPRM[7]
110 /* Highlighted Button Number (btn nr 1 == value 1024) */
111 #define HL_BTNN_REG registers.SPRM[8]
112 /* Parental Level */
113 #define PTL_REG registers.SPRM[13]
114
115 /* Initialisation & destruction */
116 vm_t *vm_new_vm(void);
117 void vm_free_vm(vm_t *vm);
118
119 /* IFO access */
120 ifo_handle_t *vm_get_vmgi(vm_t *vm);
121 ifo_handle_t *vm_get_vtsi(vm_t *vm);
122
123 /* Reader Access */
124 dvd_reader_t *vm_get_dvd_reader(vm_t *vm);
125
126 /* Basic Handling */
127 int vm_start(vm_t *vm);
128 void vm_stop(vm_t *vm);
129 int vm_reset(vm_t *vm, const char *dvdroot);
130
131 /* copying and merging - useful for try-running an operation */
132 vm_t *vm_new_copy(vm_t *vm);
133 void vm_merge(vm_t *target, vm_t *source);
134 void vm_free_copy(vm_t *vm);
135
136 /* regular playback */
137 void vm_position_get(vm_t *vm, vm_position_t *position);
138 void vm_get_next_cell(vm_t *vm);
139
140 /* Jumping - all these return 1, if a hop has been performed */
141 int vm_jump_pg(vm_t *vm, int pg);
142 int vm_jump_cell_block(vm_t *vm, int cell, int block);
143 int vm_jump_title_part(vm_t *vm, int title, int part);
144 int vm_jump_top_pg(vm_t *vm);
145 int vm_jump_next_pg(vm_t *vm);
146 int vm_jump_prev_pg(vm_t *vm);
147 int vm_jump_up(vm_t *vm);
148 int vm_jump_menu(vm_t *vm, DVDMenuID_t menuid);
149 int vm_jump_resume(vm_t *vm);
150 int vm_exec_cmd(vm_t *vm, vm_cmd_t *cmd);
151
152 /* getting information */
153 int vm_get_current_menu(vm_t *vm, int *menuid);
154 int vm_get_current_title_part(vm_t *vm, int *title_result, int *part_result);
155 int vm_get_audio_stream(vm_t *vm, int audioN);
156 int vm_get_subp_stream(vm_t *vm, int subpN, int mode);
157 int vm_get_audio_active_stream(vm_t *vm);
158 int vm_get_subp_active_stream(vm_t *vm, int mode);
159 void vm_get_angle_info(vm_t *vm, int *current, int *num_avail);
160 #if 0
161 /* currently unused */
162 void vm_get_audio_info(vm_t *vm, int *current, int *num_avail);
163 void vm_get_subp_info(vm_t *vm, int *current, int *num_avail);
164 void vm_get_video_res(vm_t *vm, int *width, int *height);
165 #endif
166 int vm_get_video_aspect(vm_t *vm);
167 int vm_get_video_scale_permission(vm_t *vm);
168 video_attr_t vm_get_video_attr(vm_t *vm);
169 audio_attr_t vm_get_audio_attr(vm_t *vm, int streamN);
170 subp_attr_t vm_get_subp_attr(vm_t *vm, int streamN);
171 ifo_handle_t *vm_get_title_ifo(vm_t *vm, uint32_t title);
172 void vm_ifo_close(ifo_handle_t *ifo);
173
174 /* Uncomment for VM command tracing */
175 /* #define TRACE */
176 #ifdef TRACE
177 /* Debug */
178 void vm_position_print(vm_t *vm, vm_position_t *position);
179 #endif
180
181
182 #endif /* VM_HV_INCLUDED */