]> git.sesse.net Git - vlc/commitdiff
fixed a segfault in vcd input (thank you Sam)
authorJohan Bilien <jobi@videolan.org>
Wed, 19 Dec 2001 03:56:56 +0000 (03:56 +0000)
committerJohan Bilien <jobi@videolan.org>
Wed, 19 Dec 2001 03:56:56 +0000 (03:56 +0000)
plugins/vcd/input_vcd.c
plugins/vcd/linux_cdrom_tools.c

index 179f8ed82ed76b4c5bc9f9d92fb95311ab3cc429..f57c12bd03a4681f66d08cd687ee7012eb19c727 100644 (file)
@@ -319,8 +319,8 @@ static void VCDInit( input_thread_t * p_input )
         area[i]->i_id = i;
 
         /* Absolute start offset and size */
-        area[i]->i_start = p_vcd->tracks_sector[i+1];
-        area[i]->i_size = p_vcd->tracks_sector[i+2] - p_vcd->tracks_sector[i+1];
+        area[i]->i_start = p_vcd->tracks_sector[i];
+        area[i]->i_size = p_vcd->tracks_sector[i+1] - p_vcd->tracks_sector[i];
 
         /* Number of chapters */
         area[i]->i_part_nb = 0;   // will be the entry points
@@ -330,7 +330,7 @@ static void VCDInit( input_thread_t * p_input )
         area[i]->i_angle_nb = 1; // no angle support in VCDs
         area[i]->i_angle = 1;
 
-        area[i]->i_plugin_data = p_vcd->tracks_sector[i+1];
+        area[i]->i_plugin_data = p_vcd->tracks_sector[i];
     }   
 #undef area
 
@@ -338,7 +338,7 @@ static void VCDInit( input_thread_t * p_input )
     i_title = main_GetIntVariable( INPUT_TITLE_VAR, 1 );
     if( i_title <= 0)
     {
-        i_title = 2;
+        i_title = 1;
     }
     
     // p_vcd->current_track = i_title-1 ;
@@ -434,14 +434,14 @@ static int VCDSetArea( input_thread_t * p_input, input_area_t * p_area )
     {
         /* Reset the Chapter position of the old title */
         p_input->stream.p_selected_area->i_part = 0;
+        p_input->stream.p_selected_area->i_tell = 0;
         
         /* Change the default area */
-        p_input->stream.p_selected_area =
-                    p_input->stream.pp_areas[p_area->i_id];
+        p_input->stream.p_selected_area = p_area;
 
         /* Change the current track */
         /* The first track is not a valid one  */
-        p_vcd->current_track = p_area->i_id + 1 ;
+        p_vcd->current_track = p_area->i_id ;
         p_vcd->current_sector = p_vcd->tracks_sector[p_vcd->current_track] ;
     }
     /* warn interface that something has changed */
@@ -616,9 +616,6 @@ static int VCDRead( input_thread_t * p_input,
     }
 
 
-
-
-
     
     vlc_mutex_lock( &p_input->stream.stream_lock );
 
@@ -635,8 +632,8 @@ static int VCDRead( input_thread_t * p_input,
     }*/
 
     
-    b_eof = p_vcd->b_end_of_track && 
-            ( ( p_vcd->current_track + 1 ) >= p_vcd->nb_tracks );
+    b_eof = p_vcd->b_end_of_track; 
+        /*FIXME&& ( ( p_vcd->current_track ) >= p_vcd->nb_tracks - 1);*/
 
     if( b_eof )
     {
@@ -647,9 +644,9 @@ static int VCDRead( input_thread_t * p_input,
     if( p_vcd->b_end_of_track )
     {
         intf_WarnMsg( 4, "vcd info: new title" );
-        p_vcd->current_track++;
         p_vcd->b_end_of_track = 0;
-        VCDSetArea( p_input, p_input->stream.pp_areas[p_vcd->current_track] );
+        VCDSetArea( p_input, p_input->stream.pp_areas[
+                     p_input->stream.p_selected_area->i_id + 1] );
         vlc_mutex_unlock( &p_input->stream.stream_lock );
         return 0;
     }
index 2286d52235932abbd88cd55ee1997a4f25610c17..e70c1325cce326ac0ece8c352815f24215ad8e22 100644 (file)
@@ -95,7 +95,7 @@ int read_toc ( thread_vcd_data_t * p_vcd )
     p_vcd->nb_tracks = tochdr.cdth_trk1;
     /* nb_tracks + 1 because we put the lead_out tracks for computing last
      track's size */
-    p_vcd->tracks_sector = malloc( (p_vcd->nb_tracks + 1
+    p_vcd->tracks_sector = malloc( ( p_vcd->nb_tracks + 1 
                                             * sizeof( int ) );
     if ( p_vcd->tracks_sector == NULL ) 
     {
@@ -105,18 +105,18 @@ int read_toc ( thread_vcd_data_t * p_vcd )
 
     /* then for each track we read its TOC entry */
 
-    for(i=tochdr.cdth_trk0 ;i<=tochdr.cdth_trk1;i++)
+    for( i=tochdr.cdth_trk0 ; i <= tochdr.cdth_trk1 ; i++ )
     {
-        tocent.cdte_track = i ;
-        tocent.cdte_format = CDROM_LBA ;
-        if (ioctl(fd, CDROMREADTOCENTRY, &tocent) == -1)
+        tocent.cdte_track = i;
+        tocent.cdte_format = CDROM_LBA;
+        if (ioctl( fd, CDROMREADTOCENTRY, &tocent) == -1 )
         {
-          intf_ErrMsg("problem occured when reading CD's TOCENTRY\n") ;
-          free (p_vcd->tracks_sector) ;
-          return -1 ;
+          intf_ErrMsg( "problem occured when reading CD's TOCENTRY\n" );
+          free ( p_vcd->tracks_sector );
+          return -1;
         }
     
-        p_vcd->tracks_sector[i] = tocent.cdte_addr.lba ;
+        p_vcd->tracks_sector[i-1] = tocent.cdte_addr.lba ;
 
     }
   
@@ -132,7 +132,7 @@ int read_toc ( thread_vcd_data_t * p_vcd )
         return -1 ;
     }
 
-    p_vcd->tracks_sector[p_vcd->nb_tracks + 1] = tocent.cdte_addr.lba ;
+    p_vcd->tracks_sector[p_vcd->nb_tracks] = tocent.cdte_addr.lba ;
   
     return 1 ;