From ad4db76b79b44f0a22cef782896390ca3e2d8284 Mon Sep 17 00:00:00 2001 From: Rocky Bernstein Date: Mon, 6 Sep 2004 12:49:29 +0000 Subject: [PATCH] Allow size of blocks reads to be specified/adjusted Split out callback routines. Some cleanup. Still largely broken though. --- modules/access/cdda/Modules.am | 3 + modules/access/cdda/access.c | 160 +++++++++++++++------------------ modules/access/cdda/access.h | 33 +++++++ modules/access/cdda/callback.c | 91 +++++++++++++++++++ modules/access/cdda/callback.h | 45 ++++++++++ modules/access/cdda/cdda.c | 40 ++++----- modules/access/cdda/cdda.h | 61 +++++++------ 7 files changed, 295 insertions(+), 138 deletions(-) create mode 100644 modules/access/cdda/access.h create mode 100644 modules/access/cdda/callback.c create mode 100644 modules/access/cdda/callback.h diff --git a/modules/access/cdda/Modules.am b/modules/access/cdda/Modules.am index 24ffaa1b86..415873097a 100644 --- a/modules/access/cdda/Modules.am +++ b/modules/access/cdda/Modules.am @@ -1,5 +1,8 @@ SOURCES_cddax = \ access.c \ + access.h \ + callback.c \ + callback.h \ cdda.c \ cdda.h \ $(NULL) diff --git a/modules/access/cdda/access.c b/modules/access/cdda/access.c index 513fb5ca93..bc5332a273 100644 --- a/modules/access/cdda/access.c +++ b/modules/access/cdda/access.c @@ -26,20 +26,29 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include -#include - -#include -#include -#include +#include "callback.h" /* FIXME - reorganize callback.h, cdda.h better */ +#include "cdda.h" /* private structures. Also #includes vlc things */ +#include /* Has to come *after* cdda.h */ +#include "vlc_keys.h" -#include #include #include #include -#include "codecs.h" -#include "vlc_keys.h" +#include + +/* #ifdef variables below are defined via config.h via #include vlc above. */ +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +#ifdef HAVE_STRING_H +#include +#endif #ifdef HAVE_UNISTD_H # include @@ -49,28 +58,18 @@ # include #endif -#include - -#include "cdda.h" - #define CDDA_MRL_PREFIX "cddax://" -/* how many blocks Open will read in each loop. Note libcdio and - SCSI MMC devices can read at most 25 blocks. -*/ -#define CDDA_BLOCKS_ONCE 20 -#define CDDA_DATA_ONCE (CDDA_BLOCKS_ONCE * CDIO_CD_FRAMESIZE_RAW) - /* Frequency of sample in bits per second. */ #define CDDA_FREQUENCY_SAMPLE 44100 /* FIXME: This variable is a hack. Would be nice to eliminate. */ -static access_t *p_cdda_input = NULL; +access_t *p_cdda_input = NULL; /***************************************************************************** * Local prototypes *****************************************************************************/ -static block_t *CDDABlock( access_t * p_access ); +static block_t *CDDAReadBlocks( access_t * p_access ); static int CDDASeek( access_t * p_access, int64_t i_pos ); static int CDDAControl( access_t *p_access, int i_query, va_list args ); @@ -180,17 +179,17 @@ uninit_log_handler (cdio_log_level_t level, const char message[]) } /***************************************************************************** - * CDDARead: reads CDDA_BLOCKS_ONCE from the CD-DA and returns an - * allocated pointer to the data. NULL is returned if no data 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. + * CDDAReadBlocks: reads a group of blocks from the CD-DA and returns + * an allocated pointer to the data. NULL is returned if no data + * 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. *****************************************************************************/ static block_t * -CDDABlock( access_t * p_access ) +CDDAReadBlocks( access_t * p_access ) { block_t *p_block; cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys; - int i_blocks = CDDA_BLOCKS_ONCE; + int i_blocks = p_cdda->i_blocks_per_read; dbg_print((INPUT_DBG_CALL|INPUT_DBG_EXT|INPUT_DBG_LSN), "called %d", p_cdda->i_lsn); @@ -224,7 +223,7 @@ CDDABlock( access_t * p_access ) p_cdda->i_track++; } - /* Don't read after the end of a title */ + /* Possibly adjust i_blocks so we don't read past the end of a track. */ if( p_cdda->i_lsn + i_blocks >= p_cdda->p_lsns[p_access->info.i_title + 1] ) { @@ -236,27 +235,27 @@ CDDABlock( access_t * p_access ) p_block = block_New( p_access, i_blocks * CDIO_CD_FRAMESIZE_RAW ); if( !p_block) { - msg_Err( p_access, "cannot get a new block of size: %i", - i_blocks * CDIO_CD_FRAMESIZE_RAW ); - return NULL; + msg_Err( p_access, _("Cannot get a new block of size: %i"), + i_blocks * CDIO_CD_FRAMESIZE_RAW ); + return NULL; } if( cdio_read_audio_sectors( p_cdda->p_cdio, p_block->p_buffer, p_cdda->i_lsn, i_blocks) != 0 ) { - msg_Err( p_access, "could not read sector %lu", - (long unsigned int) p_cdda->i_lsn ); - block_Release( p_block ); - - /* If we had problems above, assume the problem is with - the first sector of the read and set to skip it. In - the future libcdio may have cdparanoia support. - */ - p_cdda->i_lsn++; - p_access->info.i_pos += CDIO_CD_FRAMESIZE_RAW; - return NULL; + msg_Err( p_access, _("could not read sector %lu"), + (long unsigned int) p_cdda->i_lsn ); + block_Release( p_block ); + + /* If we had problems above, assume the problem is with + the first sector of the read and set to skip it. In + the future libcdio may have cdparanoia support. + */ + p_cdda->i_lsn++; + p_access->info.i_pos += CDIO_CD_FRAMESIZE_RAW; + return NULL; } - + p_cdda->i_lsn += i_blocks; p_access->info.i_pos += p_block->i_buffer; @@ -273,7 +272,7 @@ CDDASeek( access_t * p_access, int64_t i_pos ) cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys; p_cdda->i_lsn = p_cdda->p_lsns[p_access->info.i_title] - + i_pos / CDIO_CD_FRAMESIZE_RAW; + + (i_pos / CDIO_CD_FRAMESIZE_RAW); p_access->info.i_pos = i_pos; dbg_print( (INPUT_DBG_CALL|INPUT_DBG_EXT|INPUT_DBG_SEEK), @@ -804,44 +803,6 @@ CDDAFixupPlaylist( access_t *p_access, cdda_data_t *p_cdda, /**************************************************************************** * Public functions ****************************************************************************/ -int -E_(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; - - 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 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 = val.i_int; - return VLC_SUCCESS; -} - -int -E_(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; - - if (NULL == p_cdda_input) return VLC_EGENERIC; - - p_cdda = (cdda_data_t *)p_cdda_input->p_sys; - -#ifdef HAVE_LIBCDDB - 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", - p_cdda->i_cddb_enabled, p_cdda->i_cddb_enabled, - val.i_int, val.i_int); - } - p_cdda->i_cddb_enabled = val.i_int; -#endif - return VLC_SUCCESS; -} /***************************************************************************** * Open: open cdda device or image file and initialize structures @@ -885,8 +846,10 @@ E_(CDDAOpen)( vlc_object_t *p_this ) i_track = i_track ? i_track : 1; b_single_track = true; } - } else { + } + if (!psz_source || !*psz_source) + { /* No device/track given. Continue only when this plugin was selected */ if( !p_this->b_force ) return VLC_EGENERIC; @@ -938,13 +901,30 @@ E_(CDDAOpen)( vlc_object_t *p_this ) p_cdda->b_header = VLC_FALSE; p_cdda->p_cdio = p_cdio; 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->i_blocks_per_read + = config_GetInt(p_this, MODULE_STRING "-blocks-per-read"); + + if (0 == p_cdda->i_blocks_per_read) + p_cdda->i_blocks_per_read = DEFAULT_BLOCKS_PER_READ; + + if ( p_cdda->i_blocks_per_read < MIN_BLOCKS_PER_READ + || p_cdda->i_blocks_per_read > MAX_BLOCKS_PER_READ ) { + msg_Warn( p_cdda_input, + "Number of blocks (%d) has to be between %d and %d. " + "Using %d.", + p_cdda->i_blocks_per_read, + MIN_BLOCKS_PER_READ, MAX_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 ); /* Set up p_access */ p_access->pf_read = NULL; - p_access->pf_block = CDDABlock; + p_access->pf_block = CDDAReadBlocks; p_access->pf_control = CDDAControl; p_access->pf_seek = CDDASeek; @@ -1076,7 +1056,7 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args ) /* */ case ACCESS_GET_MTU: pi_int = (int*)va_arg( args, int * ); - *pi_int = CDDA_DATA_ONCE; + *pi_int = p_cdda-> i_blocks_per_read * CDIO_CD_FRAMESIZE_RAW; break; case ACCESS_GET_PTS_DELAY: @@ -1148,6 +1128,8 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args ) 0-origin, same as p_access->info. Add first_track to get what track number this is on the CD. Note: libcdio uses the real track number. + On input we assume p_cdda->p_cdio and p_cdda->i_track have been set. + We return the VLC-type status, e.g. VLC_SUCCESS, VLC_ENOMEM, etc. *****************************************************************************/ static int @@ -1182,7 +1164,6 @@ GetCDInfo( access_t *p_access, cdda_data_t *p_cdda ) return VLC_ENOMEM; } - /* Fill the p_lsns structure with the track/sector matches. Note cdio_get_track_lsn when given num_tracks + 1 will return @@ -1193,6 +1174,9 @@ GetCDInfo( access_t *p_access, cdda_data_t *p_cdda ) (p_cdda->p_lsns)[ i ] = cdio_get_track_lsn(p_cdda->p_cdio, p_cdda->i_first_track+i); } - + + /* Set reading start LSN. */ + p_cdda->i_lsn = p_cdda->p_lsns[p_cdda->i_track - p_cdda->i_first_track]; + return VLC_SUCCESS; } diff --git a/modules/access/cdda/access.h b/modules/access/cdda/access.h new file mode 100644 index 0000000000..e699496cf8 --- /dev/null +++ b/modules/access/cdda/access.h @@ -0,0 +1,33 @@ +/***************************************************************************** + * access.h : access headers for CD digital audio input module + ***************************************************************************** + * Copyright (C) 2004 VideoLAN + * $Id: access.h 8606 2004-08-31 18:32:54Z rocky $ + * + * Authors: Rocky Bernstein + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +/***************************************************************************** + * Open: open cdda device or image file and initialize structures + * for subsequent operations. + *****************************************************************************/ +int E_(CDDAOpen) ( vlc_object_t * ); + +/***************************************************************************** + * CDDAClose: closes cdda and frees any resources associded with it. + *****************************************************************************/ +void E_(CDDAClose) ( vlc_object_t * ); diff --git a/modules/access/cdda/callback.c b/modules/access/cdda/callback.c new file mode 100644 index 0000000000..e44fec9dd4 --- /dev/null +++ b/modules/access/cdda/callback.c @@ -0,0 +1,91 @@ +/***************************************************************************** + * callback.c : Callbacks for CD digital audio input module + ***************************************************************************** + * Copyright (C) 2004 VideoLAN + * $Id: callback.c 8606 2004-08-31 18:32:54Z rocky $ + * + * Authors: Rocky Bernstein + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +#include "callback.h" +#include "cdda.h" + +int +E_(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; + + 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 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 = val.i_int; + return VLC_SUCCESS; +} + +int +E_(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; + + if (NULL == p_cdda_input) return VLC_EGENERIC; + + p_cdda = (cdda_data_t *)p_cdda_input->p_sys; + +#ifdef HAVE_LIBCDDB + 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", + p_cdda->i_cddb_enabled, p_cdda->i_cddb_enabled, + val.i_int, val.i_int); + } + p_cdda->i_cddb_enabled = val.i_int; +#endif + return VLC_SUCCESS; +} + +int +E_(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; + + 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 blocks per read: %d, new %d", + p_cdda->i_blocks_per_read, val.i_int); + } + + 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 ) + p_cdda->i_blocks_per_read = val.i_int; + else { + msg_Warn( p_cdda_input, + "Number of blocks (%d) has to be between %d and %d. No change.", + val.i_int, MIN_BLOCKS_PER_READ, MAX_BLOCKS_PER_READ ); + } + + return VLC_SUCCESS; +} diff --git a/modules/access/cdda/callback.h b/modules/access/cdda/callback.h new file mode 100644 index 0000000000..f283c80811 --- /dev/null +++ b/modules/access/cdda/callback.h @@ -0,0 +1,45 @@ +/***************************************************************************** + * callback.h : Callbacks for CD digital audio input module + ***************************************************************************** + * Copyright (C) 2004 VideoLAN + * $Id: callback.h 8606 2004-08-31 18:32:54Z rocky $ + * + * Authors: Rocky Bernstein + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +#include + +/* + Minimum, maximum and default number of blocks we allow on read. +*/ +#define MIN_BLOCKS_PER_READ 1 +#define MAX_BLOCKS_PER_READ 25 +#define DEFAULT_BLOCKS_PER_READ 20 + +int E_(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, + vlc_value_t oldval, vlc_value_t val, + void *p_data ); + + +int E_(CDDABlocksPerReadCB) ( vlc_object_t *p_this, const char *psz_name, + vlc_value_t oldval, vlc_value_t val, + void *p_data ); + diff --git a/modules/access/cdda/cdda.c b/modules/access/cdda/cdda.c index 583a967282..cda95f0554 100644 --- a/modules/access/cdda/cdda.c +++ b/modules/access/cdda/cdda.c @@ -1,7 +1,7 @@ /***************************************************************************** * cddax.c : CD digital audio input module for vlc using libcdio ***************************************************************************** - * Copyright (C) 2000,2003 VideoLAN + * Copyright (C) 2000, 2003, 2004 VideoLAN * $Id$ * * Authors: Rocky Bernstein @@ -27,21 +27,8 @@ * Preamble *****************************************************************************/ -#include - -/***************************************************************************** - * prototypes - *****************************************************************************/ -int E_(CDDAOpen) ( vlc_object_t * ); -void E_(CDDAClose) ( vlc_object_t * ); - -int E_(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, - vlc_value_t oldval, vlc_value_t val, - void *p_data ); +#include "callback.h" +#include "access.h" /***************************************************************************** * Module descriptor @@ -67,6 +54,12 @@ int E_(CDDBEnabledCB)( vlc_object_t *p_this, const char *psz_name, "Allows you to modify the default caching value for CDDA streams. This " \ "value should be set in millisecond units." ) +#define BLOCKS_PER_READ_LONGTEXT N_( \ + "Allows you to specify how many CD blocks to get on a single CD read. " \ + "Generally on newer/faster CD's, this increases throughput at the " \ + "expense of a little more memory usage and initial delay. SCSI-MMC " \ + "limitations generally don't allow for more than 25 blocks per access.") + #define CDDB_TITLE_FMT_LONGTEXT N_( \ "Format used in the GUI Playlist Title. Similar to the Unix date \n" \ "Format specifiers that start with a percent sign. Specifiers are: \n" \ @@ -103,7 +96,7 @@ int E_(CDDBEnabledCB)( vlc_object_t *p_this, const char *psz_name, vlc_module_begin(); add_usage_hint( N_("cddax://[device-or-file][@[T]track]") ); set_description( _("Compact Disc Digital Audio (CD-DA) input") ); - set_capability( "access2", 10 /* slightly higher than cdda */ ); + set_capability( "access2", 10 /* compare with priority of cdda */ ); set_callbacks( E_(CDDAOpen), E_(CDDAClose) ); add_shortcut( "cddax" ); add_shortcut( "cd" ); @@ -114,10 +107,15 @@ vlc_module_begin(); DEBUG_LONGTEXT, VLC_TRUE ); add_integer( MODULE_STRING "-caching", - DEFAULT_PTS_DELAY / 1000, NULL, + DEFAULT_PTS_DELAY / MILLISECONDS_PER_SEC, NULL, N_("Caching value in microseconds"), CACHING_LONGTEXT, VLC_TRUE ); + add_integer( MODULE_STRING "-blocks-per-read", + DEFAULT_BLOCKS_PER_READ, E_(CDDABlocksPerReadCB), + N_("Number of blocks per CD read"), + BLOCKS_PER_READ_LONGTEXT, VLC_TRUE ); + add_string( MODULE_STRING "-author-format", "%A - %a %C %I", NULL, N_("Format to use in playlist \"author\" field"), @@ -143,7 +141,7 @@ vlc_module_begin(); add_string( MODULE_STRING "-cddb-server", "freedb.freedb.org", NULL, N_("CDDB server"), N_( "Contact this CDDB server look up CD-DA information"), - VLC_TRUE ); + VLC_TRUE ); add_integer( MODULE_STRING "-cddb-port", 8880, NULL, N_("CDDB server port"), @@ -153,7 +151,7 @@ vlc_module_begin(); add_string( MODULE_STRING "-cddb-email", "me@home", NULL, N_("email address reported to CDDB server"), N_("email address reported to CDDB server"), - VLC_TRUE ); + VLC_TRUE ); add_bool( MODULE_STRING "-cddb-enable-cache", 1, NULL, N_("Cache CDDB lookups?"), @@ -175,7 +173,7 @@ vlc_module_begin(); add_string( MODULE_STRING "-cddb-cachedir", "~/.cddbslave", NULL, N_("Directory to cache CDDB requests"), N_("Directory to cache CDDB requests"), - VLC_TRUE ); + VLC_TRUE ); #endif diff --git a/modules/access/cdda/cdda.h b/modules/access/cdda/cdda.h index 3f43dd068d..3616f56720 100644 --- a/modules/access/cdda/cdda.h +++ b/modules/access/cdda/cdda.h @@ -1,6 +1,5 @@ /***************************************************************************** - * cdda.h : CD-DA input module header for vlc - * using libcdio, libvcd and libvcdinfo + * cdda.h : CD-DA input module header for vlc using libcdio. ***************************************************************************** * Copyright (C) 2003 VideoLAN * $Id$ @@ -22,8 +21,11 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *****************************************************************************/ +#include #include +#include #include "vlc_meta.h" +#include "codecs.h" #ifdef HAVE_LIBCDDB #include @@ -56,39 +58,40 @@ *****************************************************************************/ typedef struct cdda_data_s { - CdIo *p_cdio; /* libcdio CD device */ - int i_tracks; /* # of tracks (titles) */ - int i_first_track; /* # of first track */ - - /* Current position */ - int i_track; /* Current track */ - lsn_t i_lsn; /* Current Logical Sector Number */ - lsn_t * p_lsns; /* Track LSNs */ - - int i_debug; /* Debugging mask */ - char * psz_mcn; /* Media Catalog Number */ - vlc_meta_t *p_meta; - - input_title_t *p_title[CDIO_CD_MAX_TRACKS]; - + CdIo *p_cdio; /* libcdio CD device */ + track_t i_tracks; /* # of tracks (titles) */ + track_t i_first_track; /* # of first track */ + + /* Current position */ + track_t i_track; /* Current track */ + lsn_t i_lsn; /* Current Logical Sector Number */ + lsn_t * p_lsns; /* Track LSNs */ + + int i_blocks_per_read; /* # blocks to get in a read */ + int i_debug; /* Debugging mask */ + /* Information about CD */ + vlc_meta_t *p_meta; + char * psz_mcn; /* Media Catalog Number */ + cdtext_t *cdtext; /* CD-Text info */ + input_title_t *p_title[CDIO_CD_MAX_TRACKS]; + + #ifdef HAVE_LIBCDDB - int i_cddb_enabled; + int i_cddb_enabled; struct { - bool have_info; /* True if we have any info */ - cddb_disc_t *disc; /* libcdio uses this to get disc info */ - int disc_length; /* Length in frames of cd. Used in - CDDB lookups */ + vlc_bool_t have_info; /* True if we have any info */ + cddb_disc_t *disc; /* libcdio uses this to get disc + info */ + int disc_length; /* Length in frames of cd. Used + in CDDB lookups */ } cddb; #endif - WAVEHEADER waveheader; /* Wave header for the output data */ - vlc_bool_t b_header; + WAVEHEADER waveheader; /* Wave header for the output data */ + vlc_bool_t b_header; } cdda_data_t; -/***************************************************************************** - * CDDAPlay: Arrange things so we play the specified track. - * VLC_TRUE is returned if there was no error. - *****************************************************************************/ -vlc_bool_t CDDAPlay ( input_thread_t *, int ); +/* FIXME: This variable is a hack. Would be nice to eliminate. */ +extern access_t *p_cdda_input; -- 2.39.2