Mercurial > libdvdnav.hg
comparison searching.c @ 90:eeabf5a51b2b src
Improve chapter selection functions.
author | jcdutton |
---|---|
date | Tue, 03 Sep 2002 07:50:45 +0000 |
parents | 0fbef4901e2c |
children | 3e6970dbe8d6 |
comparison
equal
deleted
inserted
replaced
89:0fbef4901e2c | 90:eeabf5a51b2b |
---|---|
226 return S_ERR; | 226 return S_ERR; |
227 | 227 |
228 return S_OK; | 228 return S_OK; |
229 } | 229 } |
230 | 230 |
231 dvdnav_status_t dvdnav_prev_part_search(dvdnav_t *this) { | |
232 | |
233 if((!this) || (!this->vm) ) | |
234 return S_ERR; | |
235 | |
236 vm_prev_part(this->vm); | |
237 /* FIXME: handle errors */ | |
238 return S_OK; | |
239 } | |
240 | |
241 dvdnav_status_t dvdnav_next_part_search(dvdnav_t *this) { | |
242 if((!this) || (!this->vm) ) | |
243 return S_ERR; | |
244 | |
245 vm_next_part(this->vm); | |
246 /* FIXME: handle errors */ | |
247 return S_OK; | |
248 } | |
249 | |
250 dvdnav_status_t dvdnav_prev_pg_search(dvdnav_t *this) { | 231 dvdnav_status_t dvdnav_prev_pg_search(dvdnav_t *this) { |
251 dvd_state_t *state; | 232 dvd_state_t *state; |
252 | 233 |
253 if((!this) || (!this->vm) ) | 234 if((!this) || (!this->vm) ) |
254 return S_ERR; | 235 return S_ERR; |
312 pthread_mutex_lock(&this->vm_lock); | 293 pthread_mutex_lock(&this->vm_lock); |
313 state = &(this->vm->state); | 294 state = &(this->vm->state); |
314 if (vm_menu_call(this->vm, menu, 0)) | 295 if (vm_menu_call(this->vm, menu, 0)) |
315 this->vm->hop_channel++; | 296 this->vm->hop_channel++; |
316 pthread_mutex_unlock(&this->vm_lock); | 297 pthread_mutex_unlock(&this->vm_lock); |
317 return S_OK; | |
318 } | |
319 | |
320 dvdnav_status_t dvdnav_current_title_info(dvdnav_t *this, int *tt, int *pr) { | |
321 int vts_ttn = 0; | |
322 int vts, i; | |
323 domain_t domain; | |
324 tt_srpt_t* srpt; | |
325 | |
326 if(!this) | |
327 return S_ERR; | |
328 | |
329 if(!tt || !pr) { | |
330 printerr("Passed a NULL pointer"); | |
331 } | |
332 | |
333 if(tt) | |
334 *tt = -1; | |
335 if(*pr) | |
336 *pr = -1; | |
337 | |
338 domain = this->vm->state.domain; | |
339 if((domain == FP_DOMAIN) || (domain == VMGM_DOMAIN)) { | |
340 /* Not in a title */ | |
341 return S_OK; | |
342 } | |
343 | |
344 vts_ttn = this->vm->state.VTS_TTN_REG; | |
345 vts = this->vm->state.vtsN; | |
346 | |
347 /* FIXME: pr should be found by searching the VTS_SRPT table. Not just the pgN */ | |
348 if(pr) { | |
349 *pr = this->vm->state.pgN; | |
350 } | |
351 | |
352 /* Search TT_SRPT for title */ | |
353 if(!(vm_get_vmgi(this->vm))) { | |
354 printerr("Oh poo, no SRPT"); | |
355 return S_ERR; | |
356 } | |
357 | |
358 srpt = vm_get_vmgi(this->vm)->tt_srpt; | |
359 for(i=0; i<srpt->nr_of_srpts; i++) { | |
360 title_info_t* info = &(srpt->title[i]); | |
361 if((info->title_set_nr == vts) && (info->vts_ttn == vts_ttn)) { | |
362 if(tt) | |
363 *tt = i+1; | |
364 } | |
365 } | |
366 | |
367 return S_OK; | 298 return S_OK; |
368 } | 299 } |
369 | 300 |
370 static char __title_str[] = "DVDNAV"; | 301 static char __title_str[] = "DVDNAV"; |
371 | 302 |