]> git.sesse.net Git - vlc/blobdiff - modules/access/cdda/info.c
Backport 13132
[vlc] / modules / access / cdda / info.c
index b2240116b1b5bf9fa2b1924914cc01078556bdaa..9d6138a660d9dd3e5d9b4ce0202a55528d101ad5 100644 (file)
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * info.c : CD digital audio input information routines
  *****************************************************************************
- * Copyright (C) 2004 VideoLAN
+ * Copyright (C) 2004, 2005 the VideoLAN team
  * $Id: info.c 8845 2004-09-29 09:00:41Z rocky $
  *
  * Authors: Rocky Bernstein <rocky@panix.com>
@@ -116,13 +116,14 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
     {
         track_t i_track =  p_cdda->i_first_track + i;
         cddb_track_t *t = cddb_track_new();
-        t->frame_offset = cdio_get_track_lba(p_cdio, i_track);
+       cddb_track_set_frame_offset(t, 
+                                   cdio_get_track_lba(p_cdio, i_track));
         cddb_disc_add_track(p_cdda->cddb.disc, t);
     }
 
-    p_cdda->cddb.disc->length =
-        cdio_get_track_lba(p_cdio, CDIO_CDROM_LEADOUT_TRACK)
-        / CDIO_CD_FRAMES_PER_SEC;
+    cddb_disc_set_length(p_cdda->cddb.disc,
+                        cdio_get_track_lba(p_cdio, CDIO_CDROM_LEADOUT_TRACK)
+                        / CDIO_CD_FRAMES_PER_SEC);
 
     if (!cddb_disc_calc_discid(p_cdda->cddb.disc))
     {
@@ -230,6 +231,9 @@ CDDAMetaInfoInit( access_t *p_access )
     
     if ( ! p_cdda ) return;
 
+    dbg_print( (INPUT_DBG_CALL), "p_cdda->i_tracks %d", 
+              p_cdda->i_tracks );
+
     p_cdda->psz_mcn = cdio_get_mcn(p_cdda->p_cdio);
     p_cdda->p_meta = vlc_meta_New();
 
@@ -269,6 +273,8 @@ CDDAMetaInfo( access_t *p_access, track_t i_track )
     
     if ( ! p_cdda ) return;
 
+    dbg_print( (INPUT_DBG_CALL), "i_track %d", i_track );
+
 #ifdef HAVE_LIBCDDB
 
     /* Set up for Meta and name for CDDB access. */
@@ -894,6 +900,9 @@ int CDDAAddMetaToItem( access_t *p_access, cdda_data_t *p_cdda,
     return VLC_SUCCESS;
 }
 
+/* 
+   Fixes up playlist. 
+*/
 int
 CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda, 
                    vlc_bool_t b_single_track )
@@ -937,6 +946,7 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
     CDDAMetaInfo( p_access, p_cdda->i_track );
 
     if (p_playlist) {
+
       p_item = playlist_LockItemGetByInput( p_playlist,
                         ((input_thread_t *)p_access->p_parent)->input.p_item );
 
@@ -950,22 +960,20 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
        }
     }
 
-    if( b_single_track )
+    if( b_single_track && !p_cdda->b_nav_mode )
     {
         /*May fill out more information when the playlist user interface becomes
            more mature.
          */
         track_t i_track = p_cdda->i_track;
        unsigned int i_track_frames = 
-         cdio_get_track_lsn(p_cdda->p_cdio, i_track+1) - 
-         cdio_get_track_lsn(p_cdda->p_cdio, i_track);
+         cdio_get_track_sec_count(p_cdda->p_cdio, i_track);
        
         input_title_t *t = p_cdda->p_title[0] = //i_track-i_first_track] =
         vlc_input_title_New();
 
         asprintf( &t->psz_name, _("Track %i"), i_track );
-        t->i_size = p_access->info.i_size = 
-         i_track_frames * (int64_t) CDIO_CD_FRAMESIZE_RAW;
+        t->i_size = i_track_frames * (int64_t) CDIO_CD_FRAMESIZE_RAW;
 
         t->i_length = I64C(1000000) * t->i_size / CDDA_FREQUENCY_SAMPLE / 4;
 
@@ -979,16 +987,13 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
        }
        
         p_cdda->i_titles = 1;
-        p_access->info.i_size =
-         i_track_frames * (int64_t) CDIO_CD_FRAMESIZE_RAW;
-       p_access->info.i_update |= INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE;
+       p_access->info.i_update = INPUT_UPDATE_TITLE;
     }
     else
     {
        input_title_t *t;
 
-
-       if ( ! p_cdda->b_nav_mode )
+       if ( !p_cdda->b_nav_mode )
          playlist_ItemToNode( p_playlist, p_item );
 
         for( i = 0 ; i < p_cdda->i_tracks ; i++ )
@@ -996,8 +1001,7 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
             playlist_item_t *p_child;
             const track_t i_track = i_first_track + i;
            unsigned int i_track_frames = 
-             cdio_get_track_lsn(p_cdda->p_cdio, i_track+1) - 
-             cdio_get_track_lsn(p_cdda->p_cdio, i_track);
+             cdio_get_track_sec_count(p_cdda->p_cdio, i_track);
 
             t = p_cdda->p_title[i] = vlc_input_title_New();
 
@@ -1017,9 +1021,6 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
         }
 
         p_cdda->i_titles = p_cdda->i_tracks;
-        p_access->info.i_size = 
-         cdio_get_track_lba(p_cdda->p_cdio, CDIO_CDROM_LEADOUT_TRACK)
-         * (int64_t) CDIO_CD_FRAMESIZE_RAW;
        p_access->info.i_update |= INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE;
        if (p_item) {
            p_item->input.i_duration = 
@@ -1035,9 +1036,9 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
         playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
                           p_playlist->status.i_view,
                           p_playlist->status.p_item, NULL );
-       vlc_object_release( p_playlist );
     }
 
+    if (p_playlist) vlc_object_release( p_playlist );
     return VLC_SUCCESS;
 }