[vlc-commits] vcd: switch to ACCESS_GET_(TITLE|SEEKPOINT)

Rémi Denis-Courmont git at videolan.org
Mon Aug 26 21:47:58 CEST 2013


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon Aug 26 21:24:49 2013 +0300| [3e5a8ba4caf989fed3c4b32646884f9ede5ff3f6] | committer: Rémi Denis-Courmont

vcd: switch to ACCESS_GET_(TITLE|SEEKPOINT)

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3e5a8ba4caf989fed3c4b32646884f9ede5ff3f6
---

 modules/access/vcd/vcd.c |   80 ++++++++++++++++++++++++----------------------
 1 file changed, 42 insertions(+), 38 deletions(-)

diff --git a/modules/access/vcd/vcd.c b/modules/access/vcd/vcd.c
index 737643f..ea2675f 100644
--- a/modules/access/vcd/vcd.c
+++ b/modules/access/vcd/vcd.c
@@ -70,6 +70,8 @@ struct access_sys_t
     /* Title infos */
     int           i_titles;
     input_title_t *title[99];            /* No more that 99 track in a vcd ? */
+    int         i_current_title;
+    int         i_current_seekpoint;
 
     int         i_sector;                                  /* Current Sector */
     int         *p_sectors;                                 /* Track sectors */
@@ -196,8 +198,8 @@ static int Open( vlc_object_t *p_this )
 
     p_access->info.b_eof       = false;
 
-    p_access->info.i_title     = i_title;
-    p_access->info.i_seekpoint = i_chapter;
+    p_sys->i_current_title = i_title;
+    p_sys->i_current_seekpoint = i_chapter;
     p_access->info.i_pos       = (uint64_t)( p_sys->i_sector - p_sys->p_sectors[1+i_title] ) *
                                  VCD_DATA_SIZE;
 
@@ -231,7 +233,6 @@ static int Control( access_t *p_access, int i_query, va_list args )
 {
     access_sys_t *p_sys = p_access->p_sys;
     input_title_t ***ppp_title;
-    int i;
 
     switch( i_query )
     {
@@ -245,7 +246,7 @@ static int Control( access_t *p_access, int i_query, va_list args )
 
         case ACCESS_GET_SIZE:
             *va_arg( args, uint64_t * ) =
-                p_sys->title[p_access->info.i_title]->i_size;
+                p_sys->title[p_sys->i_current_title]->i_size;
             break;
 
         /* */
@@ -264,42 +265,49 @@ static int Control( access_t *p_access, int i_query, va_list args )
 
             /* Duplicate title infos */
             *ppp_title = malloc( sizeof(input_title_t **) * p_sys->i_titles );
-            for( i = 0; i < p_sys->i_titles; i++ )
-            {
+            for( int i = 0; i < p_sys->i_titles; i++ )
                 (*ppp_title)[i] = vlc_input_title_Duplicate( p_sys->title[i] );
-            }
+            break;
+
+        case ACCESS_GET_TITLE:
+            *va_arg( args, unsigned * ) = p_sys->i_current_title;
+            break;
+
+        case ACCESS_GET_SEEKPOINT:
+            *va_arg( args, unsigned * ) = p_sys->i_current_seekpoint;
             break;
 
         case ACCESS_SET_TITLE:
-            i = va_arg( args, int );
-            if( i != p_access->info.i_title )
+        {
+            int i = va_arg( args, int );
+            if( i != p_sys->i_current_title )
             {
                 /* Update info */
-                p_access->info.i_update |=
-                                     INPUT_UPDATE_TITLE|INPUT_UPDATE_SEEKPOINT;
-                p_access->info.i_title = i;
-                p_access->info.i_seekpoint = 0;
-                p_access->info.i_pos  = 0;
+                p_sys->i_current_title = i;
+                p_sys->i_current_seekpoint = 0;
+                p_access->info.i_pos = 0;
 
                 /* Next sector to read */
                 p_sys->i_sector = p_sys->p_sectors[1+i];
             }
             break;
+        }
 
         case ACCESS_SET_SEEKPOINT:
         {
-            input_title_t *t = p_sys->title[p_access->info.i_title];
-            i = va_arg( args, int );
+            int i = va_arg( args, int );
+            unsigned i_title = p_sys->i_current_title;
+            input_title_t *t = p_sys->title[i_title];
+
             if( t->i_seekpoint > 0 )
             {
-                p_access->info.i_update |= INPUT_UPDATE_SEEKPOINT;
-                p_access->info.i_seekpoint = i;
+                p_sys->i_current_seekpoint = i;
 
-                p_sys->i_sector = p_sys->p_sectors[1+p_access->info.i_title] +
+                p_sys->i_sector = p_sys->p_sectors[1 + i_title] +
                     t->seekpoint[i]->i_byte_offset / VCD_DATA_SIZE;
 
                 p_access->info.i_pos = (uint64_t)(p_sys->i_sector -
-                    p_sys->p_sectors[1+p_access->info.i_title]) *VCD_DATA_SIZE;
+                    p_sys->p_sectors[1 + i_title]) *VCD_DATA_SIZE;
             }
             break;
         }
@@ -323,26 +331,24 @@ static block_t *Block( access_t *p_access )
     if( p_access->info.b_eof ) return NULL;
 
     /* Check end of title */
-    while( p_sys->i_sector >= p_sys->p_sectors[p_access->info.i_title + 2] )
+    while( p_sys->i_sector >= p_sys->p_sectors[p_sys->i_current_title + 2] )
     {
-        if( p_access->info.i_title + 2 >= p_sys->i_titles )
+        if( p_sys->i_current_title + 2 >= p_sys->i_titles )
         {
             p_access->info.b_eof = true;
             return NULL;
         }
 
-        p_access->info.i_update |=
-                                   INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
-        p_access->info.i_title++;
-        p_access->info.i_seekpoint = 0;
+        p_sys->i_current_title++;
+        p_sys->i_current_seekpoint = 0;
         p_access->info.i_pos = 0;
     }
 
     /* Don't read after the end of a title */
     if( p_sys->i_sector + i_blocks >=
-        p_sys->p_sectors[p_access->info.i_title + 2] )
+        p_sys->p_sectors[p_sys->i_current_title + 2] )
     {
-        i_blocks = p_sys->p_sectors[p_access->info.i_title + 2 ] - p_sys->i_sector;
+        i_blocks = p_sys->p_sectors[p_sys->i_current_title + 2 ] - p_sys->i_sector;
     }
 
     /* Do the actual reading */
@@ -368,17 +374,16 @@ static block_t *Block( access_t *p_access )
     /* Update seekpoints */
     for( int i_read = 0; i_read < i_blocks; i_read++ )
     {
-        input_title_t *t = p_sys->title[p_access->info.i_title];
+        input_title_t *t = p_sys->title[p_sys->i_current_title];
 
         if( t->i_seekpoint > 0 &&
-            p_access->info.i_seekpoint + 1 < t->i_seekpoint &&
+            p_sys->i_current_seekpoint + 1 < t->i_seekpoint &&
             (int64_t) /* Unlikely to go over 8192 PetaB */
                 (p_access->info.i_pos + i_read * VCD_DATA_SIZE) >=
-            t->seekpoint[p_access->info.i_seekpoint+1]->i_byte_offset )
+            t->seekpoint[p_sys->i_current_seekpoint + 1]->i_byte_offset )
         {
             msg_Dbg( p_access, "seekpoint change" );
-            p_access->info.i_update |= INPUT_UPDATE_SEEKPOINT;
-            p_access->info.i_seekpoint++;
+            p_sys->i_current_seekpoint++;
         }
     }
 
@@ -395,13 +400,13 @@ static block_t *Block( access_t *p_access )
 static int Seek( access_t *p_access, uint64_t i_pos )
 {
     access_sys_t *p_sys = p_access->p_sys;
-    input_title_t *t = p_sys->title[p_access->info.i_title];
+    input_title_t *t = p_sys->title[p_sys->i_current_title];
     int i_seekpoint;
 
     /* Next sector to read */
     p_access->info.i_pos = i_pos;
     p_sys->i_sector = i_pos / VCD_DATA_SIZE +
-        p_sys->p_sectors[p_access->info.i_title + 1];
+        p_sys->p_sectors[p_sys->i_current_title + 1];
 
     /* Update current seekpoint */
     for( i_seekpoint = 0; i_seekpoint < t->i_seekpoint; i_seekpoint++ )
@@ -411,11 +416,10 @@ static int Seek( access_t *p_access, uint64_t i_pos )
             i_pos < (uint64_t)t->seekpoint[i_seekpoint + 1]->i_byte_offset ) break;
     }
 
-    if( i_seekpoint != p_access->info.i_seekpoint )
+    if( i_seekpoint != p_sys->i_current_seekpoint )
     {
         msg_Dbg( p_access, "seekpoint change" );
-        p_access->info.i_update |= INPUT_UPDATE_SEEKPOINT;
-        p_access->info.i_seekpoint = i_seekpoint;
+        p_sys->i_current_seekpoint = i_seekpoint;
     }
 
     /* Reset eof */



More information about the vlc-commits mailing list