X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fcdda%2Finfo.c;h=b0de8285b6caadf5ab00dc43080eb408c684dd46;hb=b69133b00b2b7c8e8ee8dadc317f17f41a4d1bbb;hp=64d62f50dc3e6b08915bfa81a6ba44c086eea7d2;hpb=2a5fae44a59cc6875825fdf16ab15a1ed305f6cc;p=vlc diff --git a/modules/access/cdda/info.c b/modules/access/cdda/info.c index 64d62f50dc..b0de8285b6 100644 --- a/modules/access/cdda/info.c +++ b/modules/access/cdda/info.c @@ -36,9 +36,8 @@ #include #include "info.h" -#ifdef HAVE_ERRNO_H -# include -#endif +#include +#include 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; }