Mercurial > libdvdnav.hg
comparison vm.c @ 135:5204d4e4cd3b src
I should get a brain and learn how to handle BCD...
also fixing a possible mis-jump with angled cells
author | mroi |
---|---|
date | Wed, 26 Mar 2003 14:37:23 +0000 |
parents | d09a81cf65ce |
children | 5897ff629f7c |
comparison
equal
deleted
inserted
replaced
134:d9d75a22a061 | 135:5204d4e4cd3b |
---|---|
442 ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].last_sector - | 442 ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].last_sector - |
443 (vm->state).pgc->cell_playback[(vm->state).cellN - 1].first_sector < 1024)) { | 443 (vm->state).pgc->cell_playback[(vm->state).cellN - 1].first_sector < 1024)) { |
444 int time; | 444 int time; |
445 int size = (vm->state).pgc->cell_playback[(vm->state).cellN - 1].last_sector - | 445 int size = (vm->state).pgc->cell_playback[(vm->state).cellN - 1].last_sector - |
446 (vm->state).pgc->cell_playback[(vm->state).cellN - 1].first_sector; | 446 (vm->state).pgc->cell_playback[(vm->state).cellN - 1].first_sector; |
447 time = ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.hour & 0xf0) * 36000; | 447 time = ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.hour >> 4 ) * 36000; |
448 time += ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.hour & 0x0f) * 3600; | 448 time += ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.hour & 0x0f) * 3600; |
449 time += ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.minute & 0xf0) * 600; | 449 time += ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.minute >> 4 ) * 600; |
450 time += ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.minute & 0x0f) * 60; | 450 time += ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.minute & 0x0f) * 60; |
451 time += ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.second & 0xf0) * 10; | 451 time += ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.second >> 4 ) * 10; |
452 time += ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.second & 0x0f) * 1; | 452 time += ((vm->state).pgc->cell_playback[(vm->state).cellN - 1].playback_time.second & 0x0f) * 1; |
453 if (size / time > 30) | 453 if (size / time > 30) |
454 /* datarate is too high, it might be a very short, but regular cell */ | 454 /* datarate is too high, it might be a very short, but regular cell */ |
455 return; | 455 return; |
456 if (time > 0xff) time = 0xff; | 456 if (time > 0xff) time = 0xff; |
472 } | 472 } |
473 | 473 |
474 int vm_jump_cell_block(vm_t *vm, int cell, int block) { | 474 int vm_jump_cell_block(vm_t *vm, int cell, int block) { |
475 (vm->state).cellN = cell; | 475 (vm->state).cellN = cell; |
476 process_command(vm, play_Cell(vm)); | 476 process_command(vm, play_Cell(vm)); |
477 (vm->state).blockN = block; | 477 /* play_Cell can jump to a different cell in case of angles */ |
478 if ((vm->state).cellN == cell) | |
479 (vm->state).blockN = block; | |
478 return 1; | 480 return 1; |
479 } | 481 } |
480 | 482 |
481 int vm_jump_title_part(vm_t *vm, int title, int part) { | 483 int vm_jump_title_part(vm_t *vm, int title, int part) { |
482 int vtsN; | 484 int vtsN; |
1803 #endif | 1805 #endif |
1804 | 1806 |
1805 | 1807 |
1806 /* | 1808 /* |
1807 * $Log$ | 1809 * $Log$ |
1810 * Revision 1.48 2003/03/26 14:37:23 mroi | |
1811 * I should get a brain and learn how to handle BCD... | |
1812 * also fixing a possible mis-jump with angled cells | |
1813 * | |
1808 * Revision 1.47 2003/03/24 16:42:59 mroi | 1814 * Revision 1.47 2003/03/24 16:42:59 mroi |
1809 * determine correct PG and PTT numbers when seeking across PG boundaries | 1815 * determine correct PG and PTT numbers when seeking across PG boundaries |
1810 * | 1816 * |
1811 * Revision 1.46 2003/03/15 20:21:44 mroi | 1817 * Revision 1.46 2003/03/15 20:21:44 mroi |
1812 * - do not rely on 1:1 mappings between PTTs and PGs | 1818 * - do not rely on 1:1 mappings between PTTs and PGs |