+ case ACCESS_GET_TITLE_INFO:
+ {
+ input_title_t ***ppp_title =
+ (input_title_t***)va_arg( args, input_title_t*** );
+
+ pi_int = (int*)va_arg( args, int* );
+ *((int*)va_arg( args, int* )) = 1; /* Title offset */
+
+ dbg_print ( INPUT_DBG_EVENT,
+ "GET TITLE: i_tracks %d, i_tracks %d",
+ p_cdda->i_tracks, p_cdda->i_tracks );
+
+ 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( p_cdda->i_titles == 0 )
+ {
+ *pi_int = 0; ppp_title = NULL;
+ return VLC_SUCCESS;
+ }
+ *pi_int = p_cdda->i_titles;
+ *ppp_title = calloc(1, sizeof( input_title_t **)
+ * p_cdda->i_titles );
+
+ if (!*ppp_title)
+ return VLC_ENOMEM;
+
+ for( i = 0; i < p_cdda->i_titles; i++ )
+ {
+ if ( p_cdda->p_title[i] )
+ {
+ (*ppp_title)[i] =
+ vlc_input_title_Duplicate( p_cdda->p_title[i] );
+ }
+ }
+ break;
+ }
+
+ case ACCESS_SET_TITLE:
+ {
+ i = (int)va_arg( args, int );
+
+ dbg_print( INPUT_DBG_EVENT, "set title %d", i );
+ if( i != p_access->info.i_title )
+ {
+ const track_t i_track = p_cdda->i_first_track + i;
+ /* Update info */
+ p_access->info.i_title = i;
+ if( p_cdda->b_nav_mode)
+ {
+ lsn_t i_last_lsn;
+ char *psz_title = CDDAFormatTitle( p_access, i_track );
+ input_Control( p_cdda->p_input, INPUT_SET_NAME,
+ psz_title );
+ free( psz_title );
+ p_cdda->i_track = i_track;
+ i_last_lsn = cdio_get_track_lsn( p_cdda->p_cdio,
+ CDIO_CDROM_LEADOUT_TRACK );
+ if( CDIO_INVALID_LSN != i_last_lsn )
+ p_access->info.i_size = (int64_t) CDIO_CD_FRAMESIZE_RAW
+ * i_last_lsn ;
+ p_access->info.i_pos = (int64_t)
+ cdio_get_track_lsn( p_cdda->p_cdio, i_track )
+ * CDIO_CD_FRAMESIZE_RAW;
+ }
+ else
+ {
+ p_access->info.i_size = p_cdda->p_title[i]->i_size;
+ p_access->info.i_pos = 0;
+ }
+ p_access->info.i_update = INPUT_UPDATE_TITLE|INPUT_UPDATE_SIZE;
+
+ /* Next sector to read */
+ p_cdda->i_lsn = cdio_get_track_lsn( p_cdda->p_cdio, i_track );
+ }
+ break;
+ }
+
+ case ACCESS_SET_PAUSE_STATE:
+ dbg_print( INPUT_DBG_META, "Pause");
+ if( p_cdda->b_audio_ctl )
+ cdda_audio_pause( p_cdda->p_cdio );
+ break;