]> git.sesse.net Git - vlc/blobdiff - modules/access/cdda/access.c
Options as infos were bad in several ways: it broke PLAYLIST_GO, used
[vlc] / modules / access / cdda / access.c
index d36d7bd382801fd0a8d28c719ad82fc9a65bfa76..092abb962bfaa55c6d8de4bd76f372244db0661b 100644 (file)
@@ -2,7 +2,7 @@
  * cddax.c : CD digital audio input module for vlc using libcdio
  *****************************************************************************
  * Copyright (C) 2000,2003 VideoLAN
- * $Id: access.c,v 1.22 2004/01/07 07:21:31 rocky Exp $
+ * $Id: access.c,v 1.23 2004/01/29 17:51:07 zorglub Exp $
  *
  * Authors: Rocky Bernstein <rocky@panix.com>
  *          Laurent Aimar <fenrir@via.ecp.fr>
@@ -314,8 +314,13 @@ static void CDDASeek( input_thread_t * p_input, off_t i_off )
   if ( str ) {                                                 \
     dbg_print( INPUT_DBG_META, "field %s: %s\n", title, str);  \
     input_AddInfo( p_cat, _(title), "%s", str );               \
-    playlist_AddInfo( p_playlist, -1, p_cat->psz_name,         \
+    vlc_mutex_lock( &p_playlist->object_lock );                \
+    p_item = playlist_ItemGetByPos( p_playlist, -1 );          \
+    vlc_mutex_unlock( &p_playlist->object_lock );              \
+    vlc_mutex_lock( &p_item->lock );                           \
+    playlist_ItemAddInfo( p_item, p_cat->psz_name,             \
                       _(title), "%s" , str );                  \
+    vlc_mutex_unlock( &p_item->lock );                         \
   }
 
 
@@ -325,9 +330,10 @@ static void InformationCreate( input_thread_t *p_input  )
   playlist_t *p_playlist = vlc_object_find( p_input, VLC_OBJECT_PLAYLIST,
                                             FIND_PARENT );
   input_info_category_t *p_cat;
+  playlist_item_t *p_item;
 
   p_cat = input_InfoCategory( p_input, "General" );
-  
+
 
 #ifdef HAVE_LIBCDDB
   if (p_cdda->i_cddb_enabled) {
@@ -669,6 +675,7 @@ CDDACreatePlayListItem(const input_thread_t *p_input, cdda_data_t *p_cdda,
   char *p_author;
   char *p_title;
   char *config_varname = MODULE_STRING "-title-format";
+  playlist_item_t *p_item;
 
 #ifdef HAVE_LIBCDDB
   if (p_cdda->i_cddb_enabled) {
@@ -685,54 +692,63 @@ CDDACreatePlayListItem(const input_thread_t *p_input, cdda_data_t *p_cdda,
 
   dbg_print( INPUT_DBG_META, "mrl: %s, title: %s, duration, %ld, pos %d",
              psz_mrl, p_title, (long int) i_duration / 1000000 , i_pos );
-  playlist_AddWDuration( p_playlist, psz_mrl, p_title, playlist_operation, 
-                        i_pos, i_duration );
+  playlist_AddExt( p_playlist, psz_mrl, p_title, playlist_operation,
+                         i_pos, i_duration , NULL, 0);
 
   if( i_pos == PLAYLIST_END ) i_pos = p_playlist->i_size - 1;
 
+  vlc_mutex_lock( &p_playlist->object_lock );
+  p_item = playlist_ItemGetByPos( p_playlist, i_pos );
+  vlc_mutex_unlock( &p_playlist->object_lock );
+  if( !p_item )
+      return;
+
+  vlc_mutex_lock( &p_item->lock );
+
   p_author =
     CDDAFormatStr( p_input, p_cdda,
                    config_GetPsz( p_input, MODULE_STRING "-author-format" ),
                    psz_mrl, i_track );
 
-  playlist_AddInfo( p_playlist, i_pos, _("General"),_("Author"), p_author);
+  playlist_ItemAddInfo( p_item ,  _("General"),_("Author"), p_author);
 
 #ifdef HAVE_LIBCDDB
   if (p_cdda->i_cddb_enabled) {
     const char *psz_general_cat = _("General");
 
-    playlist_AddInfo( p_playlist, i_pos, psz_general_cat, _("Album"),
-                     "%s", p_cdda->cddb.disc->title);
-    playlist_AddInfo( p_playlist, i_pos, psz_general_cat, _("Disc Artist(s)"),
-                     "%s", p_cdda->cddb.disc->artist);
-    playlist_AddInfo( p_playlist, i_pos, psz_general_cat,
-                     _("CDDB Disc Category"),
-                     "%s", CDDB_CATEGORY[p_cdda->cddb.disc->category]);
-    playlist_AddInfo( p_playlist, i_pos, psz_general_cat, _("Genre"),
-                     "%s", p_cdda->cddb.disc->genre);
+    playlist_ItemAddInfo( p_item, psz_general_cat, _("Album"),
+                      "%s", p_cdda->cddb.disc->title);
+    playlist_ItemAddInfo( p_item, psz_general_cat, _("Disc Artist(s)"),
+                      "%s", p_cdda->cddb.disc->artist);
+    playlist_ItemAddInfo( p_item, psz_general_cat,
+                        _("CDDB Disc Category"),
+                      "%s", CDDB_CATEGORY[p_cdda->cddb.disc->category]);
+    playlist_ItemAddInfo( p_item, psz_general_cat, _("Genre"),
+                      "%s", p_cdda->cddb.disc->genre);
     if ( p_cdda->cddb.disc->discid ) {
-      playlist_AddInfo( p_playlist, i_pos, psz_general_cat, _("CDDB Disc ID"),
-                       "%x", p_cdda->cddb.disc->discid );
+      playlist_ItemAddInfo( p_item, psz_general_cat, _("CDDB Disc ID"),
+                        "%x", p_cdda->cddb.disc->discid );
     }
     if (p_cdda->cddb.disc->year != 0) {
-      playlist_AddInfo( p_playlist, i_pos, psz_general_cat,
-                       _("Year"), "%5d", p_cdda->cddb.disc->year );
+      playlist_ItemAddInfo( p_item, psz_general_cat,
+                        _("Year"), "%5d", p_cdda->cddb.disc->year );
     }
 
     if (p_cdda->i_cddb_enabled) {
       cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,
-                                         i_track-1);
+                                          i_track-1);
       if (t != NULL && t->artist != NULL) {
-       playlist_AddInfo( p_playlist, i_pos, psz_general_cat,
-                         _("Track Artist"), "%s", t->artist );
-       playlist_AddInfo( p_playlist, i_pos, psz_general_cat,
-                         _("Track Title"), "%s",  t->title );
+        playlist_ItemAddInfo( p_item, psz_general_cat,
+                          _("Track Artist"), "%s", t->artist );
+        playlist_ItemAddInfo( p_item , psz_general_cat,
+                          _("Track Title"), "%s",  t->title );
       }
     }
 
   }
 #endif /*HAVE_LIBCDDB*/
 
+  vlc_mutex_unlock( &p_item->lock );
 }
 
 static int