Small changes.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
# Copyright (C) 2003, 2004, 2006, 2008, 2011 Rocky Bernstein <rocky@gnu.org>
|
||||
# Copyright (C) 2003, 2004, 2006, 2008, 2011, 2012
|
||||
# Rocky Bernstein <rocky@gnu.org>
|
||||
#
|
||||
# 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
|
||||
|
||||
@@ -1,411 +0,0 @@
|
||||
/*
|
||||
$Id: cdda.h,v 1.30 2008/03/25 15:59:08 karl Exp $
|
||||
|
||||
Copyright (C) 2004, 2005, 2006, 2008 Rocky Bernstein <rocky@gnu.org>
|
||||
Copyright (C) 2001 Xiph.org and Heiko Eissfeldt heiko@escape.colossus.de
|
||||
|
||||
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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** \file cdda.h
|
||||
*
|
||||
* \brief The top-level interface header for libcdio_cdda.
|
||||
* Applications include this for paranoia access.
|
||||
*
|
||||
******************************************************************/
|
||||
|
||||
#ifndef _CDDA_INTERFACE_H_
|
||||
#define _CDDA_INTERFACE_H_
|
||||
|
||||
#include <cdio/cdio.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** cdrom_paranoia is an opaque structure which is used in all of the
|
||||
library operations.
|
||||
*/
|
||||
typedef struct cdrom_paranoia_s cdrom_paranoia_t;
|
||||
typedef struct cdrom_drive_s cdrom_drive_t;
|
||||
|
||||
/** For compatibility. cdrom_drive_t is deprecated, use cdrom_drive_t
|
||||
instead. */
|
||||
|
||||
/**
|
||||
Flags for simulating jitter used in testing.
|
||||
|
||||
The enumeration type one probably wouldn't really use in a program.
|
||||
It is here instead of defines to give symbolic names that can be
|
||||
helpful in debuggers where wants just to say refer to
|
||||
CDDA_TEST_JITTER_SMALL and get the correct value.
|
||||
*/
|
||||
typedef enum {
|
||||
CDDA_MESSAGE_FORGETIT = 0,
|
||||
CDDA_MESSAGE_PRINTIT = 1,
|
||||
CDDA_MESSAGE_LOGIT = 2,
|
||||
CD_FRAMESAMPLES = CDIO_CD_FRAMESIZE_RAW / 4,
|
||||
MAXTRK = (CDIO_CD_MAX_TRACKS+1)
|
||||
} paranoia_cdda_enums_t;
|
||||
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
/** We keep MAXTRK since this header is exposed publicly and other
|
||||
programs may have used this.
|
||||
*/
|
||||
#define MAXTRK (CDIO_CD_MAX_TRACKS+1)
|
||||
|
||||
/** \brief Structure for cdparanoia's CD Table of Contents */
|
||||
typedef struct TOC_s {
|
||||
unsigned char bTrack;
|
||||
int32_t dwStartSector;
|
||||
} TOC_t;
|
||||
|
||||
/** For compatibility. TOC is deprecated, use TOC_t instead. */
|
||||
#define TOC TOC_t
|
||||
|
||||
/** \brief Structure for cdparanoia's CD-ROM access */
|
||||
struct cdrom_drive_s {
|
||||
|
||||
CdIo_t *p_cdio;
|
||||
int opened; /**< This struct may just represent a candidate for opening */
|
||||
|
||||
char *cdda_device_name;
|
||||
|
||||
char *drive_model;
|
||||
int drive_type;
|
||||
int bigendianp; /**< Whether data returned on the CDDA is bigendian or
|
||||
not. 1 if big endian, 0 if little endian and -1 if
|
||||
we don't know.
|
||||
*/
|
||||
int nsectors; /**< Number of sectors use in reading. Multiply by
|
||||
CDIO_CD_FRAMESIZE_RAW to get number of bytes used in
|
||||
the read buffer. */
|
||||
|
||||
int cd_extra; /**< -1 if we can't get multisession info, 0 if
|
||||
there is one session only or the multi-session
|
||||
LBA is less than or 100 (don't ask me why -- I
|
||||
don't know), and 1 if the multi-session lba is
|
||||
greater than 100. */
|
||||
|
||||
bool b_swap_bytes; /**< Swap bytes if Endian-ness of drive
|
||||
mismatches the endian-ness of the
|
||||
computer? */
|
||||
track_t tracks;
|
||||
TOC_t disc_toc[MAXTRK]; /**< info here starts origin 0 rather than the
|
||||
first track number (usually 1). So to take
|
||||
a track number and use it here, subtract
|
||||
off cdio_get_first_track_num() beforehand.
|
||||
*/
|
||||
lsn_t audio_first_sector;
|
||||
lsn_t audio_last_sector;
|
||||
|
||||
int errordest;
|
||||
int messagedest;
|
||||
char *errorbuf;
|
||||
char *messagebuf;
|
||||
|
||||
/* functions specific to particular drives/interfaces */
|
||||
|
||||
int (*enable_cdda) (cdrom_drive_t *d, int onoff);
|
||||
int (*read_toc) (cdrom_drive_t *d);
|
||||
long (*read_audio) (cdrom_drive_t *d, void *p, lsn_t begin,
|
||||
long sectors);
|
||||
int (*set_speed) (cdrom_drive_t *d, int speed);
|
||||
int error_retry;
|
||||
int report_all;
|
||||
|
||||
int is_atapi;
|
||||
int is_mmc;
|
||||
|
||||
int i_test_flags; /**< Normally set 0. But if we are testing
|
||||
paranoia operation this can be set to one of
|
||||
the flag masks to simulate a particular kind of
|
||||
failure. */
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
Flags for simulating jitter used in testing.
|
||||
|
||||
The enumeration type one probably wouldn't really use in a program.
|
||||
It is here instead of defines to give symbolic names that can be
|
||||
helpful in debuggers where wants just to say refer to
|
||||
CDDA_TEST_JITTER_SMALL and get the correct value.
|
||||
*/
|
||||
typedef enum {
|
||||
CDDA_TEST_JITTER_SMALL = 1,
|
||||
CDDA_TEST_JITTER_LARGE = 2,
|
||||
CDDA_TEST_JITTER_MASSIVE = 3,
|
||||
CDDA_TEST_FRAG_SMALL = (1<<3),
|
||||
CDDA_TEST_FRAG_LARGE = (2<<3),
|
||||
CDDA_TEST_FRAG_MASSIVE = (3<<3),
|
||||
CDDA_TEST_UNDERRUN = 64
|
||||
} paranoia_jitter_t;
|
||||
|
||||
/** jitter testing. The first two bits are set to determine the
|
||||
byte-distance we will jitter the data; 0 is no shifting.
|
||||
*/
|
||||
|
||||
/**< jitter testing. Set the below bit to always cause jittering on reads.
|
||||
The below bit only has any effect if the first two (above) bits are
|
||||
nonzero. If the above bits are set, but the below bit isn't we'll
|
||||
jitter 90% of the time.
|
||||
*/
|
||||
#define CDDA_TEST_ALWAYS_JITTER 4
|
||||
|
||||
/** fragment testing */
|
||||
#define CDDA_TEST_FRAG_SMALL (1<<3)
|
||||
#define CDDA_TEST_FRAG_LARGE (2<<3)
|
||||
#define CDDA_TEST_FRAG_MASSIVE (3<<3)
|
||||
|
||||
/**< under-run testing. The below bit is set for testing. */
|
||||
#define CDDA_TEST_UNDERRUN 64
|
||||
|
||||
#if TESTING_IS_FINISHED
|
||||
|
||||
/** scratch testing */
|
||||
#define CDDA_TEST_SCRATCH 128
|
||||
#undef CDDA_TEST_BOGUS_BYTES 256
|
||||
#undef CDDA_TEST_DROPDUPE_BYTES 512
|
||||
#endif /* TESTING_IS_FINISHED */
|
||||
|
||||
/** autosense functions */
|
||||
|
||||
/** Get a CD-ROM drive with a CD-DA in it.
|
||||
If mesagedest is 1, then any messages in the process will be stored
|
||||
in message.
|
||||
*/
|
||||
extern cdrom_drive_t *cdio_cddap_find_a_cdrom(int messagedest,
|
||||
char **ppsz_message);
|
||||
|
||||
/** Returns a paranoia CD-ROM drive object with a CD-DA in it or NULL
|
||||
if there was an error.
|
||||
@see cdio_cddap_identify_cdio
|
||||
*/
|
||||
extern cdrom_drive_t *cdio_cddap_identify(const char *psz_device,
|
||||
int messagedest,
|
||||
char **ppsz_message);
|
||||
|
||||
/** Returns a paranoia CD-ROM drive object with a CD-DA in it or NULL
|
||||
if there was an error. In contrast to cdio_cddap_identify, we
|
||||
start out with an initialized p_cdio object. For example you may
|
||||
have used that for other purposes such as to get CDDB/CD-Text
|
||||
information. @see cdio_cddap_identify
|
||||
*/
|
||||
cdrom_drive_t *cdio_cddap_identify_cdio(CdIo_t *p_cdio,
|
||||
int messagedest, char **ppsz_messages);
|
||||
|
||||
/** drive-oriented functions */
|
||||
|
||||
extern int cdio_cddap_speed_set(cdrom_drive_t *d, int speed);
|
||||
extern void cdio_cddap_verbose_set(cdrom_drive_t *d, int err_action,
|
||||
int mes_action);
|
||||
extern char *cdio_cddap_messages(cdrom_drive_t *d);
|
||||
extern char *cdio_cddap_errors(cdrom_drive_t *d);
|
||||
|
||||
/*!
|
||||
Closes d and releases all storage associated with it except
|
||||
the internal p_cdio pointer.
|
||||
|
||||
@param d cdrom_drive_t object to be closed.
|
||||
@return 0 if passed a null pointer and 1 if not in which case
|
||||
some work was probably done.
|
||||
|
||||
@see cdio_cddap_close
|
||||
*/
|
||||
bool cdio_cddap_close_no_free_cdio(cdrom_drive_t *d);
|
||||
|
||||
/*!
|
||||
Closes d and releases all storage associated with it.
|
||||
Doubles as "cdrom_drive_free()".
|
||||
|
||||
@param d cdrom_drive_t object to be closed.
|
||||
@return 0 if passed a null pointer and 1 if not in which case
|
||||
some work was probably done.
|
||||
|
||||
@see cdio_cddap_close_no_free_cdio
|
||||
*/
|
||||
extern int cdio_cddap_close(cdrom_drive_t *d);
|
||||
|
||||
extern int cdio_cddap_open(cdrom_drive_t *d);
|
||||
|
||||
extern long cdio_cddap_read(cdrom_drive_t *d, void *p_buffer,
|
||||
lsn_t beginsector, long sectors);
|
||||
|
||||
/*! Return the lsn for the start of track i_track */
|
||||
extern lsn_t cdio_cddap_track_firstsector(cdrom_drive_t *d,
|
||||
track_t i_track);
|
||||
|
||||
/*! Get last lsn of the track. This generally one less than the start
|
||||
of the next track. -1 is returned on error. */
|
||||
extern lsn_t cdio_cddap_track_lastsector(cdrom_drive_t *d, track_t i_track);
|
||||
|
||||
/*! Return the number of tracks on the CD. */
|
||||
extern track_t cdio_cddap_tracks(cdrom_drive_t *d);
|
||||
|
||||
/*! Return the track containing the given LSN. If the LSN is before
|
||||
the first track (in the pregap), 0 is returned. If there was an
|
||||
error or the LSN after the LEADOUT (beyond the end of the CD), then
|
||||
CDIO_INVALID_TRACK is returned.
|
||||
*/
|
||||
extern int cdio_cddap_sector_gettrack(cdrom_drive_t *d, lsn_t lsn);
|
||||
|
||||
/*! Return the number of channels in track: 2 or 4; -2 if not
|
||||
implemented or -1 for error.
|
||||
Not meaningful if track is not an audio track.
|
||||
*/
|
||||
extern int cdio_cddap_track_channels(cdrom_drive_t *d, track_t i_track);
|
||||
|
||||
/*! Return 1 is track is an audio track, 0 otherwise. */
|
||||
extern int cdio_cddap_track_audiop(cdrom_drive_t *d, track_t i_track);
|
||||
|
||||
/*! Return 1 is track has copy permit set, 0 otherwise. */
|
||||
extern int cdio_cddap_track_copyp(cdrom_drive_t *d, track_t i_track);
|
||||
|
||||
/*! Return 1 is audio track has linear preemphasis set, 0 otherwise.
|
||||
Only makes sense for audio tracks.
|
||||
*/
|
||||
extern int cdio_cddap_track_preemp(cdrom_drive_t *d, track_t i_track);
|
||||
|
||||
/*! Get first lsn of the first audio track. -1 is returned on error. */
|
||||
extern lsn_t cdio_cddap_disc_firstsector(cdrom_drive_t *d);
|
||||
|
||||
/*! Get last lsn of the last audio track. The last lsn is generally one
|
||||
less than the start of the next track after the audio track. -1 is
|
||||
returned on error. */
|
||||
extern lsn_t cdio_cddap_disc_lastsector(cdrom_drive_t *d);
|
||||
|
||||
/*! Determine Endian-ness of the CD-drive based on reading data from
|
||||
it. Some drives return audio data Big Endian while some (most)
|
||||
return data Little Endian. Drives known to return data bigendian are
|
||||
SCSI drives from Kodak, Ricoh, HP, Philips, Plasmon, Grundig
|
||||
CDR100IPW, and Mitsumi CD-R. ATAPI and MMC drives are little endian.
|
||||
|
||||
rocky: As someone who didn't write the code, I have to say this is
|
||||
nothing less than brilliant. An FFT is done both ways and the the
|
||||
transform is looked at to see which has data in the FFT (or audible)
|
||||
portion. (Or so that's how I understand it.)
|
||||
|
||||
@return 1 if big-endian, 0 if little-endian, -1 if we couldn't
|
||||
figure things out or some error.
|
||||
*/
|
||||
extern int data_bigendianp(cdrom_drive_t *d);
|
||||
|
||||
/** transport errors: */
|
||||
|
||||
typedef enum {
|
||||
TR_OK = 0,
|
||||
TR_EWRITE = 1 /**< Error writing packet command (transport) */,
|
||||
TR_EREAD = 2 /**< Error reading packet data (transport) */,
|
||||
TR_UNDERRUN = 3 /**< Read underrun */,
|
||||
TR_OVERRUN = 4 /**< Read overrun */,
|
||||
TR_ILLEGAL = 5 /**< Illegal/rejected request */,
|
||||
TR_MEDIUM = 6 /**< Medium error */,
|
||||
TR_BUSY = 7 /**< Device busy */,
|
||||
TR_NOTREADY = 8 /**< Device not ready */,
|
||||
TR_FAULT = 9 /**< Device failure */,
|
||||
TR_UNKNOWN = 10 /**< Unspecified error */,
|
||||
TR_STREAMING = 11 /**< loss of streaming */,
|
||||
} transport_error_t;
|
||||
|
||||
|
||||
#ifdef NEED_STRERROR_TR
|
||||
const char *strerror_tr[]={
|
||||
"Success",
|
||||
"Error writing packet command to device",
|
||||
"Error reading command from device",
|
||||
"SCSI packet data underrun (too little data)",
|
||||
"SCSI packet data overrun (too much data)",
|
||||
"Illegal SCSI request (rejected by target)",
|
||||
"Medium reading data from medium",
|
||||
"Device busy",
|
||||
"Device not ready",
|
||||
"Target hardware fault",
|
||||
"Unspecified error",
|
||||
"Drive lost streaming"
|
||||
};
|
||||
#endif /*NEED_STERROR_TR*/
|
||||
|
||||
/** Errors returned by lib:
|
||||
|
||||
\verbatim
|
||||
001: Unable to set CDROM to read audio mode
|
||||
002: Unable to read table of contents lead-out
|
||||
003: CDROM reporting illegal number of tracks
|
||||
004: Unable to read table of contents header
|
||||
005: Unable to read table of contents entry
|
||||
006: Could not read any data from drive
|
||||
007: Unknown, unrecoverable error reading data
|
||||
008: Unable to identify CDROM model
|
||||
009: CDROM reporting illegal table of contents
|
||||
010: Unaddressable sector
|
||||
|
||||
100: Interface not supported
|
||||
101: Drive is neither a CDROM nor a WORM device
|
||||
102: Permision denied on cdrom (ioctl) device
|
||||
103: Permision denied on cdrom (data) device
|
||||
|
||||
300: Kernel memory error
|
||||
|
||||
400: Device not open
|
||||
401: Invalid track number
|
||||
402: Track not audio data
|
||||
403: No audio tracks on disc
|
||||
\endverbatim
|
||||
|
||||
*/
|
||||
|
||||
#ifndef DO_NOT_WANT_PARANOIA_COMPATIBILITY
|
||||
/** For compatibility with good ol' paranoia */
|
||||
#define cdda_find_a_cdrom cdio_cddap_find_a_cdrom
|
||||
#define cdda_identify cdio_cddap_identify
|
||||
#define cdda_speed_set cdio_cddap_speed_set
|
||||
#define cdda_verbose_set cdio_cddap_verbose_set
|
||||
#define cdda_messages cdio_cddap_messages
|
||||
#define cdda_errors cdio_cddap_errors
|
||||
#define cdda_close cdio_cddap_close
|
||||
#define cdda_open cdio_cddap_open
|
||||
#define cdda_read cdio_cddap_read
|
||||
#define cdda_track_firstsector cdio_cddap_track_firstsector
|
||||
#define cdda_track_lastsector cdio_cddap_track_lastsector
|
||||
#define cdda_tracks cdio_cddap_tracks
|
||||
#define cdda_sector_gettrack cdio_cddap_sector_gettrack
|
||||
#define cdda_track_channels cdio_cddap_track_channels
|
||||
#define cdda_track_audiop cdio_cddap_track_audiop
|
||||
#define cdda_track_copyp cdio_cddap_track_copyp
|
||||
#define cdda_track_preemp cdio_cddap_track_preemp
|
||||
#define cdda_disc_firstsector cdio_cddap_disc_firstsector
|
||||
#define cdda_disc_lastsector cdio_cddap_disc_lastsector
|
||||
#define cdrom_drive cdrom_drive_t
|
||||
|
||||
#endif /*DO_NOT_WANT_PARANOIA_COMPATIBILITY*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** The below variables are trickery to force the above enum symbol
|
||||
values to be recorded in debug symbol tables. They are used to
|
||||
allow one to refer to the enumeration value names in the typedefs
|
||||
above in a debugger and debugger expressions
|
||||
*/
|
||||
|
||||
extern paranoia_jitter_t debug_paranoia_jitter;
|
||||
extern paranoia_cdda_enums_t debug_paranoia_cdda_enums;
|
||||
|
||||
#endif /*_CDDA_INTERFACE_H_*/
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
# Tests to see that BIN/CUE and cdrdao TOC file iamge reading is correct
|
||||
# (via cd-info).
|
||||
|
||||
if test "@VCDINFO_LIBS@X" != "X" ; then
|
||||
if test ! -d "@VCDINFO_LIBS@" ; then
|
||||
vcd_opt='--no-vcd'
|
||||
fi
|
||||
|
||||
if test "X$abs_top_srcdir" = "X" ; then
|
||||
if test ! -d "$abs_top_srcdir" ; then
|
||||
abs_top_srcdir=@abs_top_srcdir@
|
||||
fi
|
||||
|
||||
if test "X$top_builddir" = "X" ; then
|
||||
if test ! -d "$top_builddir" ; then
|
||||
top_builddir=@abs_top_builddir@
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user