annotate vm/vm.h @ 409:9b8bfc56a7fe src

Add dvdnav_program_play & dvdnav_current_title_program Using title parts w/ dvdnav_part_play and dvdnav_current_title_info is not reliable for use as chapter marks in files made from transcoding. The start of a part does not necessarily fall strictly inside the main title. Parts can have an intro sequence before getting into the title. So we use program boundaries instead of part markers to test when we have reached a chapter point during encoding of the title. The same would apply to displaying the current chapter during playback. The program boundaries should be checked instead of looking for a part. Patch from John Stebbins. Thanks!
author erik
date Fri, 30 Jul 2010 23:34:16 +0000
parents 390fbf2a9602
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
1 /*
390
ef8c0e834a14 Convert all ISO8859-1 sequences to proper UTF-8.
diego
parents: 389
diff changeset
2 * Copyright (C) 2000, 2001 HÃ¥kan Hjort
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
3 * Copyright (C) 2001 Rich Wareham <richwareham@users.sourceforge.net>
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 312
diff changeset
4 *
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
5 * This file is part of libdvdnav, a DVD navigation library. It is modified
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
6 * from a file originally part of the Ogle DVD player.
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 312
diff changeset
7 *
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
8 * libdvdnav is free software; you can redistribute it and/or modify
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
11 * (at your option) any later version.
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 312
diff changeset
12 *
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
13 * libdvdnav is distributed in the hope that it will be useful,
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
16 * GNU General Public License for more details.
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 312
diff changeset
17 *
389
d3c273ced49c Use consistent license headers everywhere: Fix wrong FSF address.
diego
parents: 388
diff changeset
18 * You should have received a copy of the GNU General Public License along
d3c273ced49c Use consistent license headers everywhere: Fix wrong FSF address.
diego
parents: 388
diff changeset
19 * with libdvdnav; if not, write to the Free Software Foundation, Inc.,
d3c273ced49c Use consistent license headers everywhere: Fix wrong FSF address.
diego
parents: 388
diff changeset
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
21 */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
22
391
d232a96ac231 Use consistent multiple inclusion guards everywhere:
diego
parents: 390
diff changeset
23 #ifndef LIBDVDNAV_VM_H
d232a96ac231 Use consistent multiple inclusion guards everywhere:
diego
parents: 390
diff changeset
24 #define LIBDVDNAV_VM_H
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
25
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
26 /* DOMAIN enum */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
27
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
28 typedef enum {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
29 FP_DOMAIN = 1,
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
30 VTS_DOMAIN = 2,
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
31 VMGM_DOMAIN = 4,
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
32 VTSM_DOMAIN = 8
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 312
diff changeset
33 } domain_t;
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
34
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
35 /**
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
36 * State: SPRM, GPRM, Domain, pgc, pgN, cellN, ?
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
37 */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
38 typedef struct {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
39 registers_t registers;
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 312
diff changeset
40
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
41 domain_t domain;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
42 int vtsN; /* 0 is vmgm? */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
43 pgc_t *pgc; /* either this or 'int pgcN' is enough? */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
44 int pgcN; /* but provide pgcN for quick lookup */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
45 int pgN; /* is this needed? can allways fid pgN from cellN? */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
46 int cellN;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
47 int32_t cell_restart; /* get cell to restart */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
48 int blockN;
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 312
diff changeset
49
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
50 /* Resume info */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
51 int rsm_vtsN;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
52 int rsm_blockN; /* of nav_packet */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
53 uint16_t rsm_regs[5]; /* system registers 4-8 */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
54 int rsm_pgcN;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
55 int rsm_cellN;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
56 } dvd_state_t;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
57
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
58 typedef struct vm_position_s {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
59 int16_t button; /* Button highlighted */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
60 int32_t vts; /* vts number to use */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
61 domain_t domain; /* domain to use */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
62 int32_t spu_channel; /* spu channel to use */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
63 int32_t angle_channel; /* angle channel to use */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
64 int32_t audio_channel; /* audio channel to use */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
65 int32_t hop_channel; /* channel hopping. E.g menu button pressed */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
66 #if 0
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
67 /* currently unused */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
68 int32_t title; /* title number */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
69 int32_t chapter; /* chapter number */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
70 #endif
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
71 int32_t cell; /* cell number */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
72 int32_t cell_restart; /* get cell to restart */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
73 int32_t cell_start; /* sector number of start of current cell in use */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
74 int32_t still; /* is cell still */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
75 int32_t block; /* block number within cell in use */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
76 } vm_position_t;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
77
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
78 typedef struct {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
79 dvd_reader_t *dvd;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
80 ifo_handle_t *vmgi;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
81 ifo_handle_t *vtsi;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
82 dvd_state_t state;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
83 int32_t hop_channel;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
84 char dvd_name[50];
397
a70f79850e5f implement and export dvdnav_get_serial_string(); patch by Matthew Wire devel - mrwire - co - uk. Fixed by Erik
nicodvb
parents: 392
diff changeset
85 char dvd_serial[15];
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
86 remap_t *map;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
87 int stopped;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
88 } vm_t;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
89
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
90 /* magic number for seeking hops */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
91 #define HOP_SEEK 0x1000
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
92
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
93
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
94 /* Audio stream number */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
95 #define AST_REG registers.SPRM[1]
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
96 /* Subpicture stream number */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
97 #define SPST_REG registers.SPRM[2]
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
98 /* Angle number */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
99 #define AGL_REG registers.SPRM[3]
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
100 /* Title Track Number */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
101 #define TTN_REG registers.SPRM[4]
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
102 /* VTS Title Track Number */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
103 #define VTS_TTN_REG registers.SPRM[5]
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
104 /* PGC Number for this Title Track */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
105 #define TT_PGCN_REG registers.SPRM[6]
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
106 /* Current Part of Title (PTT) number for (One_Sequential_PGC_Title) */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
107 #define PTTN_REG registers.SPRM[7]
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
108 /* Highlighted Button Number (btn nr 1 == value 1024) */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
109 #define HL_BTNN_REG registers.SPRM[8]
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
110 /* Parental Level */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
111 #define PTL_REG registers.SPRM[13]
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
112
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
113 /* Initialisation & destruction */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
114 vm_t *vm_new_vm(void);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
115 void vm_free_vm(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
116
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
117 /* IFO access */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
118 ifo_handle_t *vm_get_vmgi(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
119 ifo_handle_t *vm_get_vtsi(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
120
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
121 /* Reader Access */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
122 dvd_reader_t *vm_get_dvd_reader(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
123
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
124 /* Basic Handling */
256
6299ccea8a38 killing a lot of asserts and turning them into forced executions of Exit,
mroi
parents: 225
diff changeset
125 int vm_start(vm_t *vm);
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
126 void vm_stop(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
127 int vm_reset(vm_t *vm, const char *dvdroot);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
128
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
129 /* copying and merging - useful for try-running an operation */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
130 vm_t *vm_new_copy(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
131 void vm_merge(vm_t *target, vm_t *source);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
132 void vm_free_copy(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
133
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
134 /* regular playback */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
135 void vm_position_get(vm_t *vm, vm_position_t *position);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
136 void vm_get_next_cell(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
137
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
138 /* Jumping - all these return 1, if a hop has been performed */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
139 int vm_jump_pg(vm_t *vm, int pg);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
140 int vm_jump_cell_block(vm_t *vm, int cell, int block);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
141 int vm_jump_title_part(vm_t *vm, int title, int part);
409
9b8bfc56a7fe Add dvdnav_program_play & dvdnav_current_title_program
erik
parents: 401
diff changeset
142 int vm_jump_title_program(vm_t *vm, int title, int pgcn, int pgn);
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
143 int vm_jump_top_pg(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
144 int vm_jump_next_pg(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
145 int vm_jump_prev_pg(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
146 int vm_jump_up(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
147 int vm_jump_menu(vm_t *vm, DVDMenuID_t menuid);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
148 int vm_jump_resume(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
149 int vm_exec_cmd(vm_t *vm, vm_cmd_t *cmd);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
150
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
151 /* getting information */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
152 int vm_get_current_menu(vm_t *vm, int *menuid);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
153 int vm_get_current_title_part(vm_t *vm, int *title_result, int *part_result);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
154 int vm_get_audio_stream(vm_t *vm, int audioN);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
155 int vm_get_subp_stream(vm_t *vm, int subpN, int mode);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
156 int vm_get_audio_active_stream(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
157 int vm_get_subp_active_stream(vm_t *vm, int mode);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
158 void vm_get_angle_info(vm_t *vm, int *current, int *num_avail);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
159 #if 0
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
160 /* currently unused */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
161 void vm_get_audio_info(vm_t *vm, int *current, int *num_avail);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
162 void vm_get_subp_info(vm_t *vm, int *current, int *num_avail);
401
390fbf2a9602 Provide a way to retrieve video resolution.
rathann
parents: 397
diff changeset
163 #endif
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
164 void vm_get_video_res(vm_t *vm, int *width, int *height);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
165 int vm_get_video_aspect(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
166 int vm_get_video_scale_permission(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
167 video_attr_t vm_get_video_attr(vm_t *vm);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
168 audio_attr_t vm_get_audio_attr(vm_t *vm, int streamN);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
169 subp_attr_t vm_get_subp_attr(vm_t *vm, int streamN);
312
fdbfb58d2735 added utility functions vm_get_title_ifo() and vm_ifo_close()
nicodvb
parents: 285
diff changeset
170 ifo_handle_t *vm_get_title_ifo(vm_t *vm, uint32_t title);
fdbfb58d2735 added utility functions vm_get_title_ifo() and vm_ifo_close()
nicodvb
parents: 285
diff changeset
171 void vm_ifo_close(ifo_handle_t *ifo);
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
172
285
52877d182e96 moved all header inclusions from .h to .c files; my word, I've never seen such a horrible entanglement as in this mess
nicodvb
parents: 256
diff changeset
173 /* Uncomment for VM command tracing */
52877d182e96 moved all header inclusions from .h to .c files; my word, I've never seen such a horrible entanglement as in this mess
nicodvb
parents: 256
diff changeset
174 /* #define TRACE */
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
175 #ifdef TRACE
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
176 /* Debug */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
177 void vm_position_print(vm_t *vm, vm_position_t *position);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
178 #endif
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
179
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
180
391
d232a96ac231 Use consistent multiple inclusion guards everywhere:
diego
parents: 390
diff changeset
181 #endif /* LIBDVDNAV_VM_H */