summaryrefslogtreecommitdiffstats
path: root/libhb/dvd.c
diff options
context:
space:
mode:
Diffstat (limited to 'libhb/dvd.c')
-rw-r--r--libhb/dvd.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/libhb/dvd.c b/libhb/dvd.c
index 3888f41db..54b5e5e92 100644
--- a/libhb/dvd.c
+++ b/libhb/dvd.c
@@ -536,26 +536,34 @@ void hb_dvd_stop( hb_dvd_t * d )
**********************************************************************/
int hb_dvd_seek( hb_dvd_t * d, float f )
{
- int target;
+ int count, sizeCell;
+ int i;
- target = d->title_start + (int) ( f * d->title_block_count );
+ count = f * d->title_block_count;
- /* Find the cell we shall start in */
- d->cell_cur = d->cell_start;
- FindNextCell( d );
- for( ;; )
+ for( i = d->cell_start; i <= d->cell_end; i++ )
{
- if( target < d->pgc->cell_playback[d->cell_cur].last_sector )
+ sizeCell = d->pgc->cell_playback[i].last_sector + 1 -
+ d->pgc->cell_playback[i].first_sector;
+
+ if( count < sizeCell )
{
+ d->cell_cur = i;
+ FindNextCell( d );
+
+ /* Now let hb_dvd_read find the next VOBU */
+ d->next_vobu = d->pgc->cell_playback[i].first_sector + count;
+ d->pack_len = 0;
break;
}
- d->cell_cur = d->cell_next;
- FindNextCell( d );
+
+ count -= sizeCell;
}
- /* Now let hb_dvd_read find the next VOBU */
- d->next_vobu = target;
- d->pack_len = 0;
+ if( i > d->cell_end )
+ {
+ return 0;
+ }
return 1;
}