annotate navigation.c @ 6:5f319e02e333 src

Some cleaning up. changed exit(1) to assert(0) so they actually get seen by the user so that it helps developers more.
author jcdutton
date Sat, 06 Apr 2002 18:31:50 +0000
parents c1b55dc1bfed
children 3c1df0cb3aee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
1 /*
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
2 * Copyright (C) 2000 Rich Wareham <richwareham@users.sourceforge.net>
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
3 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
4 * This file is part of libdvdnav, a DVD navigation library.
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
5 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
6 * libdvdnav is free software; you can redistribute it and/or modify
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
9 * (at your option) any later version.
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
10 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
11 * libdvdnav is distributed in the hope that it will be useful,
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
14 * GNU General Public License for more details.
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
15 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
19 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
20 * $Id$
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
21 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
22 */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
23
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
25 #include "config.h"
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
26 #endif
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
27
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
28 #include <dvdnav.h>
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
29 #include "dvdnav_internal.h"
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
30
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
31 #include "vm.h"
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
32
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
33 /* Navigation API calls */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
34
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
35 /* Common things we do everytime we do a jump */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
36 void dvdnav_do_post_jump(dvdnav_t *self) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
37 dvd_state_t *state = &(self->vm->state);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
38 cell_playback_t *cell = &(state->pgc->cell_playback[state->cellN - 1]);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
39
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
40 self->jmp_blockN = 0; /* FIXME: Should this be different? */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
41 self->jmp_vobu_start = cell->first_sector;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
42 self->jumping = 1;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
43 self->still_frame = -1;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
44 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
45
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
46 dvdnav_status_t dvdnav_still_skip(dvdnav_t *self) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
47 if(!self)
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
48 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
49
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
50 self->still_frame = -1;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
51
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
52 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
53 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
54
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
55 dvdnav_status_t dvdnav_get_number_of_titles(dvdnav_t *self, int *titles) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
56 if(!self)
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
57 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
58
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
59 if(!titles) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
60 printerr("Passed a NULL pointer");
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
61 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
62 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
63
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
64 (*titles) = vm_get_vmgi(self->vm)->tt_srpt->nr_of_srpts;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
65
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
66 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
67 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
68
5
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
69 dvdnav_status_t dvdnav_get_number_of_programs(dvdnav_t *self, int *programs) {
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
70 if(!self)
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
71 return S_ERR;
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
72
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
73 if(!programs) {
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
74 printerr("Passed a NULL pointer");
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
75 return S_ERR;
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
76 }
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
77
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
78 (*programs) = self->vm->state.pgc->nr_of_programs;
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
79
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
80 return S_OK;
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
81 }
c1b55dc1bfed Add API call to get number of programmes in current title.
richwareham
parents: 0
diff changeset
82
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
83 dvdnav_status_t dvdnav_title_play(dvdnav_t *self, int title) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
84 int num_titles;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
85
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
86 if(!self) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
87 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
88 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
89
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
90 /* Check number of titles */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
91 dvdnav_get_number_of_titles(self, &num_titles);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
92 if((title > num_titles) || (title <= 0)) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
93 printerrf("Invalid title passed (%i, maximum %i)", title,
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
94 num_titles);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
95 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
96 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
97
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
98 vm_start_title(self->vm, title);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
99
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
100 /* self->expecting_nav_packet = 1; */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
101
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
102 dvdnav_do_post_jump(self);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
103
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
104 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
105 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
106
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
107 dvdnav_status_t dvdnav_part_play(dvdnav_t *self, int title, int part) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
108 int num_titles, num_progs;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
109
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
110 if(!self) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
111 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
112 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
113
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
114 /* Check number of titles */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
115 dvdnav_get_number_of_titles(self, &num_titles);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
116 if((title > num_titles) || (title <= 0)) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
117 printerrf("Invalid title passed (%i, maximum %i)", title,
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
118 num_titles);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
119 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
120 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
121
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
122 vm_start_title(self->vm, title);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
123
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
124
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
125 /* Check number of parts */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
126 num_progs = self->vm->state.pgc->nr_of_programs;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
127 if((part > num_progs) || (part <= 0)) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
128 printerrf("Invalid program passed (%i, maximum %i)", part,
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
129 num_progs);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
130 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
131 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
132
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
133 vm_jump_prog(self->vm, part);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
134
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
135 /* self->expecting_nav_packet = 1; */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
136
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
137 dvdnav_do_post_jump(self);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
138
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
139 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
140 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
141
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
142 dvdnav_status_t dvdnav_part_play_auto_stop(dvdnav_t *self, int title,
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
143 int part, int parts_to_play) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
144 /* Perform jump as per usual */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
145
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
146 return dvdnav_part_play(self, title, part);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
147
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
148 /* FIXME: Impement auto-stop */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
149
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
150 /* return S_OK;*/
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
151 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
152
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
153 dvdnav_status_t dvdnav_time_play(dvdnav_t *self, int title,
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
154 unsigned long int time) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
155 /* FIXME: Implement */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
156
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
157 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
158 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
159
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
160 dvdnav_status_t dvdnav_stop(dvdnav_t *self) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
161 if(!self)
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
162 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
163
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
164 /* Set the STOP flag */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
165
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
166 self->stop = 1;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
167
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
168 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
169 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
170
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
171 dvdnav_status_t dvdnav_go_up(dvdnav_t *self) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
172 if(!self)
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
173 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
174
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
175 /* A nice easy function... delegate to the VM */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
176 vm_go_up(self->vm);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
177
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
178 dvdnav_do_post_jump(self);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
179
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
180 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
181 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
182
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
183
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
184