]> git.sesse.net Git - vlc/commitdiff
access.c: LID and Segment for non PBC (the default) needs more work.
authorRocky Bernstein <rocky@videolan.org>
Sat, 23 Jul 2005 11:25:49 +0000 (11:25 +0000)
committerRocky Bernstein <rocky@videolan.org>
Sat, 23 Jul 2005 11:25:49 +0000 (11:25 +0000)
Check for them and disable (somewhat).

vcdplayer.c: check for invalid LSN in setting origin.

modules/access/vcdx/access.c
modules/access/vcdx/vcdplayer.c

index 1af0df9e51601971bfea4ccb0aea86f7f1e87c59..cb1ac4ce9dc68a2ebef462af3288e92367688e55 100644 (file)
@@ -1140,11 +1140,26 @@ static int VCDControl( access_t *p_access, int i_query, va_list args )
                 unsigned int     i_entry =
                   vcdinfo_track_get_entry( p_vcdplayer->vcd, i_track);
 
-                /* FIXME! For now we are assuming titles are only
-                 tracks and that track == title+1 */
-                itemid.num = i_track;
-                itemid.type = VCDINFO_ITEM_TYPE_TRACK;
-
+               if( i < p_vcdplayer->i_tracks ) 
+               {
+                   /* FIXME! For now we are assuming titles are only
+                      tracks and that track == title+1 */
+                   itemid.num = i_track;
+                   itemid.type = VCDINFO_ITEM_TYPE_TRACK;
+               } 
+               else 
+               {
+                   /* FIXME! i_tracks+2 are Segments, but we need to 
+                      be able to figure out which segment of that.
+                       i_tracks+1 is either Segments (if no LIDs) or 
+                      LIDs otherwise. Again need a way to get the LID 
+                      number. */
+                   msg_Warn( p_access,
+                    "Trying to set track (%u) beyond end of last track (%u).",
+                             i+1, p_vcdplayer->i_tracks );
+                   return VLC_EGENERIC;
+               }
+               
                 VCDSetOrigin(p_access,
                      vcdinfo_get_entry_lsn(p_vcdplayer->vcd, i_entry),
                              i_track, &itemid );
index 8374f28ed66690bb1e76a5d0f8c939a2350e30ca..78bcdc64d0769e83adaa158752e47f1cdbb041e6 100644 (file)
@@ -326,7 +326,6 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid)
    changed: p_vcdplayer->origin_lsn, p_vcdplayer->end_lsn
 */
 
-/* FIXME: add parameters lsn, i_track, p_itemid and set accordingly. */
 void 
 vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track,
                     const vcdinfo_itemid_t *p_itemid)
@@ -334,6 +333,12 @@ vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track,
   vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
   const size_t i_size= vcdplayer_get_item_size(p_access, *p_itemid);
 
+  if( VCDINFO_NULL_LSN == i_lsn ) 
+  {
+      LOG_ERR("%s %d", "Invalid LSN for track", i_track);
+      return;
+  }
+
   p_vcdplayer->play_item.num  = p_itemid->num;
   p_vcdplayer->play_item.type = p_itemid->type;
   p_vcdplayer->i_lsn          = i_lsn;