return NULL;
}
- p_access->info.i_update |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SIZE;
+ p_access->info.i_update |= INPUT_UPDATE_TITLE;
p_access->info.i_title++;
- p_access->info.i_size =
- p_cdda->p_title[p_access->info.i_title]->i_size;
- p_access->info.i_pos = 0;
p_cdda->i_track++;
+
+ if ( p_cdda-> b_nav_mode ) {
+ char *psz_title = CDDAFormatTitle( p_access, p_cdda->i_track );
+ input_Control( p_cdda->p_input, INPUT_SET_NAME, psz_title );
+ free(psz_title);
+ } else {
+ p_access->info.i_size =
+ p_cdda->p_title[p_access->info.i_title]->i_size;
+ p_access->info.i_pos = 0;
+ p_access->info.i_update |= INPUT_UPDATE_SIZE;
+ }
}
/* Possibly adjust i_blocks so we don't read past the end of a track. */
{
cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys;
- p_cdda->i_lsn = cdio_get_track_lsn(p_cdda->p_cdio, p_cdda->i_track)
- + (i_pos / CDIO_CD_FRAMESIZE_RAW);
+ p_cdda->i_lsn = (i_pos / CDIO_CD_FRAMESIZE_RAW);
+
+ if ( ! p_cdda->b_nav_mode )
+ p_cdda->i_lsn += cdio_get_track_lsn(p_cdda->p_cdio, p_cdda->i_track);
+
+ /* Seeked backwards and we are doing disc mode. */
+ if ( p_cdda->b_nav_mode && p_access->info.i_pos > i_pos ) {
+ track_t i_track;
+ char *psz_title;
+
+ for( i_track = p_cdda->i_track;
+ i_track > 1 &&
+ p_cdda->i_lsn < cdio_get_track_lsn(p_cdda->p_cdio, i_track);
+ i_track--, p_access->info.i_title-- ) ;
+
+ p_cdda->i_track = i_track;
+ p_access->info.i_update |= INPUT_UPDATE_TITLE;
+ psz_title = CDDAFormatTitle( p_access, p_cdda->i_track );
+ input_Control( p_cdda->p_input, INPUT_SET_NAME,
+ psz_title );
+ free(psz_title);
+
+ }
+
p_access->info.i_pos = i_pos;
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT|INPUT_DBG_SEEK),
* Open: open cdda device or image file and initialize structures
* for subsequent operations.
*****************************************************************************/
-int E_(CDDAOpen)( vlc_object_t *p_this )
+int
+CDDAOpen( vlc_object_t *p_this )
{
access_t *p_access = (access_t*)p_this;
char * psz_source = NULL;
p_cdda->i_tracks = 0;
p_cdda->i_titles = 0;
p_cdda->i_track = i_track;
- p_cdda->i_debug = config_GetInt(p_this, MODULE_STRING "-debug");
+ p_cdda->i_debug = config_GetInt(p_this, MODULE_STRING
+ "-debug");
+ p_cdda->b_nav_mode = config_GetInt(p_this, MODULE_STRING
+ "-navigation-mode" );
p_cdda->i_blocks_per_read
= config_GetInt(p_this, MODULE_STRING "-blocks-per-read");
/*****************************************************************************
* CDDAClose: closes cdda and frees any resources associded with it.
*****************************************************************************/
-void E_(CDDAClose)( vlc_object_t *p_this )
+void
+CDDAClose (vlc_object_t *p_this )
{
access_t *p_access = (access_t *) p_this;
cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys;
case ACCESS_GET_TITLE_INFO:
{
- unsigned int psz_mrl_max = strlen(CDDA_MRL_PREFIX)
- + strlen(p_cdda->psz_source) + 1;
input_title_t ***ppp_title =
(input_title_t***)va_arg( args, input_title_t*** );
- char *psz_mrl = malloc( psz_mrl_max );
pi_int = (int*)va_arg( args, int* );
*((int*)va_arg( args, int* )) = 1; /* Title offset */
"GET TITLE: i_tracks %d, i_tracks %d",
p_cdda->i_tracks, p_cdda->i_tracks );
- if( psz_mrl == NULL ) {
- msg_Warn( p_access, "out of memory" );
- } else {
- snprintf(psz_mrl, psz_mrl_max, "%s%s",
- CDDA_MRL_PREFIX, p_cdda->psz_source);
- CDDAMetaInfo( p_access, CDIO_INVALID_TRACK, psz_mrl );
- free(psz_mrl);
+ CDDAMetaInfo( p_access, CDIO_INVALID_TRACK );
+
+ if ( p_cdda->b_nav_mode) {
+ char *psz_title =
+ CDDAFormatTitle( p_access, p_cdda->i_track );
+ input_Control( p_cdda->p_input, INPUT_SET_NAME,
+ psz_title );
+ free(psz_title);
}
/* Duplicate title info */
if( i != p_access->info.i_title )
{
/* Update info */
- p_access->info.i_update |=
- INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE;
+ p_access->info.i_update |= INPUT_UPDATE_TITLE;
p_access->info.i_title = i;
- p_access->info.i_size = p_cdda->p_title[i]->i_size;
- p_access->info.i_pos = 0;
+ if ( p_cdda->b_nav_mode) {
+ char *psz_title =
+ CDDAFormatTitle( p_access, i+1 );
+ input_Control( p_cdda->p_input, INPUT_SET_NAME,
+ psz_title );
+ free(psz_title);
+ p_cdda->i_track = i+1;
+ p_access->info.i_pos =
+ cdio_get_track_lsn( p_cdda->p_cdio, p_cdda->i_track )
+ * CDIO_CD_FRAMESIZE_RAW;
+ } else {
+ p_access->info.i_update |= INPUT_UPDATE_SIZE;
+ p_access->info.i_size = p_cdda->p_title[i]->i_size;
+ p_access->info.i_pos = 0;
+ }
/* Next sector to read */
p_cdda->i_lsn =
* Open: open cdda device or image file and initialize structures
* for subsequent operations.
*****************************************************************************/
-int E_(CDDAOpen) ( vlc_object_t * );
+int CDDAOpen ( vlc_object_t * );
/*****************************************************************************
* CDDAClose: closes cdda and frees any resources associded with it.
*****************************************************************************/
-void E_(CDDAClose) ( vlc_object_t * );
+void CDDAClose ( vlc_object_t * );
#include "cdda.h"
int
-E_(CDDADebugCB) ( vlc_object_t *p_this, const char *psz_name,
+CDDADebugCB ( vlc_object_t *p_this, const char *psz_name,
vlc_value_t oldval, vlc_value_t val, void *p_data )
{
cdda_data_t *p_cdda;
/* FIXME: could probably shorten some of the below boilerplate code...
*/
int
-E_(CDDBEnabledCB) ( vlc_object_t *p_this, const char *psz_name,
+CDDBEnabledCB ( vlc_object_t *p_this, const char *psz_name,
vlc_value_t oldval, vlc_value_t val, void *p_data )
{
cdda_data_t *p_cdda;
}
int
-E_(CDTextEnabledCB) ( vlc_object_t *p_this, const char *psz_name,
+CDTextEnabledCB ( vlc_object_t *p_this, const char *psz_name,
vlc_value_t oldval, vlc_value_t val, void *p_data )
{
cdda_data_t *p_cdda;
if (p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT))
{
- msg_Dbg( p_cdda_input, "Old CDText Enabled (x%0x) %d, new (x%0x) %d",
- p_cdda->b_cdtext_enabled, p_cdda->b_cdtext_enabled,
- val.b_bool, val.b_bool);
+ msg_Dbg( p_cdda_input, "Old CDText Enabled %d, new %d",
+ p_cdda->b_cdtext_enabled, val.b_bool);
}
p_cdda->b_cdtext_enabled = val.b_bool;
return VLC_SUCCESS;
}
int
-E_(CDTextPreferCB) ( vlc_object_t *p_this, const char *psz_name,
+CDDANavModeCB( vlc_object_t *p_this, const char *psz_name,
+ vlc_value_t oldval, vlc_value_t val, void *p_data )
+{
+ cdda_data_t *p_cdda;
+
+ if (NULL == p_cdda_input) return VLC_EGENERIC;
+
+ p_cdda = (cdda_data_t *)p_cdda_input->p_sys;
+
+ if (p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT))
+ {
+ msg_Dbg( p_cdda_input,
+ "Old Navigation Mode Enabled %d, new %d",
+ p_cdda->b_nav_mode, val.b_bool);
+ }
+ p_cdda->b_nav_mode = val.b_bool;
+ return VLC_SUCCESS;
+}
+
+int
+CDTextPreferCB ( vlc_object_t *p_this, const char *psz_name,
vlc_value_t oldval, vlc_value_t val, void *p_data )
{
cdda_data_t *p_cdda;
}
int
-E_(CDDABlocksPerReadCB) ( vlc_object_t *p_this, const char *psz_name,
+CDDABlocksPerReadCB ( vlc_object_t *p_this, const char *psz_name,
vlc_value_t oldval, vlc_value_t val, void *p_data )
{
cdda_data_t *p_cdda;
#define MAX_BLOCKS_PER_READ 25
#define DEFAULT_BLOCKS_PER_READ 20
-int E_(CDDADebugCB) ( vlc_object_t *p_this, const char *psz_name,
+int CDDADebugCB ( vlc_object_t *p_this, const char *psz_name,
vlc_value_t oldval, vlc_value_t val,
void *p_data );
-int E_(CDDBEnabledCB)( vlc_object_t *p_this, const char *psz_name,
+int CDDBEnabledCB( vlc_object_t *p_this, const char *psz_name,
vlc_value_t oldval, vlc_value_t val,
void *p_data );
-int E_(CDTextEnabledCB)( vlc_object_t *p_this, const char *psz_name,
+int CDTextEnabledCB( vlc_object_t *p_this, const char *psz_name,
vlc_value_t oldval, vlc_value_t val,
void *p_data );
-int E_(CDTextPreferCB)( vlc_object_t *p_this, const char *psz_name,
+int CDTextPreferCB( vlc_object_t *p_this, const char *psz_name,
vlc_value_t oldval, vlc_value_t val,
void *p_data );
+int CDDANavModeCB( vlc_object_t *p_this, const char *psz_name,
+ vlc_value_t oldval, vlc_value_t val,
+ void *p_data );
-int E_(CDDABlocksPerReadCB) ( vlc_object_t *p_this, const char *psz_name,
+
+int CDDABlocksPerReadCB ( vlc_object_t *p_this, const char *psz_name,
vlc_value_t oldval, vlc_value_t val,
void *p_data );
set_description( _("Compact Disc Digital Audio (CD-DA) input") );
set_capability( "access2", 10 /* compare with priority of cdda */ );
set_shortname( N_("Audio CD"));
- set_callbacks( E_(CDDAOpen), E_(CDDAClose) );
+ set_callbacks( CDDAOpen, CDDAClose );
add_shortcut( "cddax" );
add_shortcut( "cd" );
set_category( CAT_INPUT );
set_subcategory( SUBCAT_INPUT_ACCESS );
/* Configuration options */
- add_integer ( MODULE_STRING "-debug", 0, E_(CDDADebugCB),
+ add_integer ( MODULE_STRING "-debug", 0, CDDADebugCB,
N_("If nonzero, this gives additional debug information."),
DEBUG_LONGTEXT, VLC_TRUE );
CACHING_LONGTEXT, VLC_TRUE );
add_integer( MODULE_STRING "-blocks-per-read",
- DEFAULT_BLOCKS_PER_READ, E_(CDDABlocksPerReadCB),
+ DEFAULT_BLOCKS_PER_READ, CDDABlocksPerReadCB,
N_("Number of blocks per CD read"),
BLOCKS_PER_READ_LONGTEXT, VLC_TRUE );
#ifdef HAVE_LIBCDDB
add_string( MODULE_STRING "-cddb-title-format",
- "Track %T. %t - %p", NULL,
+ "Track %T. %t - %p %A", NULL,
N_("Format to use in playlist \"title\" field when using CDDB"),
CDDB_TITLE_FMT_LONGTEXT, VLC_TRUE );
- add_bool( MODULE_STRING "-cddb-enabled", 1, E_(CDDBEnabledCB),
+ add_bool( MODULE_STRING "-cddb-enabled", 1, CDDBEnabledCB,
N_("Do CDDB lookups?"),
N_("If set, lookup CD-DA track information using the CDDB "
"protocol"),
N_("Directory to cache CDDB requests"),
VLC_TRUE );
- add_bool( MODULE_STRING "-cdtext-prefer", VLC_TRUE, E_(CDTextPreferCB),
+ add_bool( MODULE_STRING "-cdtext-prefer", VLC_TRUE, CDTextPreferCB,
N_("Prefer CD-Text info to CDDB info?"),
N_("If set, CD-Text information will be preferred "
"to CDDB information when both are available"),
#endif
- add_bool( MODULE_STRING "-cdtext-enabled", VLC_TRUE, E_(CDTextEnabledCB),
+ add_bool( MODULE_STRING "-cdtext-enabled", VLC_TRUE, CDTextEnabledCB,
N_("Do CD-Text lookups?"),
N_("If set, get CD-Text information"),
VLC_FALSE );
+ add_bool( MODULE_STRING "-navigation-mode", VLC_TRUE,
+#if FIXED
+ CDDANavModeCB,
+#else
+ NULL,
+#endif
+ N_("Use Navigation-style playback?"),
+ N_("If set, tracks are navigated via Navagation rather than "
+ "a playlist entries"),
+ VLC_FALSE );
+
vlc_module_end();
WAVEHEADER waveheader; /* Wave header for the output data */
vlc_bool_t b_header;
+ vlc_bool_t b_nav_mode;
input_thread_t *p_input;
const char format_str[], const char *psz_mrl,
track_t i_track);
+static char *CDDAFormatMRL( const access_t *p_access, track_t i_track );
+
#ifdef HAVE_LIBCDDB
#define free_and_dup(var, val) \
CD.
*/
void
-CDDAMetaInfo( access_t *p_access, track_t i_track, /*const*/ char *psz_mrl )
+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 = psz_mrl;
+ char *psz_meta_title = CDDAFormatMRL( p_access, i_track );
char *psz_meta_artist = NULL;
- char *psz_name = NULL;
- char *config_varname = MODULE_STRING "-title-format";
if ( ! p_cdda ) return;
/* Set up for Meta and name for CDDB access. */
if ( p_cdda->b_cddb_enabled && p_cdda->cddb.disc )
{
- if (p_cdda->b_cddb_enabled)
- {
- config_varname = MODULE_STRING "-cddb-title-format";
- }
-
if( CDIO_INVALID_TRACK == i_track )
{
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;
+ char *psz_mrl = CDDAFormatMRL( p_access, i_track );
snprintf(psz_track, TITLE_MAX, "%s %02d", _("Track"), i_track);
_("Duration"), "%s",
secstotimestr( psz_buffer, i_duration ) );
- asprintf(&psz_mrl, "%s%s@T%u",
- CDDA_MRL_PREFIX, p_cdda->psz_source, i_track);
-
input_Control( p_cdda->p_input, INPUT_ADD_INFO, psz_track,
_("MRL"), "%s", psz_mrl );
free(psz_mrl);
to CDDB or CD-Text values or the default value depending on
availablity and user preferences.
- We also set above config_varname to the format used
-
So now add the title and artist to VLC's meta, and the
name as shown in the status bar and playlist entry.
*/
if ( CDIO_INVALID_TRACK != i_track )
{
- psz_name =
- CDDAFormatStr( p_access, p_cdda,
- config_GetPsz( p_access, config_varname ),
- psz_mrl, i_track );
-
+ char *psz_name = CDDAFormatTitle( p_access, i_track ) ;
input_Control( p_cdda->p_input, INPUT_SET_NAME, psz_name );
+ free(psz_name);
}
}
}
%Y : The year 19xx or 20xx **
%% : a %
*/
-static char *
+char *
CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
const char format_str[], const char *psz_mrl, track_t i_track)
{
return strdup(temp_str);
}
+/* Return a MRL for the given track. The caller must free the
+ allocated string. */
+static char *
+CDDAFormatMRL( const access_t *p_access, track_t i_track )
+{
+ cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys;
+ const unsigned int psz_mrl_max = strlen(CDDA_MRL_PREFIX)
+ + strlen(p_cdda->psz_source) +
+ + strlen("@T") + strlen("100") + 1;
+ char *psz_mrl = malloc( psz_mrl_max );
+
+ if (CDIO_INVALID_TRACK == i_track)
+ snprintf(psz_mrl, psz_mrl_max, "%s%s",
+ CDDA_MRL_PREFIX, p_cdda->psz_source);
+ else
+ snprintf(psz_mrl, psz_mrl_max, "%s%s@T%u",
+ CDDA_MRL_PREFIX, p_cdda->psz_source, i_track);
+ return psz_mrl;
+}
+
+
+/* Return a title string as specified by the titel format string for the
+ given track. The caller must free the allocated string. */
+char *
+CDDAFormatTitle( const access_t *p_access, track_t i_track )
+{
+
+ char *config_varname = MODULE_STRING "-title-format";
+ cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys;
+ char *psz_mrl = CDDAFormatMRL( p_access, i_track );
+
+ if( psz_mrl )
+ {
+ char *psz_name;
+#ifdef HAVE_LIBCDDB
+ 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;
+ }
+ return(NULL);
+}
+
/* Adds a string-valued entry to the playlist information under "Track"
if the string is not null or the null string.
*/
"%s", FIELD); \
}
-playlist_item_t *
+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, char *psz_mrl, int psz_mrl_max )
+ 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;
- char *config_varname = MODULE_STRING "-title-format";
+ char *psz_title = NULL;
+ char *psz_mrl = NULL;
playlist_item_t *p_child = NULL;
- if( !p_item )
- {
- return NULL;
- }
-
-#ifdef HAVE_LIBCDDB
- if (p_cdda->b_cddb_enabled)
- {
- config_varname = MODULE_STRING "-cddb-title-format";
- }
-#endif /*HAVE_LIBCDDB*/
-
+ if( !p_item ) return NULL;
- snprintf(psz_mrl, psz_mrl_max, "%s%s@T%u",
- CDDA_MRL_PREFIX, p_cdda->psz_source, i_track);
-
- psz_title = CDDAFormatStr( p_access, p_cdda,
- config_GetPsz( p_access, config_varname ),
- psz_mrl, i_track);
+ 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 );
p_child->input.i_duration = i_mduration;
+ free(psz_mrl);
+ free(psz_title);
if( !p_child ) return NULL;
vlc_bool_t b_single_track )
{
int i;
- playlist_t * p_playlist;
- char * psz_mrl = NULL;
- unsigned int psz_mrl_max = strlen(CDDA_MRL_PREFIX)
- + strlen(p_cdda->psz_source) +
- + strlen("@T") + strlen("100") + 1;
+ playlist_t * p_playlist = NULL;
const track_t i_first_track = p_cdda->i_first_track;
- playlist_item_t *p_item;
+ playlist_item_t *p_item = NULL;
vlc_bool_t b_play = VLC_FALSE;
+ track_t i_track;
#ifdef HAVE_LIBCDDB
p_cdda->b_cddb_enabled =
return VLC_SUCCESS;
#endif
- psz_mrl = malloc( psz_mrl_max );
-
- if( psz_mrl == NULL )
- {
- msg_Warn( p_access, "out of memory" );
- return VLC_ENOMEM;
- }
-
- p_playlist = (playlist_t *) vlc_object_find( p_access, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
- if( !p_playlist )
- {
- msg_Warn( p_access, "can't find playlist" );
- free(psz_mrl);
- return VLC_EGENERIC;
+ if (! p_cdda->b_nav_mode ) {
+ p_playlist = (playlist_t *) vlc_object_find( p_access,
+ VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( !p_playlist )
+ {
+ msg_Warn( p_access, "can't find playlist" );
+ return VLC_EGENERIC;
+ }
}
- if( b_single_track )
- {
- snprintf(psz_mrl, psz_mrl_max, "%s%s@T%u", CDDA_MRL_PREFIX,
- p_cdda->psz_source, p_cdda->i_track);
- CDDAMetaInfoInit( p_access );
- CDDAMetaInfo( p_access, p_cdda->i_track, psz_mrl );
+ if( b_single_track || p_cdda->b_nav_mode ) {
+ i_track = p_cdda->i_track;
}
else
{
- snprintf(psz_mrl, psz_mrl_max, "%s%s", CDDA_MRL_PREFIX,
- p_cdda->psz_source);
- CDDAMetaInfoInit( p_access );
- CDDAMetaInfo( p_access, CDIO_INVALID_TRACK, psz_mrl );
+ i_track = CDIO_INVALID_TRACK;
}
+ CDDAMetaInfoInit( p_access );
+ CDDAMetaInfo( p_access, p_cdda->i_track );
- p_item = playlist_LockItemGetByInput( p_playlist,
+ if (p_playlist) {
+ p_item = playlist_LockItemGetByInput( p_playlist,
((input_thread_t *)p_access->p_parent)->input.p_item );
- if( p_item == p_playlist->status.p_item && !b_single_track )
- {
- b_play = VLC_TRUE;
- }
- else
- {
- b_play = VLC_FALSE;
+ if( p_item == p_playlist->status.p_item && !b_single_track )
+ {
+ b_play = VLC_TRUE;
+ }
+ else
+ {
+ b_play = VLC_FALSE;
+ }
}
if( b_single_track )
t->i_length = I64C(1000000) * t->i_size / CDDA_FREQUENCY_SAMPLE / 4;
- CDDAAddMetaToItem( p_access, p_cdda, p_item, i_track, VLC_FALSE );
+ if (p_item)
+ CDDAAddMetaToItem( p_access, p_cdda, p_item, i_track, VLC_FALSE );
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_item->input.psz_uri = strdup(psz_mrl);
+ p_item->input.psz_uri = CDDAFormatMRL(p_access, i_track);
p_item->input.i_duration = i_track_frames
* (CLOCK_FREQ / CDIO_CD_FRAMES_PER_SEC);
}
else
{
- input_title_t *t;
- playlist_ItemToNode( p_playlist, p_item );
+ input_title_t *t;
+
+
+ if ( ! p_cdda->b_nav_mode )
+ playlist_ItemToNode( p_playlist, p_item );
+
for( i = 0 ; i < p_cdda->i_tracks ; i++ )
{
playlist_item_t *p_child;
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 = I64C(1000000) * t->i_size
+ / CDDA_FREQUENCY_SAMPLE / 4;
- p_child = CDDACreatePlaylistItem( p_access, p_cdda, p_playlist,
- p_item,
- i_track, psz_mrl,
- psz_mrl_max ) ;
- CDDAAddMetaToItem( p_access, p_cdda, p_child, i_track, VLC_TRUE );
+ 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,
+ VLC_TRUE );
+ }
}
p_cdda->i_titles = p_cdda->i_tracks;
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;
- p_item->input.i_duration =
- p_access->info.i_size * (CLOCK_FREQ / CDIO_CD_FRAMES_PER_SEC) ;
- p_item->input.psz_uri = strdup(psz_mrl);
+ if (p_item) {
+ p_item->input.i_duration =
+ p_access->info.i_size * (CLOCK_FREQ / CDIO_CD_FRAMES_PER_SEC) ;
+ p_item->input.psz_uri = CDDAFormatMRL(p_access,
+ p_cdda->i_track);
+ }
}
+
if( b_play )
{
playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
p_playlist->status.i_view,
p_playlist->status.p_item, NULL );
+ vlc_object_release( p_playlist );
}
- vlc_object_release( p_playlist );
-
return VLC_SUCCESS;
}
we handle Meta Information requests and basically copy what we've
saved here.
*/
-void CDDAMetaInfo( access_t *p_access, track_t i_track,
- /*const*/ char *psz_mrl );
+void CDDAMetaInfo( access_t *p_access, track_t i_track );
/*
Saves Meta Information about the CD-DA.
*/
void CDDAMetaInfoInit( access_t *p_access );
+char *CDDAFormatTitle( const access_t *p_access, track_t i_track );
-/*
- Creates a playlist item filling the meta information about that playlist
- item.
- */
-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, char *psz_mrl, int psz_mrl_max );