diff stream/stream_dvd.c @ 31817:cb769a111f7a

dvd: Improve seeking by position. The current code takes the angle into account. This is a mistake since the position is independent of the angle. patch by Olivier Rolland, billl users.sourceforge net
author diego
date Sun, 01 Aug 2010 22:53:09 +0000
parents ab9824b6acc7
children c52e80f24086
line wrap: on
line diff
--- a/stream/stream_dvd.c	Sun Aug 01 22:51:15 2010 +0000
+++ b/stream/stream_dvd.c	Sun Aug 01 22:53:09 2010 +0000
@@ -380,24 +380,17 @@
      d->cur_pack<d->cur_pgc->cell_playback[ d->cur_cell ].first_sector) {
 
     // ok, cell change, find the right cell!
-    d->cur_cell=0;
-    if(d->cur_pgc->cell_playback[d->cur_cell].block_type == BLOCK_TYPE_ANGLE_BLOCK )
-      d->cur_cell+=dvd_angle;
-
-    while(1) {
-      int next;
-      d->cell_last_pack=d->cur_pgc->cell_playback[ d->cur_cell ].last_sector;
-      if(d->cur_pack<d->cur_pgc->cell_playback[ d->cur_cell ].first_sector) {
-        d->cur_pack=d->cur_pgc->cell_playback[ d->cur_cell ].first_sector;
+    cell_playback_t *cell;
+    for(d->cur_cell=0; d->cur_cell < d->cur_pgc->nr_of_cells; d->cur_cell++) {
+      cell = &(d->cur_pgc->cell_playback[d->cur_cell]);
+      if(cell->block_type == BLOCK_TYPE_ANGLE_BLOCK && cell->block_mode != BLOCK_MODE_FIRST_CELL)
+        continue;
+      d->cell_last_pack=cell->last_sector;
+      if(d->cur_pack<cell->first_sector) {
+        d->cur_pack=cell->first_sector;
         break;
       }
       if(d->cur_pack<=d->cell_last_pack) break; // ok, we find it! :)
-      next=dvd_next_cell(d);
-      if(next<0) {
-        //d->cur_pack=d->cell_last_pack+1;
-        break; // we're after the last cell
-      }
-      d->cur_cell=next;
     }
   }