]> git.sesse.net Git - vlc/blobdiff - modules/access/cdda/info.c
Use pl_Locked and pl_Unlocked.
[vlc] / modules / access / cdda / info.c
index fb8beb093db06b3783d0e660274bc898c33500c2..19d0dd0de893973752164c84e6bd07aa1d5055cb 100644 (file)
@@ -26,6 +26,8 @@
  *****************************************************************************/
 #include "callback.h"      /* FIXME - reorganize callback.h, cdda.h better */
 #include "cdda.h"          /* private structures. Also #includes vlc things */
+
+#warning playlist code must not be used here.
 #include <vlc_playlist.h>  /* Has to come *after* cdda.h */
 
 #include <cdio/cdio.h>
@@ -229,7 +231,7 @@ void
 CDDAMetaInfoInit( access_t *p_access )
 {
     cdda_data_t *p_cdda   = (cdda_data_t *) p_access->p_sys;
+
     if ( ! p_cdda ) return;
 
     dbg_print( (INPUT_DBG_CALL), "p_cdda->i_tracks %d",
@@ -252,11 +254,11 @@ CDDAMetaInfoInit( access_t *p_access )
     {
         track_t i_track;
 
-    for( i_track = 0 ; i_track < p_cdda->i_tracks ; i_track++ )
-    {
-        p_cdda->p_cdtext[i_track] =
-          cdio_get_cdtext(p_cdda->p_cdio, i_track);
-    }
+        for( i_track = 0 ; i_track < p_cdda->i_tracks ; i_track++ )
+        {
+            p_cdda->p_cdtext[i_track] =
+            cdio_get_cdtext(p_cdda->p_cdio, i_track);
+        }
     }
 }
 
@@ -273,7 +275,7 @@ CDDAMetaInfo( access_t *p_access, track_t i_track )
     cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys;
     char *psz_meta_title = CDDAFormatMRL( p_access, i_track );
     char *psz_meta_artist = NULL;
+
     if ( ! p_cdda ) return;
 
     dbg_print( (INPUT_DBG_CALL), "i_track %d", i_track );
@@ -284,43 +286,42 @@ CDDAMetaInfo( access_t *p_access, track_t i_track )
     if ( p_cdda->b_cddb_enabled &&  p_cdda->cddb.disc )
     {
         if( CDIO_INVALID_TRACK == i_track )
-    {
+        {
 
-        psz_meta_title  = (char *)cddb_disc_get_title(p_cdda->cddb.disc);
-        psz_meta_artist = (char *)cddb_disc_get_artist(p_cdda->cddb.disc);
-        if ( cddb_disc_get_genre(p_cdda->cddb.disc) &&
-             strlen(cddb_disc_get_genre(p_cdda->cddb.disc)) )
-            add_cddb_meta(genre, vlc_meta_Genre);
-        if ( 0 != cddb_disc_get_year(p_cdda->cddb.disc))
-            add_cddb_meta_fmt(year, "%d", vlc_meta_Date );
-    }
-    else
-    {
-      cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc, i_track-1);
-      if (t != NULL )
-      {
-          if( cddb_track_get_title(t) != NULL && ! p_cdda->b_nav_mode )
-          {
-            add_meta_val( vlc_meta_Title, cddb_track_get_title(t) );
-          }
-          if( cddb_track_get_artist(t) != NULL )
-          {
-            add_meta_val( vlc_meta_Artist, cddb_track_get_artist(t) );
-          }
-      }
-    }
+            psz_meta_title  = (char *)cddb_disc_get_title(p_cdda->cddb.disc);
+            psz_meta_artist = (char *)cddb_disc_get_artist(p_cdda->cddb.disc);
+            if ( cddb_disc_get_genre(p_cdda->cddb.disc) &&
+                strlen(cddb_disc_get_genre(p_cdda->cddb.disc)) )
+                add_cddb_meta(genre, vlc_meta_Genre);
+            if ( 0 != cddb_disc_get_year(p_cdda->cddb.disc))
+                add_cddb_meta_fmt(year, "%d", vlc_meta_Date );
+        }
+        else
+        {
+            cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc, i_track-1);
+            if (t != NULL )
+            {
+                if( cddb_track_get_title(t) != NULL && ! p_cdda->b_nav_mode )
+                {
+                    add_meta_val( vlc_meta_Title, cddb_track_get_title(t) );
+                }
+                if( cddb_track_get_artist(t) != NULL )
+                {
+                    add_meta_val( vlc_meta_Artist, cddb_track_get_artist(t) );
+                }
+            }
+        }
     }
-
 #endif /*HAVE_LIBCDDB*/
+
 #define TITLE_MAX 30
     {
         track_t i = p_cdda->i_tracks;
         const int i_first_track = p_cdda->i_first_track;
         char psz_buffer[MSTRTIME_MAX_SIZE];
-    unsigned int i_track_frames =
-      cdio_get_track_lba(p_cdda->p_cdio, CDIO_CDROM_LEADOUT_TRACK);
-    
+        unsigned int i_track_frames =
+        cdio_get_track_lba(p_cdda->p_cdio, CDIO_CDROM_LEADOUT_TRACK);
+
         mtime_t i_duration = i_track_frames / CDIO_CD_FRAMES_PER_SEC;
 
         dbg_print( INPUT_DBG_META, "Duration %ld, tracks %d",
@@ -329,37 +330,36 @@ CDDAMetaInfo( access_t *p_access, track_t i_track )
                        _("Disc"), _("Duration"), "%s",
                        secstotimestr( psz_buffer, i_duration ) );
 
-    if (p_cdda->psz_mcn) {
-        input_Control( p_cdda->p_input, INPUT_ADD_INFO,
-               _("Disc"), _("Media Catalog Number (MCN)"), "%s",
-               p_cdda->psz_mcn );
-    
-        input_Control( p_cdda->p_input, INPUT_ADD_INFO,
-               _("Disc"), _("Tracks"), "%d", p_cdda->i_tracks );
-    }
-    
+        if (p_cdda->psz_mcn)
+        {
+            input_Control( p_cdda->p_input, INPUT_ADD_INFO,
+                _("Disc"), _("Media Catalog Number (MCN)"), "%s",
+                p_cdda->psz_mcn );
+            input_Control( p_cdda->p_input, INPUT_ADD_INFO,
+                _("Disc"), _("Tracks"), "%d", p_cdda->i_tracks );
+        }
 
 #ifdef HAVE_LIBCDDB
         if (p_cdda->b_cddb_enabled && p_cdda->cddb.disc)
         {
-          add_cddb_disc_info_str("Artist (CDDB)", artist);
-      if ( CDDB_CAT_INVALID != cddb_disc_get_category(p_cdda->cddb.disc) )
-        add_info_str("Disc", "Category (CDDB)",
-             CDDB_CATEGORY[cddb_disc_get_category(p_cdda->cddb.disc)]);
-          add_cddb_disc_info_val("Disc ID (CDDB)", "%x", discid);
-          add_cddb_disc_info_str("Extended Data (CDDB)", ext_data);
-      add_cddb_disc_info_str("Genre (CDDB)",  genre);
-          add_cddb_disc_info_str("Title (CDDB)",  title);
-      if ( 0 != cddb_disc_get_year(p_cdda->cddb.disc) )
-        add_cddb_disc_info_val("Year (CDDB)", "%d", year);
+            add_cddb_disc_info_str("Artist (CDDB)", artist);
+            if ( CDDB_CAT_INVALID != cddb_disc_get_category(p_cdda->cddb.disc) )
+                add_info_str("Disc", "Category (CDDB)",
+                        CDDB_CATEGORY[cddb_disc_get_category(p_cdda->cddb.disc)]);
+            add_cddb_disc_info_val("Disc ID (CDDB)", "%x", discid);
+            add_cddb_disc_info_str("Extended Data (CDDB)", ext_data);
+            add_cddb_disc_info_str("Genre (CDDB)",  genre);
+            add_cddb_disc_info_str("Title (CDDB)",  title);
+            if ( 0 != cddb_disc_get_year(p_cdda->cddb.disc) )
+                add_cddb_disc_info_val("Year (CDDB)", "%d", year);
 
         }
 #endif /*HAVE_LIBCDDB*/
 
         if (p_cdda->p_cdtext[0])
         {
-        char *psz_field;
-    
+            char *psz_field;
+
             add_cdtext_disc_info_str("Arranger (CD-Text)",    CDTEXT_ARRANGER);
             add_cdtext_disc_info_str("Composer (CD-Text)",    CDTEXT_COMPOSER);
             add_cdtext_disc_info_str("Disc ID (CD-Text)",     CDTEXT_DISCID);
@@ -369,74 +369,72 @@ CDDAMetaInfo( access_t *p_access, track_t i_track )
             add_cdtext_disc_info_str("Songwriter (CD-Text)",  CDTEXT_SONGWRITER);
             add_cdtext_disc_info_str("Title (CD-Text)",       CDTEXT_TITLE);
 
-        psz_field = p_cdda->p_cdtext[0]->field[CDTEXT_TITLE];
-        if (psz_field && strlen(psz_field)) {
-          psz_meta_title = psz_field;
-        }
-        psz_field = p_cdda->p_cdtext[0]->field[CDTEXT_PERFORMER];
-        if (psz_field && strlen(psz_field)) {
-          psz_meta_artist = psz_field;
-        }
-    
+            psz_field = p_cdda->p_cdtext[0]->field[CDTEXT_TITLE];
+            if (psz_field && strlen(psz_field))
+                psz_meta_title = psz_field;
+
+            psz_field = p_cdda->p_cdtext[0]->field[CDTEXT_PERFORMER];
+            if (psz_field && strlen(psz_field))
+                psz_meta_artist = psz_field;
         }
 
-    for( i = 0 ; i < p_cdda->i_tracks ; i++ )
-    {
-      char psz_track[TITLE_MAX];
-      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);
-
-      mtime_t i_duration = i_track_frames / CDIO_CD_FRAMES_PER_SEC;
-      char *psz_mrl = CDDAFormatMRL( p_access, i_track );
-    
-      snprintf(psz_track, TITLE_MAX, "%s %02d", _("Track"), i_track);
-
-      input_Control( p_cdda->p_input, INPUT_ADD_INFO, psz_track,
-             _("Duration"), "%s",
-             secstotimestr( psz_buffer, i_duration ) );
-    
-      input_Control( p_cdda->p_input, INPUT_ADD_INFO, psz_track,
-             _("MRL"), "%s", psz_mrl );
-      free(psz_mrl);
-    
-      if (p_cdda->p_cdtext[i_track])
+        for( i = 0 ; i < p_cdda->i_tracks ; i++ )
         {
-          add_cdtext_info_str( psz_track, "Arranger (CD-Text)",
-                   i_track, CDTEXT_ARRANGER);
-          add_cdtext_info_str( psz_track, "Composer (CD-Text)",
-                   i_track, CDTEXT_COMPOSER);
-          add_cdtext_info_str( psz_track, "Disc ID (CD-Text)",
-                   i_track, CDTEXT_DISCID);
-          add_cdtext_info_str( psz_track, "Genre (CD-Text)",
-                   i_track, CDTEXT_GENRE);
-          add_cdtext_info_str( psz_track, "Message (CD-Text)",
-                   i_track, CDTEXT_MESSAGE);
-          add_cdtext_info_str( psz_track, "Performer (CD-Text)",
-                   i_track, CDTEXT_PERFORMER);
-          add_cdtext_info_str( psz_track, "Songwriter (CD-Text)",
-                   i_track, CDTEXT_SONGWRITER);
-          add_cdtext_info_str( psz_track, "Title (CD-Text)",
-                   i_track, CDTEXT_TITLE);
-        }
-    
+            char psz_track[TITLE_MAX];
+            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);
+
+            mtime_t i_duration = i_track_frames / CDIO_CD_FRAMES_PER_SEC;
+            char *psz_mrl = CDDAFormatMRL( p_access, i_track );
+
+            snprintf(psz_track, TITLE_MAX, "%s %02d", _("Track"), i_track);
+
+            input_Control( p_cdda->p_input, INPUT_ADD_INFO, psz_track,
+                _("Duration"), "%s",
+                secstotimestr( psz_buffer, i_duration ) );
+
+            input_Control( p_cdda->p_input, INPUT_ADD_INFO, psz_track,
+                _("MRL"), "%s", psz_mrl );
+            free(psz_mrl);
+
+            if (p_cdda->p_cdtext[i_track])
+            {
+                add_cdtext_info_str( psz_track, "Arranger (CD-Text)",
+                        i_track, CDTEXT_ARRANGER);
+                add_cdtext_info_str( psz_track, "Composer (CD-Text)",
+                        i_track, CDTEXT_COMPOSER);
+                add_cdtext_info_str( psz_track, "Disc ID (CD-Text)",
+                        i_track, CDTEXT_DISCID);
+                add_cdtext_info_str( psz_track, "Genre (CD-Text)",
+                        i_track, CDTEXT_GENRE);
+                add_cdtext_info_str( psz_track, "Message (CD-Text)",
+                        i_track, CDTEXT_MESSAGE);
+                add_cdtext_info_str( psz_track, "Performer (CD-Text)",
+                        i_track, CDTEXT_PERFORMER);
+                add_cdtext_info_str( psz_track, "Songwriter (CD-Text)",
+                        i_track, CDTEXT_SONGWRITER);
+                add_cdtext_info_str( psz_track, "Title (CD-Text)",
+                        i_track, CDTEXT_TITLE);
+            }
+
 #ifdef HAVE_LIBCDDB
-      if (p_cdda->b_cddb_enabled)
-        {
-          cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc, i);
-          if (t != NULL)
-        {
-          add_info_str(psz_track, "Artist (CDDB)",
-                   cddb_track_get_artist(t));
-          add_info_str(psz_track, "Title (CDDB)",
-                   cddb_track_get_title(t));
-          add_info_str(psz_track, "Extended Data (CDDB)",
-                   cddb_track_get_ext_data(t));
-        }
-        }
+            if (p_cdda->b_cddb_enabled)
+            {
+                cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc, i);
+                if (t != NULL)
+                {
+                    add_info_str(psz_track, "Artist (CDDB)",
+                            cddb_track_get_artist(t));
+                    add_info_str(psz_track, "Title (CDDB)",
+                            cddb_track_get_title(t));
+                    add_info_str(psz_track, "Extended Data (CDDB)",
+                            cddb_track_get_ext_data(t));
+                }
+            }
 #endif /*HAVE_LIBCDDB*/
-    }
+        }
 
     /* Above we should have set psz_meta_title and psz_meta_artist
        to CDDB or CD-Text values or the default value depending on
@@ -451,20 +449,19 @@ CDDAMetaInfo( access_t *p_access, track_t i_track )
        different things. In either case, we may have customized to
        put in the track name.
      */
-    if ( CDIO_INVALID_TRACK != i_track )
-    {
-        char *psz_name = CDDAFormatTitle( p_access, i_track ) ;
-        if ( !p_cdda->b_nav_mode ) {
-            add_meta_val( vlc_meta_Title, psz_name );
-        } else
+        if ( CDIO_INVALID_TRACK != i_track )
         {
-            input_Control( p_cdda->p_input, INPUT_SET_NAME, psz_name );
-            free(psz_name);
+            char *psz_name = CDDAFormatTitle( p_access, i_track ) ;
+            if ( !p_cdda->b_nav_mode ) {
+                add_meta_val( vlc_meta_Title, psz_name );
+            } else
+            {
+                input_Control( p_cdda->p_input, INPUT_SET_NAME, psz_name );
+                free(psz_name);
+            }
+            if (psz_meta_artist)
+            add_meta_val( vlc_meta_Artist, psz_meta_artist );
         }
-        if (psz_meta_artist)
-          add_meta_val( vlc_meta_Artist, psz_meta_artist );
-    }
-    
     }
 }
 
@@ -502,10 +499,10 @@ cdda_data_t *p_cdda, char *psz_cdtext)
   /* We either don't have CD-Text info, or we do but we prefer to get CDDB
      which means CDDB has been enabled and we were able to retrieve the info.*/
 #ifdef HAVE_LIBCDDB
-  return !psz_cdtext ||
-    (!p_cdda->b_cdtext_prefer && p_cdda->b_cddb_enabled && p_cdda->cddb.disc);
+    return !psz_cdtext ||
+        (!p_cdda->b_cdtext_prefer && p_cdda->b_cddb_enabled && p_cdda->cddb.disc);
 #else
-  return false;
+    return false;
 #endif
 }
 
@@ -570,16 +567,16 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
             case 'a':
                 if (p_cdda->p_cdtext[0]
                     && p_cdda->p_cdtext[0]->field[CDTEXT_PERFORMER])
-                  psz = p_cdda->p_cdtext[0]->field[CDTEXT_PERFORMER];
+                    psz = p_cdda->p_cdtext[0]->field[CDTEXT_PERFORMER];
                 if (want_cddb_info(p_cdda, psz))
-                  psz = (char *)cddb_disc_get_artist(p_cdda->cddb.disc);
+                    psz = (char *)cddb_disc_get_artist(p_cdda->cddb.disc);
                 goto format_str;
             case 'A':
                 if (p_cdda->p_cdtext[0]
                     && p_cdda->p_cdtext[0]->field[CDTEXT_TITLE])
-                  psz = p_cdda->p_cdtext[0]->field[CDTEXT_TITLE];
-        if (want_cddb_info(p_cdda, psz))
-          psz =  (char *)cddb_disc_get_title(p_cdda->cddb.disc);
+                    psz = p_cdda->p_cdtext[0]->field[CDTEXT_TITLE];
+                if (want_cddb_info(p_cdda, psz))
+                    psz =  (char *)cddb_disc_get_title(p_cdda->cddb.disc);
                 goto format_str;
             case 'C':
                 if (!p_cdda->b_cddb_enabled) goto not_special;
@@ -589,18 +586,18 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
             case 'G':
                 if (p_cdda->p_cdtext[0]
                     && p_cdda->p_cdtext[0]->field[CDTEXT_GENRE])
-                  psz = p_cdda->p_cdtext[0]->field[CDTEXT_GENRE];
+                    psz = p_cdda->p_cdtext[0]->field[CDTEXT_GENRE];
                 if (want_cddb_info(p_cdda, psz))
-                  psz = (char *)cddb_disc_get_genre(p_cdda->cddb.disc);
+                    psz = (char *)cddb_disc_get_genre(p_cdda->cddb.disc);
                 goto format_str;
             case 'I':
                 if (p_cdda->p_cdtext[0]
                     && p_cdda->p_cdtext[0]->field[CDTEXT_DISCID])
-                  psz = p_cdda->p_cdtext[0]->field[CDTEXT_DISCID];
+                    psz = p_cdda->p_cdtext[0]->field[CDTEXT_DISCID];
                 if (want_cddb_info(p_cdda, psz)) {
-                     add_format_num_info(cddb_disc_get_discid(p_cdda->cddb.disc), "%x");
+                    add_format_num_info(cddb_disc_get_discid(p_cdda->cddb.disc), "%x");
                 } else if (psz)
-                     add_format_str_info(psz);
+                    add_format_str_info(psz);
                 break;
             case 'Y':
                 if (!p_cdda->b_cddb_enabled) goto not_special;
@@ -619,132 +616,135 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
                     } else {
                       add_format_str_info(psz_mrl);
                     }
-                } else {
-                  if (p_cdda->p_cdtext[i_track]
-              && p_cdda->p_cdtext[i_track]->field[CDTEXT_TITLE]) {
-            add_format_str_info(p_cdda->p_cdtext[i_track]->field[CDTEXT_TITLE]);
-        
-          } else
-            add_format_str_info(psz_mrl);
-        }
+                }
+                else
+                {
+                    if (p_cdda->p_cdtext[i_track]
+                        && p_cdda->p_cdtext[i_track]->field[CDTEXT_TITLE])
+                    {
+                        add_format_str_info(p_cdda->p_cdtext[i_track]->field[CDTEXT_TITLE]);
+                    }
+                    else
+                        add_format_str_info(psz_mrl);
+                }
                 break;
-        case 'p':
-            if ( CDIO_INVALID_TRACK == i_track ) break;
-            if (p_cdda->p_cdtext[i_track]
-            && p_cdda->p_cdtext[i_track]->field[CDTEXT_PERFORMER])
-          psz = p_cdda->p_cdtext[i_track]->field[CDTEXT_PERFORMER];
-        if (want_cddb_info(p_cdda, psz))
-          {
-            cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,
-                            i_track-1);
-            if (t != NULL && cddb_track_get_artist(t) != NULL)
-              psz = (char *)cddb_track_get_artist(t);
-          }
-        goto format_str;
-            case 'e':
-            if ( CDIO_INVALID_TRACK == i_track ) break;
-            if (p_cdda->p_cdtext[i_track]
-            && p_cdda->p_cdtext[i_track]->field[CDTEXT_MESSAGE])
-          psz = p_cdda->p_cdtext[i_track]->field[CDTEXT_MESSAGE];
-        if (want_cddb_info(p_cdda, psz))
+            case 'p':
+                if ( CDIO_INVALID_TRACK == i_track ) break;
+                if (p_cdda->p_cdtext[i_track]
+                    && p_cdda->p_cdtext[i_track]->field[CDTEXT_PERFORMER])
+                    psz = p_cdda->p_cdtext[i_track]->field[CDTEXT_PERFORMER];
+                if (want_cddb_info(p_cdda, psz))
                 {
                     cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,
-                                                        i_track-1);
-                    if (t != NULL && cddb_track_get_ext_data(t) != NULL)
-                        psz = (char *)cddb_track_get_ext_data(t);
+                                i_track-1);
+                    if (t != NULL && cddb_track_get_artist(t) != NULL)
+                    psz = (char *)cddb_track_get_artist(t);
                 }
-        goto format_str;
+                goto format_str;
+            case 'e':
+                    if ( CDIO_INVALID_TRACK == i_track ) break;
+                    if (p_cdda->p_cdtext[i_track]
+                        && p_cdda->p_cdtext[i_track]->field[CDTEXT_MESSAGE])
+                    psz = p_cdda->p_cdtext[i_track]->field[CDTEXT_MESSAGE];
+                    if (want_cddb_info(p_cdda, psz))
+                    {
+                        cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,
+                                                            i_track-1);
+                        if (t != NULL && cddb_track_get_ext_data(t) != NULL)
+                            psz = (char *)cddb_track_get_ext_data(t);
+                    }
+                    goto format_str;
                 break;
 #else
             case 'a':
-            if (p_cdda->p_cdtext[0]
-            && p_cdda->p_cdtext[0]->field[CDTEXT_PERFORMER])
-            psz = p_cdda->p_cdtext[0]->field[CDTEXT_PERFORMER];
-                goto format_str;
+                if (p_cdda->p_cdtext[0]
+                && p_cdda->p_cdtext[0]->field[CDTEXT_PERFORMER])
+                psz = p_cdda->p_cdtext[0]->field[CDTEXT_PERFORMER];
+                    goto format_str;
             case 'A':
-            if (p_cdda->p_cdtext[0]
-            && p_cdda->p_cdtext[0]->field[CDTEXT_TITLE])
-            psz = p_cdda->p_cdtext[0]->field[CDTEXT_TITLE];
+                if (p_cdda->p_cdtext[0]
+                    && p_cdda->p_cdtext[0]->field[CDTEXT_TITLE])
+                psz = p_cdda->p_cdtext[0]->field[CDTEXT_TITLE];
                 goto format_str;
             case 'G':
-            if (p_cdda->p_cdtext[0]
-            && p_cdda->p_cdtext[0]->field[CDTEXT_GENRE])
-          psz = p_cdda->p_cdtext[0]->field[CDTEXT_GENRE];
-        goto format_str;
+                if (p_cdda->p_cdtext[0]
+                && p_cdda->p_cdtext[0]->field[CDTEXT_GENRE])
+                    psz = p_cdda->p_cdtext[0]->field[CDTEXT_GENRE];
+                goto format_str;
             case 'I':
-            if (p_cdda->p_cdtext[0]
-            && p_cdda->p_cdtext[0]->field[CDTEXT_DISCID])
-          add_format_str_info(p_cdda->p_cdtext[0]->field[CDTEXT_DISCID]);
+                if (p_cdda->p_cdtext[0]
+                    && p_cdda->p_cdtext[0]->field[CDTEXT_DISCID])
+                    add_format_str_info(p_cdda->p_cdtext[0]->field[CDTEXT_DISCID]);
                 break;
-        case 'p':
-            if ( CDIO_INVALID_TRACK == i_track ) break;
-            if (p_cdda->p_cdtext[i_track]
-            && p_cdda->p_cdtext[i_track]->field[CDTEXT_PERFORMER])
-          psz = p_cdda->p_cdtext[i_track]->field[CDTEXT_PERFORMER];
-        goto format_str;
+            case 'p':
+                if ( CDIO_INVALID_TRACK == i_track ) break;
+                if (p_cdda->p_cdtext[i_track]
+                    && p_cdda->p_cdtext[i_track]->field[CDTEXT_PERFORMER])
+                psz = p_cdda->p_cdtext[i_track]->field[CDTEXT_PERFORMER];
+                goto format_str;
             case 't':
-            if ( CDIO_INVALID_TRACK == i_track ) break;
-            if (p_cdda->p_cdtext[i_track]
-            && p_cdda->p_cdtext[i_track]->field[CDTEXT_TITLE])
-            psz = p_cdda->p_cdtext[i_track]->field[CDTEXT_TITLE];
-        else
-            psz = psz_mrl;
+                if ( CDIO_INVALID_TRACK == i_track ) break;
+                if (p_cdda->p_cdtext[i_track]
+                    && p_cdda->p_cdtext[i_track]->field[CDTEXT_TITLE])
+                    psz = p_cdda->p_cdtext[i_track]->field[CDTEXT_TITLE];
+                else
+                    psz = psz_mrl;
                 goto format_str;
             case 'e':
-            if ( CDIO_INVALID_TRACK == i_track ) break;
-            if (p_cdda->p_cdtext[i_track]
-            && p_cdda->p_cdtext[i_track]->field[CDTEXT_MESSAGE])
-          psz = p_cdda->p_cdtext[i_track]->field[CDTEXT_MESSAGE];
-        goto format_str;
+                if ( CDIO_INVALID_TRACK == i_track ) break;
+                if (p_cdda->p_cdtext[i_track]
+                    && p_cdda->p_cdtext[i_track]->field[CDTEXT_MESSAGE])
+                psz = p_cdda->p_cdtext[i_track]->field[CDTEXT_MESSAGE];
+                goto format_str;
                 break;
 #endif /*HAVE_LIBCDDB*/
 
             case 's':
-            if ( CDIO_INVALID_TRACK != i_track )
+                if ( CDIO_INVALID_TRACK != i_track )
                 {
                     char psz_buffer[MSTRTIME_MAX_SIZE];
-            unsigned int i_track_frames =
-              cdio_get_track_sec_count(p_cdda->p_cdio, i_track);
+                    unsigned int i_track_frames =
+                    cdio_get_track_sec_count(p_cdda->p_cdio, i_track);
                     mtime_t i_duration =
-              i_track_frames / CDIO_CD_FRAMES_PER_SEC;
+                        i_track_frames / CDIO_CD_FRAMES_PER_SEC;
                     add_format_str_info( secstotimestr( psz_buffer,
                             i_duration ) );
-            break;
+                    break;
                 }
 
-        /* Fall through to disc duration if CDIO_INVALID_TRACK  */
+            /* Fall through to disc duration if CDIO_INVALID_TRACK  */
             case 'S':
                 {
                     char psz_buffer[MSTRTIME_MAX_SIZE];
-            unsigned int i_track_frames =
-              cdio_get_track_lba(p_cdda->p_cdio,
-                     CDIO_CDROM_LEADOUT_TRACK);
+                    unsigned int i_track_frames =
+                    cdio_get_track_lba(p_cdda->p_cdio,
+                        CDIO_CDROM_LEADOUT_TRACK);
                     mtime_t i_duration =
-              i_track_frames / CDIO_CD_FRAMES_PER_SEC;
+                    i_track_frames / CDIO_CD_FRAMES_PER_SEC;
                     add_format_str_info( secstotimestr( psz_buffer,
                             i_duration ) );
-            break;
+                    break;
                 }
 
             case 'M':
-              add_format_str_info(psz_mrl);
-              break;
+                add_format_str_info(psz_mrl);
+                break;
 
             case 'm':
-              add_format_str_info(p_cdda->psz_mcn);
-              break;
+                add_format_str_info(p_cdda->psz_mcn);
+                break;
 
             case 'n':
-              add_format_num_info(p_cdda->i_tracks, "%d");
-              break;
+                add_format_num_info(p_cdda->i_tracks, "%d");
+                break;
 
             case 'T':
-              add_format_num_info(i_track, "%02d");
-              break;
-        format_str:
-          if (psz)
-        add_format_str_info(psz);
-          break;
+                add_format_num_info(i_track, "%02d");
+                break;
+            format_str:
+                if (psz)
+                    add_format_str_info(psz);
+                break;
 #ifdef HAVE_LIBCDDB
             not_special:
 #endif
@@ -767,7 +767,7 @@ CDDAFormatMRL( const access_t *p_access, track_t i_track )
       + strlen(p_cdda->psz_source) +
       + strlen("@T") + strlen("100") + 1;
     char *psz_mrl = calloc( 1, psz_mrl_max );
+
     if (CDIO_INVALID_TRACK == i_track)
       snprintf(psz_mrl, psz_mrl_max, "%s%s",
            CDDA_MRL_PREFIX, p_cdda->psz_source);
@@ -792,39 +792,29 @@ CDDAFormatTitle( const access_t *p_access, track_t i_track )
     {
         char *psz_name;
 #ifdef HAVE_LIBCDDB
-    if (p_cdda->b_cddb_enabled)
-    {
-        config_varname = MODULE_STRING "-cddb-title-format";
-    }
+        if (p_cdda->b_cddb_enabled)
+        {
+            config_varname = MODULE_STRING "-cddb-title-format";
+        }
 #endif /*HAVE_LIBCDDB*/
-    psz_name =
-      CDDAFormatStr( p_access, p_cdda,
-             config_GetPsz( p_access, config_varname ),
-             psz_mrl, i_track );
-    free(psz_mrl);
-    return psz_name;
+        psz_name =
+            CDDAFormatStr( p_access, p_cdda,
+                config_GetPsz( p_access, config_varname ),
+                psz_mrl, i_track );
+        free(psz_mrl);
+        return psz_name;
     }
     return(NULL);
 }
 
-/* Adds a string-valued entry to the playlist information under "Track"
-   if the string is not null or the null string.
- */
-#define add_playlist_track_info_str(TITLE, FIELD)                        \
-    if (FIELD && strlen(FIELD))                                          \
-    {                                                                    \
-        input_ItemAddInfo( &p_item->input, _("Track"), _(TITLE),    \
-                              "%s", FIELD);                              \
-    }
-
 static playlist_item_t *
 CDDACreatePlaylistItem( const access_t *p_access, cdda_data_t *p_cdda,
                         playlist_t *p_playlist, playlist_item_t *p_item,
                         track_t 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_lsn(p_cdda->p_cdio, i_track+1) -
+    cdio_get_track_lsn(p_cdda->p_cdio, i_track);
     mtime_t i_mduration = i_track_frames * (CLOCK_FREQ / CDIO_CD_FRAMES_PER_SEC) ;
     char *psz_title = NULL;
     char *psz_mrl   = NULL;
@@ -840,7 +830,7 @@ CDDACreatePlaylistItem( const access_t *p_access, cdda_data_t *p_cdda,
                psz_mrl, psz_title, (long int) i_mduration / 1000000 );
 
     p_child = playlist_ItemNew( p_playlist, psz_mrl, psz_title );
-    input_item_SetDuration( input_GetItem( p_child->p_input ),
+    input_item_SetDuration( p_child->p_input,
             (mtime_t) i_mduration );
     free(psz_mrl);
     free(psz_title);
@@ -849,58 +839,6 @@ CDDACreatePlaylistItem( const access_t *p_access, cdda_data_t *p_cdda,
     return p_child;
 }
 
-int CDDAAddMetaToItem( access_t *p_access, cdda_data_t *p_cdda,
-                       playlist_item_t *p_item, int i_track,
-                       bool b_single )
-{
-#if 0
-    add_playlist_track_info_str("Source",  p_cdda->psz_source);
-    input_ItemAddInfo( &p_item->input, _("Track"), _("Track Number"),
-                           "%d", i_track );
-
-    if (p_cdda->p_cdtext[i_track])
-    {
-        const cdtext_t *p = p_cdda->p_cdtext[i_track];
-        add_playlist_track_info_str("Arranger (CD-Text)",
-                                    p->field[CDTEXT_ARRANGER]);
-        add_playlist_track_info_str("Composer (CD-Text)",
-                                    p->field[CDTEXT_COMPOSER]);
-        add_playlist_track_info_str("Genre (CD-Text)",
-                                    p->field[CDTEXT_GENRE]);
-        add_playlist_track_info_str("Message (CD-Text)",
-                                    p->field[CDTEXT_MESSAGE]);
-        add_playlist_track_info_str("Performer (CD-Text)",
-                                    p->field[CDTEXT_PERFORMER]);
-        add_playlist_track_info_str("Songwriter (CD-Text)",
-                                    p->field[CDTEXT_SONGWRITER]);
-        add_playlist_track_info_str("Title (CD-Text)",
-                                    p->field[CDTEXT_TITLE]);
-    }
-
-#ifdef HAVE_LIBCDDB
-    if (p_cdda->b_cddb_enabled)
-    {
-        cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,
-                                            i_track-p_cdda->i_first_track);
-
-        if (t)
-        {
-            if (cddb_track_get_artist(t))
-                add_playlist_track_info_str("Artist (CDDB)",
-                                             cddb_track_get_artist(t));
-            if (cddb_track_get_title(t))
-                add_playlist_track_info_str("Title (CDDB)",
-                                            cddb_track_get_title(t));
-            if (cddb_track_get_ext_data(t))
-                add_playlist_track_info_str("Extended information (CDDB)",
-                                            cddb_track_get_ext_data(t));
-        }
-    }
-#endif /*HAVE_LIBCDDB*/
-#endif
-    return VLC_SUCCESS;
-}
-
 /*
    Fixes up playlist.
 */
@@ -960,75 +898,70 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
            more mature.
          */
         track_t i_track = p_cdda->i_track;
-    unsigned int i_track_frames =
-      cdio_get_track_sec_count(p_cdda->p_cdio, i_track);
-    
+        unsigned int i_track_frames =
+        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 = i_track_frames * (int64_t) CDIO_CD_FRAMESIZE_RAW;
+        t->i_length = INT64_C(1000000) * t->i_size / CDDA_FREQUENCY_SAMPLE / 4;
 
-        t->i_length = I64C(1000000) * t->i_size / CDDA_FREQUENCY_SAMPLE / 4;
+        if( p_item )
+        {
+            input_item_SetDuration( p_item->p_input, (mtime_t) i_track_frames
+            * (CLOCK_FREQ / CDIO_CD_FRAMES_PER_SEC) );
+                input_item_SetURI( p_item->p_input,
+                        CDDAFormatMRL( p_access, i_track ) );
+        }
 
-    if( p_item )
-    {
-        CDDAAddMetaToItem( p_access, p_cdda, p_item, i_track, false );
-        input_item_SetDuration( p_item->p_input, (mtime_t) i_track_frames
-          * (CLOCK_FREQ / CDIO_CD_FRAMES_PER_SEC) );
-            input_item_SetURI( p_item->p_input,
-                    CDDAFormatMRL( p_access, i_track ) );
-    }
-    
         p_cdda->i_titles = 1;
-    p_access->info.i_update = INPUT_UPDATE_TITLE;
+        p_access->info.i_update = INPUT_UPDATE_TITLE;
     }
     else
     {
-    input_title_t *t;
+        input_title_t *t;
 
-    if ( !p_cdda->b_nav_mode )
-      playlist_ItemToNode( p_playlist, p_item, false );
+        if( !p_cdda->b_nav_mode )
+            playlist_ItemToNode( p_playlist, p_item, false );
 
         for( i = 0 ; i < p_cdda->i_tracks ; i++ )
         {
             playlist_item_t *p_child;
             const track_t i_track = i_first_track + i;
-        unsigned int i_track_frames =
-          cdio_get_track_sec_count(p_cdda->p_cdio, i_track);
+            unsigned int i_track_frames =
+                cdio_get_track_sec_count(p_cdda->p_cdio, i_track);
 
             t = p_cdda->p_title[i] = vlc_input_title_New();
 
             asprintf( &t->psz_name, _("Track %i"), i_track );
             t->i_size = i_track_frames * (int64_t) CDIO_CD_FRAMESIZE_RAW;
 
-            t->i_length = I64C(1000000) * t->i_size
-          / CDDA_FREQUENCY_SAMPLE / 4;
+            t->i_length = INT64_C(1000000) * t->i_size
+                / CDDA_FREQUENCY_SAMPLE / 4;
 
-        if ( ! p_cdda->b_nav_mode ) {
-          p_child = CDDACreatePlaylistItem( p_access, p_cdda, p_playlist,
-                        p_item,
-                        i_track );
-          CDDAAddMetaToItem( p_access, p_cdda, p_child, i_track,
-                 true );
-        }
+            if ( ! p_cdda->b_nav_mode )
+            {
+                p_child = CDDACreatePlaylistItem( p_access, p_cdda, p_playlist,
+                                                  p_item, i_track );
+            }
         }
 
         p_cdda->i_titles = p_cdda->i_tracks;
-    p_access->info.i_update |= INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE;
-    if( p_item )
+        p_access->info.i_update |= INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE;
+        if( p_item )
         {
-        input_item_SetDuration( p_item->p_input, (mtime_t) p_access->info.i_size
+            input_item_SetDuration( p_item->p_input, (mtime_t) p_access->info.i_size
                     * (CLOCK_FREQ / CDIO_CD_FRAMES_PER_SEC) );
             input_item_SetURI( p_item->p_input,
                     CDDAFormatMRL( p_access, p_cdda->i_track ) );
+        }
     }
-    }
 
     if( b_play )
     {
-        playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true,
+        playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, pl_Unlocked,
                           p_playlist->status.p_item, NULL );
     }