]> git.sesse.net Git - vlc/blobdiff - modules/access/cdda/info.c
Explicitly add formerly implicit submodule shortcuts
[vlc] / modules / access / cdda / info.c
index 64d62f50dc3e6b08915bfa81a6ba44c086eea7d2..b0de8285b6caadf5ab00dc43080eb408c684dd46 100644 (file)
@@ -36,9 +36,8 @@
 #include <cdio/cd_types.h>
 #include "info.h"
 
-#ifdef HAVE_ERRNO_H
-#   include <errno.h>
-#endif
+#include <errno.h>
+#include <assert.h>
 
 static char *CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
                 const char format_str[], const char *psz_mrl,
@@ -73,15 +72,15 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
         goto cddb_destroy;
     }
 
-    cddb_set_email_address( conn,
-                            config_GetPsz( p_access,
-                                           MODULE_STRING "-cddb-email") );
-    cddb_set_server_name( conn,
-                          config_GetPsz( p_access,
-                                         MODULE_STRING "-cddb-server") );
+    char* psz_email = config_GetPsz( p_access, MODULE_STRING "-cddb-email");
+    char* psz_srv_name = config_GetPsz( p_access, MODULE_STRING "-cddb-server");
+    cddb_set_email_address( conn, psz_email );
+    cddb_set_server_name( conn, psz_srv_name );
     cddb_set_server_port(conn,
                          config_GetInt( p_access,
                                         MODULE_STRING "-cddb-port") );
+    free( psz_email );
+    free( psz_srv_name );
 
   /* Set the location of the local CDDB cache directory.
      The default location of this directory is */
@@ -89,9 +88,9 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
     if (!config_GetInt( p_access, MODULE_STRING "-cddb-enable-cache" ))
         cddb_cache_disable(conn);
 
-    cddb_cache_set_dir(conn,
-                     config_GetPsz( p_access,
-                                    MODULE_STRING "-cddb-cachedir") );
+    char* psz_cache = config_GetPsz( p_access, MODULE_STRING "-cddb-cachedir");
+    cddb_cache_set_dir(conn, psz_cache );
+    free( psz_cache );
 
     cddb_set_timeout(conn,
                    config_GetInt( p_access, MODULE_STRING "-cddb-timeout") );
@@ -227,7 +226,7 @@ cddb_end: ;
   Therefore, this should be called before CDDAMetaInfo is called.
 
  */
-void
+static void
 CDDAMetaInfoInit( access_t *p_access )
 {
     cdda_data_t *p_cdda   = (cdda_data_t *) p_access->p_sys;
@@ -797,46 +796,14 @@ CDDAFormatTitle( const access_t *p_access, track_t i_track )
             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);
+        char* psz_config_varname = config_GetPsz( p_access, config_varname );
+        psz_name = CDDAFormatStr( p_access, p_cdda, psz_config_varname,
+                                  psz_mrl, i_track );
+        free( psz_config_varname );
+        free( psz_mrl );
         return psz_name;
     }
-    return(NULL);
-}
-
-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);
-    mtime_t i_mduration = i_track_frames * (CLOCK_FREQ / CDIO_CD_FRAMES_PER_SEC) ;
-    char *psz_title = NULL;
-    char *psz_mrl   = NULL;
-
-    playlist_item_t *p_child = NULL;
-
-    if( !p_item ) return NULL;
-
-    psz_title = CDDAFormatTitle( p_access, i_track ) ;
-    psz_mrl = CDDAFormatMRL( p_access, i_track  ) ;
-
-    dbg_print( INPUT_DBG_META, "mrl: %s, title: %s, duration, %ld",
-               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 ),
-            (mtime_t) i_mduration );
-    free(psz_mrl);
-    free(psz_title);
-
-    if( !p_child ) return NULL;
-    return p_child;
+    return NULL;
 }
 
 /*
@@ -847,10 +814,7 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
                    bool b_single_track )
 {
     int i;
-    playlist_t * p_playlist = NULL;
     const track_t i_first_track = p_cdda->i_first_track;
-    playlist_item_t *p_item = NULL;
-    bool b_play = false;
     track_t    i_track;
 
 #ifdef HAVE_LIBCDDB
@@ -863,10 +827,6 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
         return VLC_SUCCESS;
 #endif
 
-    if (! p_cdda->b_nav_mode ) {
-        p_playlist = pl_Yield( p_access );
-    }
-
     if( b_single_track || p_cdda->b_nav_mode ) {
         i_track = p_cdda->i_track;
     }
@@ -877,21 +837,6 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
     CDDAMetaInfoInit( p_access );
     CDDAMetaInfo( p_access, p_cdda->i_track );
 
-    if( p_playlist )
-    {
-        input_thread_t *p_input = (input_thread_t*)vlc_object_find( p_access, VLC_OBJECT_INPUT, FIND_PARENT );
-        if( p_input )
-        {
-            p_item = playlist_ItemGetByInput( p_playlist, input_GetItem(p_input), false );
-
-            if( p_item == p_playlist->status.p_item && !b_single_track )
-                b_play = true;
-            else
-                b_play = false;
-            vlc_object_release( p_input );
-        }
-    }
-
     if( b_single_track && !p_cdda->b_nav_mode )
     {
         /*May fill out more information when the playlist user interface becomes
@@ -904,68 +849,77 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
         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 );
+        if( asprintf( &t->psz_name, _("Track %i"), i_track ) == -1 )
+            t->psz_name = NULL;
         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;
 
-        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 ) );
-        }
-
         p_cdda->i_titles = 1;
         p_access->info.i_update = INPUT_UPDATE_TITLE;
     }
     else
     {
-        input_title_t *t;
+        input_thread_t *p_input = (input_thread_t*)vlc_object_find( p_access, VLC_OBJECT_INPUT, FIND_PARENT );
+        if( !p_input )
+            return VLC_EGENERIC;
 
-        if( !p_cdda->b_nav_mode )
-            playlist_ItemToNode( p_playlist, p_item, false );
+        input_item_t *p_current = input_GetItem( p_input );
+        assert( p_current );
 
         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);
+            input_title_t *t;
 
             t = p_cdda->p_title[i] = vlc_input_title_New();
 
-            asprintf( &t->psz_name, _("Track %i"), i_track );
+            if( asprintf( &t->psz_name, _("Track %i"), i_track ) == -1 )
+                t->psz_name = NULL;
             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;
 
-            if ( ! p_cdda->b_nav_mode )
+            if( !p_cdda->b_nav_mode )
             {
-                p_child = CDDACreatePlaylistItem( p_access, p_cdda, p_playlist,
-                                                  p_item, i_track );
+                input_item_t *p_child;
+                char *psz_mrl = CDDAFormatMRL( p_access, i_track  );
+                char *psz_title = CDDAFormatTitle( p_access, 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);
+                mtime_t i_mduration = i_track_frames * (CLOCK_FREQ / CDIO_CD_FRAMES_PER_SEC) ;
+
+                p_child = input_item_NewWithType( VLC_OBJECT( p_access ),
+                                                  psz_mrl, psz_title, 0, NULL, 0, i_mduration,
+                                                  ITEM_TYPE_DISC );
+                if( p_child )
+                {
+                    input_item_CopyOptions( p_current, p_child );
+
+                    input_item_AddSubItem( p_current, p_child );
+
+                    vlc_gc_decref( p_child );
+                }
+                free( psz_mrl );
+                free( psz_title );
             }
         }
 
         p_cdda->i_titles = p_cdda->i_tracks;
         p_access->info.i_update |= INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE;
-        if( p_item )
+        if( p_current )
         {
-            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 ) );
+            input_item_SetDuration( p_current,
+                                    (mtime_t) p_access->info.i_size * (CLOCK_FREQ / CDIO_CD_FRAMES_PER_SEC) );
+            input_item_SetURI( p_current, CDDAFormatMRL( p_access, p_cdda->i_track ) );
         }
-    }
 
-    if( b_play )
-    {
-        playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true,
-                          p_playlist->status.p_item, NULL );
+        vlc_object_release( p_input );
     }
 
-    if (p_playlist) vlc_object_release( p_playlist );
     return VLC_SUCCESS;
 }