Commit 3a9b48da authored by Clément Stenac's avatar Clément Stenac

CDDAX:

    - coding style fixes
    - adapted to new playlist API
    - only put generic things in Meta-information

wxWidgets:
    - Fixed playlist updating

core:
    - added playlist_ItemGetByInput
    - implemented input_item_t.b_fixed name : if this is set, the interface should not try to "improve" the display string.
parent 180ca722
...@@ -62,6 +62,8 @@ struct input_item_t ...@@ -62,6 +62,8 @@ struct input_item_t
int i_es; /**< Number of es format descriptions */ int i_es; /**< Number of es format descriptions */
es_format_t **es; /**< Pointer to an array of es formats */ es_format_t **es; /**< Pointer to an array of es formats */
vlc_bool_t b_fixed_name; /**< Can the interface change the name ?*/
vlc_mutex_t lock; /**< Item cannot be changed without this lock */ vlc_mutex_t lock; /**< Item cannot be changed without this lock */
}; };
...@@ -85,6 +87,7 @@ static inline void vlc_input_item_Init( vlc_object_t *p_o, input_item_t *p_i ) ...@@ -85,6 +87,7 @@ static inline void vlc_input_item_Init( vlc_object_t *p_o, input_item_t *p_i )
p_i->pp_categories = 0; p_i->pp_categories = 0;
p_i->es = 0; p_i->es = 0;
p_i->i_type = ITEM_TYPE_UNKNOWN; p_i->i_type = ITEM_TYPE_UNKNOWN;
p_i->b_fixed_name = VLC_TRUE;
vlc_mutex_init( p_o, &p_i->lock ); vlc_mutex_init( p_o, &p_i->lock );
} }
......
...@@ -112,10 +112,12 @@ static void ...@@ -112,10 +112,12 @@ static void
cddb_log_handler (cddb_log_level_t level, const char message[]) cddb_log_handler (cddb_log_level_t level, const char message[])
{ {
cdda_data_t *p_cdda = (cdda_data_t *)p_cdda_input->p_sys; cdda_data_t *p_cdda = (cdda_data_t *)p_cdda_input->p_sys;
switch (level) { switch (level)
{
case CDDB_LOG_DEBUG: case CDDB_LOG_DEBUG:
case CDDB_LOG_INFO: case CDDB_LOG_INFO:
if (!(p_cdda->i_debug & INPUT_DBG_CDDB)) return; if (!(p_cdda->i_debug & INPUT_DBG_CDDB)) return;
/* Fall through if to warn case */ /* Fall through if to warn case */
default: default:
cdio_log_handler (level, message); cdio_log_handler (level, message);
...@@ -135,11 +137,13 @@ uninit_log_handler (cdio_log_level_t level, const char message[]) ...@@ -135,11 +137,13 @@ uninit_log_handler (cdio_log_level_t level, const char message[])
if (p_cdda_input) if (p_cdda_input)
p_cdda = (cdda_data_t *)p_cdda_input->p_sys; p_cdda = (cdda_data_t *)p_cdda_input->p_sys;
switch (level) { switch (level)
{
case CDIO_LOG_DEBUG: case CDIO_LOG_DEBUG:
case CDIO_LOG_INFO: case CDIO_LOG_INFO:
if (!p_cdda || !(p_cdda->i_debug & (INPUT_DBG_CDIO|INPUT_DBG_CDDB))) if (!p_cdda || !(p_cdda->i_debug & (INPUT_DBG_CDIO|INPUT_DBG_CDDB)))
return; return;
/* Fall through if to warn case */ /* Fall through if to warn case */
case CDIO_LOG_WARN: case CDIO_LOG_WARN:
fprintf(stderr, "WARN: %s\n", message); fprintf(stderr, "WARN: %s\n", message);
...@@ -151,8 +155,7 @@ uninit_log_handler (cdio_log_level_t level, const char message[]) ...@@ -151,8 +155,7 @@ uninit_log_handler (cdio_log_level_t level, const char message[])
fprintf(stderr, "ASSERT ERROR: %s\n", message); fprintf(stderr, "ASSERT ERROR: %s\n", message);
break; break;
default: default:
fprintf(stderr, "UNKNOWN ERROR: %s\n%s %d\n", fprintf(stderr, "UNKNOWN ERROR: %s\n%s %d\n", message,
message,
"The above message had unknown cdio log level", "The above message had unknown cdio log level",
level); level);
} }
...@@ -166,8 +169,7 @@ uninit_log_handler (cdio_log_level_t level, const char message[]) ...@@ -166,8 +169,7 @@ uninit_log_handler (cdio_log_level_t level, const char message[])
* read. It is also possible if we haven't read a RIFF header in which * read. It is also possible if we haven't read a RIFF header in which
* case one that we creaded during Open/Initialization is returned. * case one that we creaded during Open/Initialization is returned.
*****************************************************************************/ *****************************************************************************/
static block_t * static block_t * CDDAReadBlocks( access_t * p_access )
CDDAReadBlocks( access_t * p_access )
{ {
block_t *p_block; block_t *p_block;
cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys; cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys;
...@@ -246,8 +248,7 @@ CDDAReadBlocks( access_t * p_access ) ...@@ -246,8 +248,7 @@ CDDAReadBlocks( access_t * p_access )
* CDDASeek - change position for subsequent reads. For example, this * CDDASeek - change position for subsequent reads. For example, this
* can happen if the user moves a position slider bar in a GUI. * can happen if the user moves a position slider bar in a GUI.
****************************************************************************/ ****************************************************************************/
static int static int CDDASeek( access_t * p_access, int64_t i_pos )
CDDASeek( access_t * p_access, int64_t i_pos )
{ {
cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys; cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys;
...@@ -269,8 +270,7 @@ CDDASeek( access_t * p_access, int64_t i_pos ) ...@@ -269,8 +270,7 @@ CDDASeek( access_t * p_access, int64_t i_pos )
* Open: open cdda device or image file and initialize structures * Open: open cdda device or image file and initialize structures
* for subsequent operations. * for subsequent operations.
*****************************************************************************/ *****************************************************************************/
int int E_(CDDAOpen)( vlc_object_t *p_this )
E_(CDDAOpen)( vlc_object_t *p_this )
{ {
access_t *p_access = (access_t*)p_this; access_t *p_access = (access_t*)p_this;
char * psz_source = NULL; char * psz_source = NULL;
...@@ -319,12 +319,14 @@ E_(CDDAOpen)( vlc_object_t *p_this ) ...@@ -319,12 +319,14 @@ E_(CDDAOpen)( vlc_object_t *p_this )
psz_source = var_CreateGetString( p_this, "cd-audio" ); psz_source = var_CreateGetString( p_this, "cd-audio" );
if( !psz_source || !*psz_source ) { if( !psz_source || !*psz_source )
{
/* Scan for a CD-ROM drive with a CD-DA in it. */ /* Scan for a CD-ROM drive with a CD-DA in it. */
char **cd_drives = char **cd_drives =
cdio_get_devices_with_cap(NULL, CDIO_FS_AUDIO, false); cdio_get_devices_with_cap(NULL, CDIO_FS_AUDIO, false);
if (NULL == cd_drives || NULL == cd_drives[0] ) { if (NULL == cd_drives || NULL == cd_drives[0] )
{
msg_Err( p_access, msg_Err( p_access,
"libcdio couldn't find something with a CD-DA in it" ); "libcdio couldn't find something with a CD-DA in it" );
if (cd_drives) cdio_free_device_list(cd_drives); if (cd_drives) cdio_free_device_list(cd_drives);
...@@ -382,7 +384,8 @@ E_(CDDAOpen)( vlc_object_t *p_this ) ...@@ -382,7 +384,8 @@ E_(CDDAOpen)( vlc_object_t *p_this )
p_cdda->i_blocks_per_read = DEFAULT_BLOCKS_PER_READ; p_cdda->i_blocks_per_read = DEFAULT_BLOCKS_PER_READ;
if ( p_cdda->i_blocks_per_read < MIN_BLOCKS_PER_READ if ( p_cdda->i_blocks_per_read < MIN_BLOCKS_PER_READ
|| p_cdda->i_blocks_per_read > MAX_BLOCKS_PER_READ ) { || p_cdda->i_blocks_per_read > MAX_BLOCKS_PER_READ )
{
msg_Warn( p_cdda_input, msg_Warn( p_cdda_input,
"Number of blocks (%d) has to be between %d and %d. " "Number of blocks (%d) has to be between %d and %d. "
"Using %d.", "Using %d.",
...@@ -392,7 +395,6 @@ E_(CDDAOpen)( vlc_object_t *p_this ) ...@@ -392,7 +395,6 @@ E_(CDDAOpen)( vlc_object_t *p_this )
p_cdda->i_blocks_per_read = DEFAULT_BLOCKS_PER_READ; p_cdda->i_blocks_per_read = DEFAULT_BLOCKS_PER_READ;
} }
dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT), "%s", psz_source ); dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT), "%s", psz_source );
/* Set up p_access */ /* Set up p_access */
...@@ -439,6 +441,7 @@ E_(CDDAOpen)( vlc_object_t *p_this ) ...@@ -439,6 +441,7 @@ E_(CDDAOpen)( vlc_object_t *p_this )
/* PTS delay */ /* PTS delay */
var_Create( p_access, MODULE_STRING "-caching", var_Create( p_access, MODULE_STRING "-caching",
VLC_VAR_INTEGER|VLC_VAR_DOINHERIT ); VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
vlc_object_release( p_cdda->p_input );
return VLC_SUCCESS; return VLC_SUCCESS;
error: error:
...@@ -446,6 +449,7 @@ E_(CDDAOpen)( vlc_object_t *p_this ) ...@@ -446,6 +449,7 @@ E_(CDDAOpen)( vlc_object_t *p_this )
free( p_cdda ); free( p_cdda );
error2: error2:
free( psz_source ); free( psz_source );
vlc_object_release( p_cdda->p_input );
return i_rc; return i_rc;
} }
...@@ -453,8 +457,7 @@ E_(CDDAOpen)( vlc_object_t *p_this ) ...@@ -453,8 +457,7 @@ E_(CDDAOpen)( vlc_object_t *p_this )
/***************************************************************************** /*****************************************************************************
* CDDAClose: closes cdda and frees any resources associded with it. * CDDAClose: closes cdda and frees any resources associded with it.
*****************************************************************************/ *****************************************************************************/
void void E_(CDDAClose)( vlc_object_t *p_this )
E_(CDDAClose)( vlc_object_t *p_this )
{ {
access_t *p_access = (access_t *) p_this; access_t *p_access = (access_t *) p_this;
cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys; cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys;
...@@ -505,15 +508,16 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args ) ...@@ -505,15 +508,16 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
case ACCESS_GET_META: case ACCESS_GET_META:
{ {
vlc_meta_t **pp_meta = (vlc_meta_t**)va_arg( args, vlc_meta_t** ); vlc_meta_t **pp_meta = (vlc_meta_t**)va_arg( args, vlc_meta_t** );
if ( p_cdda->p_meta ) { if ( p_cdda->p_meta )
{
*pp_meta = vlc_meta_Duplicate( p_cdda->p_meta ); *pp_meta = vlc_meta_Duplicate( p_cdda->p_meta );
dbg_print( INPUT_DBG_META, "%s", "Meta copied" ); dbg_print( INPUT_DBG_META, "%s", "Meta copied" );
} else }
else
msg_Warn( p_access, "tried to copy NULL meta info" ); msg_Warn( p_access, "tried to copy NULL meta info" );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
return VLC_EGENERIC;
case ACCESS_CAN_SEEK: case ACCESS_CAN_SEEK:
case ACCESS_CAN_FASTSEEK: case ACCESS_CAN_FASTSEEK:
...@@ -522,14 +526,16 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args ) ...@@ -522,14 +526,16 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
{ {
vlc_bool_t *pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t* ); vlc_bool_t *pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t* );
*pb_bool = VLC_TRUE; *pb_bool = VLC_TRUE;
break; return VLC_SUCCESS;;
} }
/* */ /* */
case ACCESS_GET_MTU: case ACCESS_GET_MTU:
{
pi_int = (int*)va_arg( args, int * ); pi_int = (int*)va_arg( args, int * );
*pi_int = p_cdda-> i_blocks_per_read * CDIO_CD_FRAMESIZE_RAW; *pi_int = p_cdda-> i_blocks_per_read * CDIO_CD_FRAMESIZE_RAW;
break; break;
}
case ACCESS_GET_PTS_DELAY: case ACCESS_GET_PTS_DELAY:
{ {
...@@ -544,14 +550,20 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args ) ...@@ -544,14 +550,20 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
break; break;
case ACCESS_GET_TITLE_INFO: case ACCESS_GET_TITLE_INFO:
{ input_title_t ***ppp_title; {
input_title_t ***ppp_title;
ppp_title = (input_title_t***)va_arg( args, input_title_t*** ); ppp_title = (input_title_t***)va_arg( args, input_title_t*** );
pi_int = (int*)va_arg( args, int* ); pi_int = (int*)va_arg( args, int* );
*((int*)va_arg( args, int* )) = 1; /* Title offset */ *((int*)va_arg( args, int* )) = 1; /* Title offset */
/* Duplicate title info */ /* Duplicate title info */
/*** printf("+++ i_tracks %d, i_titles %d\n", printf("+++ i_tracks %d, i_titles %d\n",
p_cdda->i_tracks, p_cdda->i_titles); ***/ p_cdda->i_tracks, p_cdda->i_titles);
if( p_cdda->i_titles == 0 )
{
*pi_int = 0; ppp_title = NULL;
return VLC_SUCCESS;
}
*pi_int = p_cdda->i_titles; *pi_int = p_cdda->i_titles;
*ppp_title = malloc(sizeof( input_title_t **) * p_cdda->i_titles ); *ppp_title = malloc(sizeof( input_title_t **) * p_cdda->i_titles );
...@@ -563,10 +575,11 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args ) ...@@ -563,10 +575,11 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
(*ppp_title)[i] = (*ppp_title)[i] =
vlc_input_title_Duplicate( p_cdda->p_title[i] ); vlc_input_title_Duplicate( p_cdda->p_title[i] );
} }
}
break; break;
}
case ACCESS_SET_TITLE: case ACCESS_SET_TITLE:
{
i = (int)va_arg( args, int ); i = (int)va_arg( args, int );
if( i != p_access->info.i_title ) if( i != p_access->info.i_title )
{ {
...@@ -581,6 +594,7 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args ) ...@@ -581,6 +594,7 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
p_cdda->i_lsn = p_cdda->lsn[p_cdda->i_first_track+i]; p_cdda->i_lsn = p_cdda->lsn[p_cdda->i_first_track+i];
} }
break; break;
}
case ACCESS_SET_SEEKPOINT: case ACCESS_SET_SEEKPOINT:
case ACCESS_SET_PRIVATE_ID_STATE: case ACCESS_SET_PRIVATE_ID_STATE:
...@@ -607,8 +621,7 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args ) ...@@ -607,8 +621,7 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
We return the VLC-type status, e.g. VLC_SUCCESS, VLC_ENOMEM, etc. We return the VLC-type status, e.g. VLC_SUCCESS, VLC_ENOMEM, etc.
*****************************************************************************/ *****************************************************************************/
static int static int CDDAInit( access_t *p_access, cdda_data_t *p_cdda )
CDDAInit( access_t *p_access, cdda_data_t *p_cdda )
{ {
track_t i; track_t i;
discmode_t discmode = CDIO_DISC_MODE_NO_INFO; discmode_t discmode = CDIO_DISC_MODE_NO_INFO;
......
...@@ -34,7 +34,8 @@ E_(CDDADebugCB) ( vlc_object_t *p_this, const char *psz_name, ...@@ -34,7 +34,8 @@ E_(CDDADebugCB) ( vlc_object_t *p_this, const char *psz_name,
p_cdda = (cdda_data_t *)p_cdda_input->p_sys; p_cdda = (cdda_data_t *)p_cdda_input->p_sys;
if (p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT)) { if (p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT))
{
msg_Dbg( p_cdda_input, "Old debug (x%0x) %d, new debug (x%0x) %d", msg_Dbg( p_cdda_input, "Old debug (x%0x) %d, new debug (x%0x) %d",
p_cdda->i_debug, p_cdda->i_debug, val.i_int, val.i_int); p_cdda->i_debug, p_cdda->i_debug, val.i_int, val.i_int);
} }
...@@ -55,7 +56,8 @@ E_(CDDBEnabledCB) ( vlc_object_t *p_this, const char *psz_name, ...@@ -55,7 +56,8 @@ E_(CDDBEnabledCB) ( vlc_object_t *p_this, const char *psz_name,
p_cdda = (cdda_data_t *)p_cdda_input->p_sys; p_cdda = (cdda_data_t *)p_cdda_input->p_sys;
#ifdef HAVE_LIBCDDB #ifdef HAVE_LIBCDDB
if (p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT)) { if (p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT))
{
msg_Dbg( p_cdda_input, "Old CDDB Enabled (x%0x) %d, new (x%0x) %d", msg_Dbg( p_cdda_input, "Old CDDB Enabled (x%0x) %d, new (x%0x) %d",
p_cdda->b_cddb_enabled, p_cdda->b_cddb_enabled, p_cdda->b_cddb_enabled, p_cdda->b_cddb_enabled,
val.b_bool, val.b_bool); val.b_bool, val.b_bool);
...@@ -75,7 +77,8 @@ E_(CDTextEnabledCB) ( vlc_object_t *p_this, const char *psz_name, ...@@ -75,7 +77,8 @@ E_(CDTextEnabledCB) ( vlc_object_t *p_this, const char *psz_name,
p_cdda = (cdda_data_t *)p_cdda_input->p_sys; p_cdda = (cdda_data_t *)p_cdda_input->p_sys;
if (p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT)) { 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", 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, p_cdda->b_cdtext_enabled, p_cdda->b_cdtext_enabled,
val.b_bool, val.b_bool); val.b_bool, val.b_bool);
...@@ -95,7 +98,8 @@ E_(CDTextPreferCB) ( vlc_object_t *p_this, const char *psz_name, ...@@ -95,7 +98,8 @@ E_(CDTextPreferCB) ( vlc_object_t *p_this, const char *psz_name,
p_cdda = (cdda_data_t *)p_cdda_input->p_sys; p_cdda = (cdda_data_t *)p_cdda_input->p_sys;
#ifdef HAVE_LIBCDDB #ifdef HAVE_LIBCDDB
if (p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT)) { if ( p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT))
{
msg_Dbg( p_cdda_input, "Old CDText Prefer (x%0x) %d, new (x%0x) %d", msg_Dbg( p_cdda_input, "Old CDText Prefer (x%0x) %d, new (x%0x) %d",
p_cdda->b_cdtext_prefer, p_cdda->b_cdtext_prefer, p_cdda->b_cdtext_prefer, p_cdda->b_cdtext_prefer,
val.b_bool, val.b_bool); val.b_bool, val.b_bool);
...@@ -115,7 +119,8 @@ E_(CDDABlocksPerReadCB) ( vlc_object_t *p_this, const char *psz_name, ...@@ -115,7 +119,8 @@ E_(CDDABlocksPerReadCB) ( vlc_object_t *p_this, const char *psz_name,
p_cdda = (cdda_data_t *)p_cdda_input->p_sys; p_cdda = (cdda_data_t *)p_cdda_input->p_sys;
if (p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT)) { if (p_cdda->i_debug & (INPUT_DBG_CALL|INPUT_DBG_EXT))
{
msg_Dbg( p_cdda_input, "Old blocks per read: %d, new %d", msg_Dbg( p_cdda_input, "Old blocks per read: %d, new %d",
p_cdda->i_blocks_per_read, val.i_int); p_cdda->i_blocks_per_read, val.i_int);
} }
...@@ -123,11 +128,11 @@ E_(CDDABlocksPerReadCB) ( vlc_object_t *p_this, const char *psz_name, ...@@ -123,11 +128,11 @@ E_(CDDABlocksPerReadCB) ( vlc_object_t *p_this, const char *psz_name,
if (0 == val.i_int) val.i_int = DEFAULT_BLOCKS_PER_READ; if (0 == val.i_int) val.i_int = DEFAULT_BLOCKS_PER_READ;
if ( val.i_int >= MIN_BLOCKS_PER_READ && val.i_int <= MAX_BLOCKS_PER_READ ) if ( val.i_int >= MIN_BLOCKS_PER_READ && val.i_int <= MAX_BLOCKS_PER_READ )
p_cdda->i_blocks_per_read = val.i_int; p_cdda->i_blocks_per_read = val.i_int;
else { else
{
msg_Warn( p_cdda_input, msg_Warn( p_cdda_input,
"Number of blocks (%d) has to be between %d and %d. No change.", "Number of blocks (%d) has to be between %d and %d. No change.",
val.i_int, MIN_BLOCKS_PER_READ, MAX_BLOCKS_PER_READ ); val.i_int, MIN_BLOCKS_PER_READ, MAX_BLOCKS_PER_READ );
} }
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -47,10 +47,8 @@ ...@@ -47,10 +47,8 @@
if (val) var=strdup(val); if (val) var=strdup(val);
static void static void GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
{ {
int i, i_matches; int i, i_matches;
cddb_conn_t *conn = cddb_new(); cddb_conn_t *conn = cddb_new();
const CdIo *p_cdio = p_cdda->p_cdio; const CdIo *p_cdio = p_cdda->p_cdio;
...@@ -61,7 +59,8 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda ) ...@@ -61,7 +59,8 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
cddb_log_set_handler (uninit_log_handler); cddb_log_set_handler (uninit_log_handler);
#endif #endif
if (!conn) { if (!conn)
{
msg_Warn( p_access, "Unable to initialize libcddb" ); msg_Warn( p_access, "Unable to initialize libcddb" );
goto cddb_destroy; goto cddb_destroy;
} }
...@@ -69,11 +68,9 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda ) ...@@ -69,11 +68,9 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
cddb_set_email_address( conn, cddb_set_email_address( conn,
config_GetPsz( p_access, config_GetPsz( p_access,
MODULE_STRING "-cddb-email") ); MODULE_STRING "-cddb-email") );
cddb_set_server_name( conn, cddb_set_server_name( conn,
config_GetPsz( p_access, config_GetPsz( p_access,
MODULE_STRING "-cddb-server") ); MODULE_STRING "-cddb-server") );
cddb_set_server_port(conn, cddb_set_server_port(conn,
config_GetInt( p_access, config_GetInt( p_access,
MODULE_STRING "-cddb-port") ); MODULE_STRING "-cddb-port") );
...@@ -92,18 +89,25 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda ) ...@@ -92,18 +89,25 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
config_GetInt( p_access, MODULE_STRING "-cddb-timeout") ); config_GetInt( p_access, MODULE_STRING "-cddb-timeout") );
if (config_GetInt( p_access, MODULE_STRING "-cddb-httpd" )) { if (config_GetInt( p_access, MODULE_STRING "-cddb-httpd" ) )
{
cddb_http_enable(conn); cddb_http_enable(conn);
} else }
else
{
cddb_http_disable(conn); cddb_http_disable(conn);
}
p_cdda->cddb.disc = cddb_disc_new(); p_cdda->cddb.disc = cddb_disc_new();
if (!p_cdda->cddb.disc) {
if (!p_cdda->cddb.disc)
{
msg_Err( p_access, "Unable to create CDDB disc structure." ); msg_Err( p_access, "Unable to create CDDB disc structure." );
goto cddb_end; goto cddb_end;
} }
for(i = 0; i < p_cdda->i_tracks; i++) { for(i = 0; i < p_cdda->i_tracks; i++)
{
track_t i_track = p_cdda->i_first_track + i; track_t i_track = p_cdda->i_first_track + i;
cddb_track_t *t = cddb_track_new(); cddb_track_t *t = cddb_track_new();
t->frame_offset = cdio_get_track_lba(p_cdio, i_track); t->frame_offset = cdio_get_track_lba(p_cdio, i_track);
...@@ -114,13 +118,16 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda ) ...@@ -114,13 +118,16 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
cdio_get_track_lba(p_cdio, CDIO_CDROM_LEADOUT_TRACK) cdio_get_track_lba(p_cdio, CDIO_CDROM_LEADOUT_TRACK)
/ CDIO_CD_FRAMES_PER_SEC; / CDIO_CD_FRAMES_PER_SEC;
if (!cddb_disc_calc_discid(p_cdda->cddb.disc)) { if (!cddb_disc_calc_discid(p_cdda->cddb.disc))
{
msg_Err( p_access, "CDDB disc ID calculation failed" ); msg_Err( p_access, "CDDB disc ID calculation failed" );
goto cddb_destroy; goto cddb_destroy;
} }
i_matches = cddb_query(conn, p_cdda->cddb.disc); i_matches = cddb_query(conn, p_cdda->cddb.disc);
if (i_matches > 0) {
if (i_matches > 0)
{
if (i_matches > 1) if (i_matches > 1)
msg_Warn( p_access, "Found %d matches in CDDB. Using first one.", msg_Warn( p_access, "Found %d matches in CDDB. Using first one.",
i_matches); i_matches);
...@@ -129,14 +136,16 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda ) ...@@ -129,14 +136,16 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
if (p_cdda->i_debug & INPUT_DBG_CDDB) if (p_cdda->i_debug & INPUT_DBG_CDDB)
cddb_disc_print(p_cdda->cddb.disc); cddb_disc_print(p_cdda->cddb.disc);
} else { }
else
{
msg_Warn( p_access, "CDDB error: %s", cddb_error_str(errno)); msg_Warn( p_access, "CDDB error: %s", cddb_error_str(errno));
} }
cddb_destroy: cddb_destroy:
cddb_destroy(conn); cddb_destroy(conn);
cddb_end: ; cddb_end: ;
} }
#endif /*HAVE_LIBCDDB*/ #endif /*HAVE_LIBCDDB*/
...@@ -210,8 +219,7 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda ) ...@@ -210,8 +219,7 @@ GetCDDBInfo( access_t *p_access, cdda_data_t *p_cdda )
media info" or in playlist info. The intialization of CD-Text or CDDB media info" or in playlist info. The intialization of CD-Text or CDDB
is done here though. is done here though.
*/ */
void void CDDAMetaInfo( access_t *p_access, int i_track )
CDDAMetaInfo( access_t *p_access )
{ {
cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys; cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys;
...@@ -220,27 +228,42 @@ CDDAMetaInfo( access_t *p_access ) ...@@ -220,27 +228,42 @@ CDDAMetaInfo( access_t *p_access )
p_cdda->psz_mcn = cdio_get_mcn(p_cdda->p_cdio); p_cdda->psz_mcn = cdio_get_mcn(p_cdda->p_cdio);
#ifdef HAVE_LIBCDDB #ifdef HAVE_LIBCDDB
if ( p_cdda->b_cddb_enabled ) { if ( p_cdda->b_cddb_enabled )
{
GetCDDBInfo(p_access, p_cdda); GetCDDBInfo(p_access, p_cdda);
if ( p_cdda->cddb.disc )
if ( p_cdda->cddb.disc ) { {
p_cdda->p_meta = vlc_meta_New(); p_cdda->p_meta = vlc_meta_New();
if( i_track == -1 )
add_cddb_meta(title, VLC_META_CDDB_TITLE); {
add_cddb_meta(artist, VLC_META_CDDB_ARTIST); add_cddb_meta(title, VLC_META_TITLE);
add_cddb_meta(genre, VLC_META_CDDB_GENRE); add_cddb_meta(artist, VLC_META_ARTIST);
add_cddb_meta(ext_data, VLC_META_CDDB_EXT_DATA); input_Control( p_cdda->p_input, INPUT_SET_NAME,
p_cdda->cddb.disc->artist );
add_cddb_meta_fmt(year, "%d", VLC_META_CDDB_YEAR); }
add_cddb_meta_fmt(discid, "%x", VLC_META_CDDB_DISCID); else
{
cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,
i_track-1);
if (t != NULL )
{
if( t->title != NULL )
{
add_meta_val( NULL, VLC_META_TITLE, t->title );
}
if( t->artist != NULL )
{
add_meta_val( NULL, VLC_META_ARTIST, t->artist );
}
}
}
add_cddb_meta(genre, VLC_META_GENRE);
add_cddb_meta_fmt(year, "%d", VLC_META_DATE );
} }
} }
#endif /*HAVE_LIBCDDB*/ #endif /*HAVE_LIBCDDB*/
#define TITLE_MAX 30 #define TITLE_MAX 30
{ {
track_t i = p_cdda->i_tracks; track_t i = p_cdda->i_tracks;
const int i_first_track = p_cdda->i_first_track; const int i_first_track = p_cdda->i_first_track;
...@@ -255,7 +278,8 @@ CDDAMetaInfo( access_t *p_access ) ...@@ -255,7 +278,8 @@ CDDAMetaInfo( access_t *p_access )
secstotimestr( psz_buffer, i_duration ) ); secstotimestr( psz_buffer, i_duration ) );
#ifdef HAVE_LIBCDDB #ifdef HAVE_LIBCDDB
if (p_cdda->b_cddb_enabled && p_cdda->cddb.disc) { if (p_cdda->b_cddb_enabled && p_cdda->cddb.disc)
{
add_cddb_disc_info_str("Artist (CDDB)", artist); add_cddb_disc_info_str("Artist (CDDB)", artist);
add_cddb_disc_info_str("Genre (CDDB)", genre); add_cddb_disc_info_str("Genre (CDDB)", genre);
add_cddb_disc_info_str("Extended Data (CDDB)", ext_data); add_cddb_disc_info_str("Extended Data (CDDB)", ext_data);
...@@ -264,11 +288,13 @@ CDDAMetaInfo( access_t *p_access ) ...@@ -264,11 +288,13 @@ CDDAMetaInfo( access_t *p_access )
add_cddb_disc_info_str("Title (CDDB)", title); add_cddb_disc_info_str("Title (CDDB)", title);
add_info_str("Disc", "Category (CDDB)", add_info_str("Disc", "Category (CDDB)",
CDDB_CATEGORY[p_cdda->cddb.disc->category]); CDDB_CATEGORY[p_cdda->cddb.disc->category]);
} }
#endif /*HAVE_LIBCDDB*/ #endif /*HAVE_LIBCDDB*/
p_cdda->p_cdtext[0] = cdio_get_cdtext(p_cdda->p_cdio, 0); p_cdda->p_cdtext[0] = cdio_get_cdtext(p_cdda->p_cdio, 0);
if (p_cdda->p_cdtext[0]) { if (p_cdda->p_cdtext[0])
{
add_cdtext_disc_info_str("Arranger (CD-Text)", CDTEXT_ARRANGER); 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("Composer (CD-Text)", CDTEXT_COMPOSER);
add_cdtext_disc_info_str("Disc ID (CD-Text)", CDTEXT_DISCID); add_cdtext_disc_info_str("Disc ID (CD-Text)", CDTEXT_DISCID);
...@@ -279,50 +305,59 @@ CDDAMetaInfo( access_t *p_access ) ...@@ -279,50 +305,59 @@ CDDAMetaInfo( access_t *p_access )
add_cdtext_disc_info_str("Title (CD-Text)", CDTEXT_TITLE); add_cdtext_disc_info_str("Title (CD-Text)", CDTEXT_TITLE);
} }
for( i = 0 ; i < p_cdda->i_tracks ; i++ ) { if( i_track == -1 )
{
for( i = 0 ; i < p_cdda->i_tracks ; i++ )
{
char psz_track[TITLE_MAX]; char psz_track[TITLE_MAX];
const track_t i_track = i_first_track + i; const track_t i_track = i_first_track + i;
mtime_t i_duration = (p_cdda->lsn[i_track+1] - p_cdda->lsn[i_track]) mtime_t i_duration = (p_cdda->lsn[i_track+1] -
p_cdda->lsn[i_track])
/ CDIO_CD_FRAMES_PER_SEC; / CDIO_CD_FRAMES_PER_SEC;
snprintf(psz_track, TITLE_MAX, "%s %02d", _("Track"), i_track); snprintf(psz_track, TITLE_MAX, "%s %02d", _("Track"), i_track);
input_Control( p_cdda->p_input, INPUT_ADD_INFO, psz_track, input_Control( p_cdda->p_input, INPUT_ADD_INFO, psz_track,
_("Duration"), "%s", _("Duration"), "%s",
secstotimestr( psz_buffer, i_duration ) ); secstotimestr( psz_buffer, i_duration ) );
p_cdda->p_cdtext[i_track] = cdio_get_cdtext(p_cdda->p_cdio, i_track); p_cdda->p_cdtext[i_track] =
cdio_get_cdtext(p_cdda->p_cdio, i_track);
if (p_cdda->p_cdtext[i_track]) {
add_cdtext_info_str(psz_track, "Arranger (CD-Text)", i_track, if (p_cdda->p_cdtext[i_track])
CDTEXT_ARRANGER); {
add_cdtext_info_str(psz_track, "Composer (CD-Text)", i_track, add_cdtext_info_str( psz_track, "Arranger (CD-Text)",
CDTEXT_COMPOSER); i_track, CDTEXT_ARRANGER);
add_cdtext_info_str(psz_track, "Disc ID (CD-Text)", i_track, add_cdtext_info_str( psz_track, "Composer (CD-Text)",
CDTEXT_DISCID); i_track, CDTEXT_COMPOSER);
add_cdtext_info_str(psz_track, "Genre (CD-Text)", i_track, add_cdtext_info_str( psz_track, "Disc ID (CD-Text)",
CDTEXT_GENRE); i_track, CDTEXT_DISCID);
add_cdtext_info_str(psz_track, "Message (CD-Text)", i_track, add_cdtext_info_str( psz_track, "Genre (CD-Text)",
CDTEXT_MESSAGE); i_track, CDTEXT_GENRE);
add_cdtext_info_str(psz_track, "Performer (CD-Text)", i_track, add_cdtext_info_str( psz_track, "Message (CD-Text)",
CDTEXT_PERFORMER); i_track, CDTEXT_MESSAGE);
add_cdtext_info_str(psz_track, "Songwriter (CD-Text)", i_track, add_cdtext_info_str( psz_track, "Performer (CD-Text)",
CDTEXT_SONGWRITER); i_track, CDTEXT_PERFORMER);
add_cdtext_info_str(psz_track, "Title (CD-Text)", i_track, add_cdtext_info_str( psz_track, "Songwriter (CD-Text)",
CDTEXT_TITLE); i_track, CDTEXT_SONGWRITER);
add_cdtext_info_str( psz_track, "Title (CD-Text)",
i_track, CDTEXT_TITLE);
} }
#ifdef HAVE_LIBCDDB #ifdef HAVE_LIBCDDB
if (p_cdda->b_cddb_enabled) { if (p_cdda->b_cddb_enabled)
{
cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc, i); cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc, i);
if (t != NULL) { if (t != NULL)
{
add_info_str(psz_track, "Artist (CDDB)", t->artist); add_info_str(psz_track, "Artist (CDDB)", t->artist);
add_info_str(psz_track, "Title (CDDB)", t->title); add_info_str(psz_track, "Title (CDDB)", t->title);
add_info_str(psz_track, "Extended Data (CDDB)", t->ext_data); add_info_str(psz_track, "Extended Data (CDDB)",
t->ext_data);
} }
} }
#endif /*HAVE_LIBCDDB*/ #endif /*HAVE_LIBCDDB*/
} }
} }
}
} }
#define add_format_str_info(val) \ #define add_format_str_info(val) \
...@@ -386,17 +421,21 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda, ...@@ -386,17 +421,21 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
memset(temp_str, 0, TEMP_STR_SIZE); memset(temp_str, 0, TEMP_STR_SIZE);
for (i=0; i<format_len; i++) { for (i=0; i<format_len; i++)
{
if (!saw_control_prefix && format_str[i] != '%') { if (!saw_control_prefix && format_str[i] != '%')
{
*tp++ = format_str[i]; *tp++ = format_str[i];
saw_control_prefix = false; saw_control_prefix = false;
continue; continue;
} }
switch(format_str[i]) { switch(format_str[i])
{
case '%': case '%':
if (saw_control_prefix) { if (saw_control_prefix)
{
*tp++ = '%'; *tp++ = '%';
} }
saw_control_prefix = !saw_control_prefix; saw_control_prefix = !saw_control_prefix;
...@@ -415,7 +454,8 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda, ...@@ -415,7 +454,8 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
case 'C': case 'C':
if (!p_cdda->b_cddb_enabled) goto not_special; if (!p_cdda->b_cddb_enabled) goto not_special;
if (p_cdda->cddb.disc) if (p_cdda->cddb.disc)
add_format_str_info(CDDB_CATEGORY[p_cdda->cddb.disc->category]); add_format_str_info(
CDDB_CATEGORY[p_cdda->cddb.disc->category]);
break; break;
case 'G': case 'G':
if (!p_cdda->b_cddb_enabled) goto not_special; if (!p_cdda->b_cddb_enabled) goto not_special;
...@@ -433,15 +473,18 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda, ...@@ -433,15 +473,18 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
add_format_num_info(p_cdda->cddb.disc->year, "%5d"); add_format_num_info(p_cdda->cddb.disc->year, "%5d");
break; break;
case 't': case 't':
if (p_cdda && p_cdda->b_cddb_enabled && p_cdda->cddb.disc) { if (p_cdda && p_cdda->b_cddb_enabled && p_cdda->cddb.disc)
{
cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc, cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,
i_track-1); i_track-1);
if (t != NULL && t->title != NULL) if (t != NULL && t->title != NULL)
add_format_str_info(t->title); add_format_str_info(t->title);
} else goto not_special; }
else goto not_special;
break; break;
case 'p': case 'p':
if (p_cdda->b_cddb_enabled && p_cdda->cddb.disc) { if (p_cdda->b_cddb_enabled && p_cdda->cddb.disc)
{
cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc, cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,
i_track-1); i_track-1);
if (t != NULL && t->artist != NULL) if (t != NULL && t->artist != NULL)
...@@ -449,7 +492,8 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda, ...@@ -449,7 +492,8 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
} else goto not_special; } else goto not_special;
break; break;
case 'e': case 'e':
if (p_cdda->b_cddb_enabled && p_cdda->cddb.disc) { if (p_cdda->b_cddb_enabled && p_cdda->cddb.disc)
{
cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc, cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,
i_track-1); i_track-1);
if (t != NULL && t->ext_data != NULL) if (t != NULL && t->ext_data != NULL)
...@@ -457,13 +501,15 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda, ...@@ -457,13 +501,15 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
} else goto not_special; } else goto not_special;
break; break;
case 's': case 's':
if (p_cdda->b_cddb_enabled) { if (p_cdda->b_cddb_enabled)
{
char psz_buffer[MSTRTIME_MAX_SIZE]; char psz_buffer[MSTRTIME_MAX_SIZE];
mtime_t i_duration = (p_cdda->lsn[i_track+1] - p_cdda->lsn[i_track]) mtime_t i_duration = (p_cdda->lsn[i_track+1] -
p_cdda->lsn[i_track])
/ CDIO_CD_FRAMES_PER_SEC; / CDIO_CD_FRAMES_PER_SEC;
add_format_str_info(secstotimestr( psz_buffer, i_duration ) ); add_format_str_info(secstotimestr( psz_buffer,
} else i_duration ) );
goto not_special; } else goto not_special;
break; break;
#endif /*HAVE_LIBCDDB*/ #endif /*HAVE_LIBCDDB*/
...@@ -498,56 +544,73 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda, ...@@ -498,56 +544,73 @@ CDDAFormatStr( const access_t *p_access, cdda_data_t *p_cdda,
if the string is not null or the null string. if the string is not null or the null string.
*/ */
#define add_playlist_track_info_str(TITLE, FIELD) \ #define add_playlist_track_info_str(TITLE, FIELD) \
if (FIELD && strlen(FIELD)) { \ if (FIELD && strlen(FIELD)) \
{ \
playlist_ItemAddInfo( p_item, _("Track"), _(TITLE), \ playlist_ItemAddInfo( p_item, _("Track"), _(TITLE), \
"%s", FIELD); \ "%s", FIELD); \
} }
void playlist_item_t *
CDDACreatePlaylistItem(const access_t *p_access, cdda_data_t *p_cdda, CDDACreatePlaylistItem( const access_t *p_access, cdda_data_t *p_cdda,
playlist_t *p_playlist, track_t i_track, playlist_t *p_playlist, playlist_item_t *p_item,
char *psz_mrl, int psz_mrl_max, track_t i_track, char *psz_mrl, int psz_mrl_max,
const char *psz_source, int playlist_operation, const char *psz_source )
int i_pos)
{ {
mtime_t i_duration = (p_cdda->lsn[i_track+1] - p_cdda->lsn[i_track]) mtime_t i_duration = (p_cdda->lsn[i_track+1] - p_cdda->lsn[i_track])
* (1000000 / CDIO_CD_FRAMES_PER_SEC) ; * (1000000 / CDIO_CD_FRAMES_PER_SEC) ;
char *psz_title; char *psz_title;
char *config_varname = MODULE_STRING "-title-format"; char *config_varname = MODULE_STRING "-title-format";
playlist_item_t *p_item;
playlist_item_t *p_child = NULL;
if( !p_item )
{
return NULL;
}
#ifdef HAVE_LIBCDDB #ifdef HAVE_LIBCDDB
if (p_cdda->b_cddb_enabled) { if (p_cdda->b_cddb_enabled)
{
config_varname = MODULE_STRING "-cddb-title-format"; config_varname = MODULE_STRING "-cddb-title-format";
} }
#endif /*HAVE_LIBCDDB*/ #endif /*HAVE_LIBCDDB*/
snprintf(psz_mrl, psz_mrl_max, "%s%s@T%u",
CDDA_MRL_PREFIX, psz_source, i_track);
psz_title = CDDAFormatStr(p_access, p_cdda, psz_title = CDDAFormatStr( p_access, p_cdda,
config_GetPsz( p_access, config_varname ), config_GetPsz( p_access, config_varname ),
psz_mrl, i_track); psz_mrl, i_track);
dbg_print( INPUT_DBG_META, "mrl: %s, title: %s, duration, %ld, pos %d", snprintf(psz_mrl, psz_mrl_max, "%s%s@T%u",
psz_mrl, psz_title, (long int) i_duration / 1000000 , i_pos ); CDDA_MRL_PREFIX, psz_source, i_track);
playlist_AddExt( p_playlist, psz_mrl, psz_title, playlist_operation,
i_pos, i_duration , NULL, 0);
if( i_pos == PLAYLIST_END ) i_pos = p_playlist->i_size - 1; dbg_print( INPUT_DBG_META, "mrl: %s, title: %s, duration, %ld",
psz_mrl, psz_title, (long int) i_duration / 1000000 );
vlc_mutex_lock( &p_playlist->object_lock ); p_child = playlist_ItemNew( p_playlist, psz_mrl, psz_title );
p_item = playlist_ItemGetByPos( p_playlist, i_pos ); p_child->input.b_fixed_name = VLC_TRUE;
vlc_mutex_unlock( &p_playlist->object_lock );
if( !p_item ) if( !p_child ) return NULL;
return;
playlist_NodeAddItem( p_playlist, p_child,
p_item->pp_parents[0]->i_view,
p_item, PLAYLIST_APPEND, PLAYLIST_END );
playlist_CopyParents( p_item, p_child );
return p_child;
}
int CDDAAddMetaToItem( access_t *p_access, cdda_data_t *p_cdda,
playlist_item_t *p_item, const char *psz_source,
int i_track, vlc_bool_t b_single )
{
vlc_mutex_lock( &p_item->input.lock ); vlc_mutex_lock( &p_item->input.lock );
add_playlist_track_info_str("Source", psz_source); add_playlist_track_info_str("Source", psz_source);
playlist_ItemAddInfo( p_item, _("Track"), _("Track Number"), "%d", i_track ); playlist_ItemAddInfo( p_item, _("Track"), _("Track Number"),
"%d", i_track );
if (p_cdda->p_cdtext[0]) { if (p_cdda->p_cdtext[0])
{
const cdtext_t *p = p_cdda->p_cdtext[0]; const cdtext_t *p = p_cdda->p_cdtext[0];
add_playlist_track_info_str("Disc Arranger (CD-Text)", add_playlist_track_info_str("Disc Arranger (CD-Text)",
p->field[CDTEXT_ARRANGER]); p->field[CDTEXT_ARRANGER]);
...@@ -567,7 +630,8 @@ CDDACreatePlaylistItem(const access_t *p_access, cdda_data_t *p_cdda, ...@@ -567,7 +630,8 @@ CDDACreatePlaylistItem(const access_t *p_access, cdda_data_t *p_cdda,
p->field[CDTEXT_TITLE]); p->field[CDTEXT_TITLE]);
} }
if (p_cdda->p_cdtext[i_track]) { if (p_cdda->p_cdtext[i_track])
{
const cdtext_t *p = p_cdda->p_cdtext[i_track]; const cdtext_t *p = p_cdda->p_cdtext[i_track];
add_playlist_track_info_str("Arranger (CD-Text)", add_playlist_track_info_str("Arranger (CD-Text)",
p->field[CDTEXT_ARRANGER]); p->field[CDTEXT_ARRANGER]);
...@@ -585,9 +649,9 @@ CDDACreatePlaylistItem(const access_t *p_access, cdda_data_t *p_cdda, ...@@ -585,9 +649,9 @@ CDDACreatePlaylistItem(const access_t *p_access, cdda_data_t *p_cdda,
p->field[CDTEXT_TITLE]); p->field[CDTEXT_TITLE]);
} }
#ifdef HAVE_LIBCDDB #ifdef HAVE_LIBCDDB
if (p_cdda->b_cddb_enabled) { if (p_cdda->b_cddb_enabled)
{
cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc, cddb_track_t *t=cddb_disc_get_track(p_cdda->cddb.disc,
i_track-p_cdda->i_first_track); i_track-p_cdda->i_first_track);
...@@ -599,16 +663,20 @@ CDDACreatePlaylistItem(const access_t *p_access, cdda_data_t *p_cdda, ...@@ -599,16 +663,20 @@ CDDACreatePlaylistItem(const access_t *p_access, cdda_data_t *p_cdda,
CDDB_CATEGORY[p_cdda->cddb.disc->category]); CDDB_CATEGORY[p_cdda->cddb.disc->category]);
add_playlist_track_info_str("Disc Genre (CDDB)", add_playlist_track_info_str("Disc Genre (CDDB)",
p_cdda->cddb.disc->genre); p_cdda->cddb.disc->genre);
if ( p_cdda->cddb.disc->discid ) {
if ( p_cdda->cddb.disc->discid )
{
playlist_ItemAddInfo( p_item, _("Track"), _("Disc ID (CDDB)"), playlist_ItemAddInfo( p_item, _("Track"), _("Disc ID (CDDB)"),
"%x", p_cdda->cddb.disc->discid ); "%x", p_cdda->cddb.disc->discid );
} }
if (p_cdda->cddb.disc->year != 0) { if (p_cdda->cddb.disc->year != 0)
{
playlist_ItemAddInfo( p_item, _("Track"), _("Year (CDDB)"), playlist_ItemAddInfo( p_item, _("Track"), _("Year (CDDB)"),
"%5d", p_cdda->cddb.disc->year ); "%5d", p_cdda->cddb.disc->year );
} }
if (t) { if (t)
{
if (t->artist) if (t->artist)
add_playlist_track_info_str("Track Artist (CDDB)", add_playlist_track_info_str("Track Artist (CDDB)",
t->artist); t->artist);
...@@ -620,6 +688,8 @@ CDDACreatePlaylistItem(const access_t *p_access, cdda_data_t *p_cdda, ...@@ -620,6 +688,8 @@ CDDACreatePlaylistItem(const access_t *p_access, cdda_data_t *p_cdda,
#endif /*HAVE_LIBCDDB*/ #endif /*HAVE_LIBCDDB*/
vlc_mutex_unlock( &p_item->input.lock ); vlc_mutex_unlock( &p_item->input.lock );
return VLC_SUCCESS;
} }
int int
...@@ -632,13 +702,17 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda, ...@@ -632,13 +702,17 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
unsigned int psz_mrl_max = strlen(CDDA_MRL_PREFIX) + strlen(psz_source) + unsigned int psz_mrl_max = strlen(CDDA_MRL_PREFIX) + strlen(psz_source) +
strlen("@T") + strlen("100") + 1; strlen("@T") + strlen("100") + 1;
const track_t i_first_track = p_cdda->i_first_track; const track_t i_first_track = p_cdda->i_first_track;
playlist_item_t *p_item;
vlc_bool_t b_play = VLC_FALSE;
#ifdef HAVE_LIBCDDB #ifdef HAVE_LIBCDDB
p_cdda->b_cddb_enabled = p_cdda->b_cddb_enabled =
config_GetInt( p_access, MODULE_STRING "-cddb-enabled" ); config_GetInt( p_access, MODULE_STRING "-cddb-enabled" );
if( b_single_track && !p_cdda->b_cddb_enabled ) return VLC_SUCCESS; if( b_single_track && !p_cdda->b_cddb_enabled )
return VLC_SUCCESS;
#else #else
if( b_single_track ) return VLC_SUCCESS; if( b_single_track )
return VLC_SUCCESS;
#endif #endif
psz_mrl = malloc( psz_mrl_max ); psz_mrl = malloc( psz_mrl_max );
...@@ -658,15 +732,35 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda, ...@@ -658,15 +732,35 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
return VLC_EGENERIC; return VLC_EGENERIC;
} }
CDDAMetaInfo(p_access); if( b_single_track )
{
CDDAMetaInfo( p_access, p_cdda->i_track );
}
else
{
CDDAMetaInfo( p_access, -1 );
}
p_item = playlist_ItemGetByInput( p_playlist,
((input_thread_t *)p_access->p_parent)->input.p_item );
if (b_single_track) { if( p_item == p_playlist->status.p_item && !b_single_track )
/* May fill out more information when the playlist user interface becomes {
b_play = VLC_TRUE;
}
else
{
b_play = VLC_FALSE;
}
if( b_single_track )
{
/*May fill out more information when the playlist user interface becomes
more mature. more mature.
*/ */
track_t i_track = p_cdda->i_track; track_t i_track = p_cdda->i_track;
input_title_t *t = p_cdda->p_title[i_track-i_first_track] = input_title_t *t = p_cdda->p_title[0] = //i_track-i_first_track] =
vlc_input_title_New(); vlc_input_title_New();
asprintf( &t->psz_name, _("Track %i"), i_track ); asprintf( &t->psz_name, _("Track %i"), i_track );
...@@ -675,14 +769,19 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda, ...@@ -675,14 +769,19 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
(int64_t) CDIO_CD_FRAMESIZE_RAW; (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;
CDDACreatePlaylistItem(p_access, p_cdda, p_playlist, i_track,
psz_mrl, psz_mrl_max, psz_source, PLAYLIST_REPLACE,
p_playlist->i_index);
p_cdda->i_titles = 1;
} else {
CDDAAddMetaToItem( p_access, p_cdda, p_item, psz_source, i_track,
VLC_FALSE );
p_cdda->i_titles = 1;
}
else
{
playlist_ItemToNode( p_playlist, p_item );
for( i = 0 ; i < p_cdda->i_tracks ; i++ ) for( i = 0 ; i < p_cdda->i_tracks ; i++ )
{ {
playlist_item_t *p_child;
const track_t i_track = i_first_track + i; const track_t i_track = i_first_track + i;
input_title_t *t = p_cdda->p_title[i] = vlc_input_title_New(); input_title_t *t = p_cdda->p_title[i] = vlc_input_title_New();
...@@ -691,9 +790,13 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda, ...@@ -691,9 +790,13 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
(int64_t) CDIO_CD_FRAMESIZE_RAW; (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;
CDDACreatePlaylistItem(p_access, p_cdda, p_playlist, i_track,
psz_mrl, psz_mrl_max, psz_source, p_child = CDDACreatePlaylistItem( p_access, p_cdda, p_playlist,
PLAYLIST_APPEND, PLAYLIST_END); p_item,
i_track, psz_mrl,
psz_mrl_max, psz_source );
CDDAAddMetaToItem( p_access, p_cdda, p_child, psz_source,
i_track, VLC_TRUE );
} }
p_cdda->i_titles = p_cdda->i_tracks; /* should be +1 */ p_cdda->i_titles = p_cdda->i_tracks; /* should be +1 */
p_access->info.i_size = p_access->info.i_size =
...@@ -701,6 +804,15 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda, ...@@ -701,6 +804,15 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
- p_cdda->lsn[i_first_track]) * (int64_t) CDIO_CD_FRAMESIZE_RAW; - p_cdda->lsn[i_first_track]) * (int64_t) CDIO_CD_FRAMESIZE_RAW;
} }
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 );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -33,17 +33,15 @@ int CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda, ...@@ -33,17 +33,15 @@ int CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda,
we handle Meta Information requests and basically copy what we've we handle Meta Information requests and basically copy what we've
saved here. saved here.
*/ */
void CDDAMetaInfo( access_t *p_access ); void CDDAMetaInfo( access_t *p_access, int );
/* /*
Creates a playlist item filling the meta information about that playlist Creates a playlist item filling the meta information about that playlist
item. item.
*/ */
void CDDACreatePlaylistItem(const access_t *p_access, playlist_item_t *
cdda_data_t *p_cdda, CDDACreatePlaylistItem( const access_t *p_access, cdda_data_t *p_cdda,
playlist_t *p_playlist, playlist_t *p_playlist, playlist_item_t *p_item,
track_t i_track, track_t i_track, char *psz_mrl, int psz_mrl_max,
char *psz_mrl, int psz_mrl_max, const char *psz_source );
const char *psz_source,
int playlist_operation,
int i_pos);
...@@ -1560,7 +1560,8 @@ static int UpdateMeta( input_thread_t *p_input ) ...@@ -1560,7 +1560,8 @@ static int UpdateMeta( input_thread_t *p_input )
msg_Dbg( p_input, " - '%s' = '%s'", msg_Dbg( p_input, " - '%s' = '%s'",
_(p_meta->name[i]), p_meta->value[i] ); _(p_meta->name[i]), p_meta->value[i] );
if( !strcmp(p_meta->name[i], VLC_META_TITLE) && p_meta->value[i] ) if( !strcmp(p_meta->name[i], VLC_META_TITLE) && p_meta->value[i] &&
!p_input->input.p_item->b_fixed_name )
input_Control( p_input, INPUT_SET_NAME, p_meta->value[i] ); input_Control( p_input, INPUT_SET_NAME, p_meta->value[i] );
if( !strcmp( p_meta->name[i], VLC_META_AUTHOR ) ) if( !strcmp( p_meta->name[i], VLC_META_AUTHOR ) )
......
...@@ -436,6 +436,11 @@ playlist_item_t * playlist_ItemGetByInput( playlist_t * p_playlist , ...@@ -436,6 +436,11 @@ playlist_item_t * playlist_ItemGetByInput( playlist_t * p_playlist ,
input_item_t *p_item ) input_item_t *p_item )
{ {
int i; int i;
if( &p_playlist->status.p_item->input == p_item )
{
return p_playlist->status.p_item;
}
for( i = 0 ; i < p_playlist->i_size ; i++ ) for( i = 0 ; i < p_playlist->i_size ; i++ )
{ {
if( &p_playlist->pp_items[i]->input == p_item ) if( &p_playlist->pp_items[i]->input == p_item )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment