comparison vm.c @ 88:929f732a0135 src

Implement proper prev/next chapter/part. I don't know why someone has not noticed the problem until now.
author jcdutton
date Mon, 02 Sep 2002 03:20:01 +0000
parents b1cbe3464fb9
children eeabf5a51b2b
comparison
equal deleted inserted replaced
87:b1cbe3464fb9 88:929f732a0135
436 /* return 0; */ 436 /* return 0; */
437 } 437 }
438 return vm_top_pg(vm); 438 return vm_top_pg(vm);
439 } 439 }
440 440
441 int vm_prev_part(vm_t *vm)
442 {
443 link_t link_values;
444 vts_ptt_srpt_t *vts_ptt_srpt;
445 int title, part=0;
446 int found = 0;
447 int16_t pgcN, pgN;
448
449 if((!vm) || (!vm->vtsi) )
450 return S_ERR;
451
452 if(!(vm->state.pgc) )
453 return S_ERR;
454 if (vm->state.domain != VTS_DOMAIN)
455 return S_ERR;
456 vts_ptt_srpt = vm->vtsi->vts_ptt_srpt;
457 pgcN = get_PGCN(vm);
458 pgN = vm->state.pgN;
459 printf("VTS_PTT_SRPT - PGC: %3i PG: %3i\n",
460 pgcN, pgN);
461 for(title=0;( (title<vts_ptt_srpt->nr_of_srpts) && (found == 0) );title++) {
462 for(part=0;((part < vts_ptt_srpt->title[title].nr_of_ptts) && (found == 0));part++) {
463 if ( (vts_ptt_srpt->title[title].ptt[part].pgcn == pgcN) &&
464 (vts_ptt_srpt->title[title].ptt[part].pgn == pgN ) ) {
465 found = 1;
466 break;
467 }
468 }
469 if (found != 0) break;
470 }
471 title++;
472 part++;
473 if (found == 1) {
474 fprintf(MSG_OUT, "libdvdnav: ************ this chapter FOUND!\n");
475 printf("VTS_PTT_SRPT - Title %3i part %3i: PGC: %3i PG: %3i\n",
476 title, part,
477 vts_ptt_srpt->title[title-1].ptt[part-1].pgcn ,
478 vts_ptt_srpt->title[title-1].ptt[part-1].pgn );
479 } else {
480 fprintf(MSG_OUT, "libdvdnav: ************ this chapter NOT FOUND!\n");
481 return S_ERR;
482 }
483 /* Make sure this is not the first chapter */
484 if(part <= 1 ) {
485 fprintf(MSG_OUT, "libdvdnav: at first chapter. prev chapter failed.\n");
486 return S_ERR;
487 }
488 part--; /* Previous chapter */
489 if(set_VTS_PTT(vm,(vm->state).vtsN, title, part) == -1)
490 assert(0);
491 link_values = play_PGC_PG( vm, (vm->state).pgN );
492 link_values = process_command(vm,link_values);
493 assert(link_values.command == PlayThis);
494 (vm->state).blockN = link_values.data1;
495 assert( (vm->state).blockN == 0 );
496 vm->hop_channel++;
497
498 fprintf(MSG_OUT, "libdvdnav: previous chapter done\n");
499
500 return 1;
501 }
502
503
504 int vm_next_part(vm_t *vm)
505 {
506 link_t link_values;
507 vts_ptt_srpt_t *vts_ptt_srpt;
508 int title, part=0;
509 int found = 0;
510 int16_t pgcN, pgN;
511
512 if((!vm) || (!vm->vtsi) )
513 return S_ERR;
514
515 if(!(vm->state.pgc) )
516 return S_ERR;
517 if (vm->state.domain != VTS_DOMAIN)
518 return S_ERR;
519 vts_ptt_srpt = vm->vtsi->vts_ptt_srpt;
520 pgcN = get_PGCN(vm);
521 pgN = vm->state.pgN;
522 printf("VTS_PTT_SRPT - PGC: %3i PG: %3i\n",
523 pgcN, pgN);
524 for(title=0;( (title<vts_ptt_srpt->nr_of_srpts) && (found == 0) );title++) {
525 for(part=0;((part < vts_ptt_srpt->title[title].nr_of_ptts) && (found == 0));part++) {
526 if ( (vts_ptt_srpt->title[title].ptt[part].pgcn == pgcN) &&
527 (vts_ptt_srpt->title[title].ptt[part].pgn == pgN ) ) {
528 found = 1;
529 break;
530 }
531 }
532 if (found != 0) break;
533 }
534 title++;
535 part++;
536 if (found == 1) {
537 fprintf(MSG_OUT, "libdvdnav: ************ this chapter FOUND!\n");
538 printf("VTS_PTT_SRPT - Title %3i part %3i: PGC: %3i PG: %3i\n",
539 title, part,
540 vts_ptt_srpt->title[title-1].ptt[part-1].pgcn ,
541 vts_ptt_srpt->title[title-1].ptt[part-1].pgn );
542 } else {
543 fprintf(MSG_OUT, "libdvdnav: ************ this chapter NOT FOUND!\n");
544 }
545 /* Make sure this is not the last chapter */
546 if(part >= vts_ptt_srpt->title[title-1].nr_of_ptts) {
547 fprintf(MSG_OUT, "libdvdnav: at last chapter. next chapter failed.\n");
548 return S_ERR;
549 }
550 part++; /* Next chapter */
551 if(set_VTS_PTT(vm,(vm->state).vtsN, title, part) == -1)
552 assert(0);
553 link_values = play_PGC_PG( vm, (vm->state).pgN );
554 link_values = process_command(vm,link_values);
555 assert(link_values.command == PlayThis);
556 (vm->state).blockN = link_values.data1;
557 assert( (vm->state).blockN == 0 );
558 vm->hop_channel++;
559
560 fprintf(MSG_OUT, "libdvdnav: next chapter done\n");
561
562 return 1;
563 }
441 564
442 static domain_t menuid2domain(DVDMenuID_t menuid) 565 static domain_t menuid2domain(DVDMenuID_t menuid)
443 { 566 {
444 domain_t result = VTSM_DOMAIN; /* Really shouldn't have to.. */ 567 domain_t result = VTSM_DOMAIN; /* Really shouldn't have to.. */
445 568
1832 return pgcit; 1955 return pgcit;
1833 } 1956 }
1834 1957
1835 /* 1958 /*
1836 * $Log$ 1959 * $Log$
1960 * Revision 1.33 2002/09/02 03:20:01 jcdutton
1961 * Implement proper prev/next chapter/part.
1962 * I don't know why someone has not noticed the problem until now.
1963 *
1837 * Revision 1.32 2002/09/02 00:27:14 jcdutton 1964 * Revision 1.32 2002/09/02 00:27:14 jcdutton
1838 * Fix bug in JumpVTS_PTT command. 1965 * Fix bug in JumpVTS_PTT command.
1839 * 1966 *
1840 * Revision 1.31 2002/09/01 10:57:15 jcdutton 1967 * Revision 1.31 2002/09/01 10:57:15 jcdutton
1841 * Add a bit more debug info. Now print PGCN in debug. 1968 * Add a bit more debug info. Now print PGCN in debug.