[iso] upgrade libcdio track and sector handling

* From latest git version of libcdio
This commit is contained in:
Pete Batard 2013-06-04 01:03:56 +01:00
parent d3238d7210
commit b0e131e5e4
5 changed files with 179 additions and 165 deletions

View File

@ -15,7 +15,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file track.h
/** \file track.h
* \brief The top-level header for track-related libcdio calls.
*/
#ifndef CDIO_TRACK_H_
@ -27,7 +27,7 @@ extern "C" {
/*! Printable tags for track_format_t enumeration. */
extern const char *track_format2str[6];
typedef enum {
TRACK_FORMAT_AUDIO, /**< Audio track, e.g. CD-DA */
TRACK_FORMAT_CDI, /**< CD-i. How this is different from DATA below? */
@ -40,9 +40,9 @@ extern "C" {
} track_format_t;
typedef enum {
CDIO_TRACK_FLAG_FALSE,
CDIO_TRACK_FLAG_TRUE,
CDIO_TRACK_FLAG_ERROR,
CDIO_TRACK_FLAG_FALSE,
CDIO_TRACK_FLAG_TRUE,
CDIO_TRACK_FLAG_ERROR,
CDIO_TRACK_FLAG_UNKNOWN
} track_flag_t;
@ -54,7 +54,7 @@ extern "C" {
implemented or -1 for error.
*/
} track_flags_t;
/*! The leadout track is always 0xAA, regardless of # of tracks on
disc, or what value may be used internally. For example although
OS X uses a different value for the lead-out track internally than
@ -71,7 +71,7 @@ extern "C" {
CDIO_CDROM_LBA = 0x01, /**< "logical block": first frame is #0 */
CDIO_CDROM_MSF = 0x02, /**< "minute-second-frame": binary, not
BCD here! */
CDIO_CDROM_DATA_TRACK = 0x04,
CDIO_CDROM_DATA_TRACK = 0x04,
CDIO_CDROM_CDI_TRACK = 0x10,
CDIO_CDROM_XA_TRACK = 0x20,
CDIO_CD_MAX_TRACKS = 99, /**< Largest CD track number */
@ -79,10 +79,10 @@ extern "C" {
CDIO_INVALID_TRACK = 0xFF, /**< Constant for invalid track number */
} cdio_track_enums;
#define CDIO_CD_MIN_TRACK_NO 1 /**< Smallest CD track number */
/*! track modes (Table 350)
/*! track modes (Table 350)
reference: MMC-3 draft revsion - 10g
*/
typedef enum {
@ -95,26 +95,26 @@ extern "C" {
MODE2_FORM_MIX, /**< 2336 byte block length */
MODE2_RAW /**< 2352 byte block length */
} trackmode_t;
/*!
Get the number of the first track.
@return the track number or CDIO_INVALID_TRACK
/*!
Get the number of the first track.
@return the track number or CDIO_INVALID_TRACK
on error.
*/
track_t cdio_get_first_track_num(const CdIo_t *p_cdio);
/*!
Return the last track number.
CDIO_INVALID_TRACK is returned on error.
*/
track_t cdio_get_last_track_num (const CdIo_t *p_cdio);
/*! Find the track which contains lsn.
CDIO_INVALID_TRACK is returned if the lsn outside of the CD or
if there was some error.
if there was some error.
If the lsn is before the pregap of the first track 0 is returned.
Otherwise we return the track that spans the lsn.
*/
@ -125,37 +125,37 @@ extern "C" {
Not meaningful if track is not an audio track.
*/
int cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track);
/*! Return copy protection status on a track. Is this meaningful
if not an audio track?
*/
track_flag_t cdio_get_track_copy_permit(const CdIo_t *p_cdio,
track_flag_t cdio_get_track_copy_permit(const CdIo_t *p_cdio,
track_t i_track);
/*!
Get the format (audio, mode2, mode1) of track.
/*!
Get the format (audio, mode2, mode1) of track.
*/
track_format_t cdio_get_track_format(const CdIo_t *p_cdio, track_t i_track);
/*!
Return true if we have XA data (green, mode2 form1) or
XA data (green, mode2 form2). That is track begins:
sync - header - subheader
12 4 - 8
FIXME: there's gotta be a better design for this and get_track_format?
*/
bool cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track);
/*!
/*!
Return the ending LSN for track number
i_track in cdio. CDIO_INVALID_LSN is returned on error.
*/
lsn_t cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t i_track);
/*!
/*!
Get the starting LBA for track number
i_track in p_cdio. Track numbers usually start at something
i_track in p_cdio. Track numbers usually start at something
greater than 0, usually 1.
The "leadout" track is specified either by
@ -166,10 +166,10 @@ extern "C" {
@return the starting LBA or CDIO_INVALID_LBA on error.
*/
lba_t cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track);
/*!
/*!
Return the starting LSN for track number
i_track in p_cdio. Track numbers usually start at something
i_track in p_cdio. Track numbers usually start at something
greater than 0, usually 1.
The "leadout" track is specified either by
@ -181,9 +181,9 @@ extern "C" {
*/
lsn_t cdio_get_track_lsn(const CdIo_t *p_cdio, track_t i_track);
/*!
/*!
Return the starting LBA for the pregap for track number
i_track in p_cdio. Track numbers usually start at something
i_track in p_cdio. Track numbers usually start at something
greater than 0, usually 1.
@param p_cdio object to get information from
@ -192,9 +192,9 @@ extern "C" {
*/
lba_t cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t i_track);
/*!
/*!
Return the starting LSN for the pregap for track number
i_track in p_cdio. Track numbers usually start at something
i_track in p_cdio. Track numbers usually start at something
greater than 0, usually 1.
@param p_cdio object to get information from
@ -216,30 +216,30 @@ extern "C" {
*/
char * cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track);
/*!
/*!
Return the starting MSF (minutes/secs/frames) for track number
i_track in p_cdio. Track numbers usually start at something
i_track in p_cdio. Track numbers usually start at something
greater than 0, usually 1.
The "leadout" track is specified either by
using i_track CDIO_CDROM_LEADOUT_TRACK or the total tracks+1.
@return true if things worked or false if there is no track entry.
*/
bool cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track,
bool cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track,
/*out*/ msf_t *msf);
/*! Get linear preemphasis status on an audio track
/*! Get linear preemphasis status on an audio track
This is not meaningful if not an audio track?
*/
track_flag_t cdio_get_track_preemphasis(const CdIo_t *p_cdio,
track_t i_track);
/*!
/*!
Get the number of sectors between this track an the next. This
includes any pregap sectors before the start of the next track.
Track numbers usually start at something
Track numbers usually start at something
greater than 0, usually 1.
@return the number of sectors or 0 if there is an error.

View File

@ -27,7 +27,7 @@
#include <time.h>
#if defined(__MINGW32__) && !defined(__MINGW64__)
#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
struct timespec {
time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds */

View File

@ -41,21 +41,21 @@ static const char _rcsid[] = "$Id: sector.c,v 1.5 2005/02/06 04:20:25 rocky Exp
/*! String of bytes used to identify the beginning of a Mode 1 or
Mode 2 sector. */
const uint8_t CDIO_SECTOR_SYNC_HEADER[CDIO_CD_SYNC_SIZE] =
const uint8_t CDIO_SECTOR_SYNC_HEADER[CDIO_CD_SYNC_SIZE] =
{0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0};
/* Variables to hold debugger-helping enumerations */
enum cdio_cd_enums;
enum m2_sector_enums;
lba_t
cdio_lba_to_lsn (lba_t lba)
{
if (CDIO_INVALID_LBA == lba) return CDIO_INVALID_LSN;
return lba - CDIO_PREGAP_SECTORS;
return lba - CDIO_PREGAP_SECTORS;
}
/*
/*
The below is adapted from cdparanoia code which claims it is
straight from the MMC3 spec.
*/
@ -64,7 +64,7 @@ void
cdio_lsn_to_msf (lsn_t lsn, msf_t *msf)
{
int m, s, f;
cdio_assert (msf != 0);
if ( lsn >= -CDIO_PREGAP_SECTORS ){
@ -81,17 +81,17 @@ cdio_lsn_to_msf (lsn_t lsn, msf_t *msf)
f = lsn + CDIO_CD_MAX_LSN;
}
if (m > 99) {
if (m > 6) {
cdio_warn ("number of minutes (%d) truncated to 99.", m);
m = 99;
m = 6;
}
msf->m = cdio_to_bcd8 (m);
msf->s = cdio_to_bcd8 (s);
msf->f = cdio_to_bcd8 (f);
}
/*!
/*!
Convert an LBA into a string representation of the MSF.
\warning cdio_lba_to_msf_str returns new allocated string */
char *
@ -108,7 +108,7 @@ cdio_lba_to_msf_str (lba_t lba)
}
}
/*!
/*!
Convert an LSN into the corresponding LBA.
CDIO_INVALID_LBA is returned if there is an error.
*/
@ -116,10 +116,10 @@ lba_t
cdio_lsn_to_lba (lsn_t lsn)
{
if (CDIO_INVALID_LSN == lsn) return CDIO_INVALID_LBA;
return lsn + CDIO_PREGAP_SECTORS;
return lsn + CDIO_PREGAP_SECTORS;
}
/*!
/*!
Convert an LBA into the corresponding MSF.
*/
void
@ -129,7 +129,7 @@ cdio_lba_to_msf (lba_t lba, msf_t *msf)
cdio_lsn_to_msf(cdio_lba_to_lsn(lba), msf);
}
/*!
/*!
Convert a MSF into the corresponding LBA.
CDIO_INVALID_LBA is returned if there is an error.
*/
@ -145,13 +145,13 @@ cdio_msf_to_lba (const msf_t *msf)
lba += cdio_from_bcd8 (msf->s);
lba *= CDIO_CD_FRAMES_PER_SEC;
lba += cdio_from_bcd8 (msf->f);
return lba;
}
/*!
/*!
Convert a MSF into the corresponding LSN.
CDIO_INVALID_LSN is returned if there is an error.
*/
@ -161,32 +161,32 @@ cdio_msf_to_lsn (const msf_t *msf)
return cdio_lba_to_lsn(cdio_msf_to_lba (msf));
}
/*!
/*!
Convert an LBA into a string representation of the MSF.
\warning cdio_lba_to_msf_str returns new allocated string */
char *
cdio_msf_to_str (const msf_t *msf)
{
char buf[16];
snprintf (buf, sizeof (buf), "%2.2x:%2.2x:%2.2x", msf->m, msf->s, msf->f);
return strdup (buf);
}
/*!
/*!
Convert a MSF - broken out as 3 integer components into the
corresponding LBA.
corresponding LBA.
CDIO_INVALID_LBA is returned if there is an error.
*/
lba_t
cdio_msf3_to_lba (unsigned int minutes, unsigned int seconds,
cdio_msf3_to_lba (unsigned int minutes, unsigned int seconds,
unsigned int frames)
{
return ((minutes * CDIO_CD_SECS_PER_MIN + seconds) * CDIO_CD_FRAMES_PER_SEC
return ((minutes * CDIO_CD_SECS_PER_MIN + seconds) * CDIO_CD_FRAMES_PER_SEC
+ frames);
}
/*!
/*!
Convert a string of the form MM:SS:FF into the corresponding LBA.
CDIO_INVALID_LBA is returned if there is an error.
*/
@ -196,10 +196,10 @@ cdio_mmssff_to_lba (const char *psz_mmssff)
int psz_field;
lba_t ret;
unsigned char c;
if (0 == strcmp (psz_mmssff, "0"))
return 0;
c = *psz_mmssff++;
if(c >= '0' && c <= '9')
psz_field = (c - '0');
@ -211,9 +211,9 @@ cdio_mmssff_to_lba (const char *psz_mmssff)
else
return CDIO_INVALID_LBA;
}
ret = cdio_msf3_to_lba (psz_field, 0, 0);
c = *psz_mmssff++;
if(c >= '0' && c <= '9')
psz_field = (c - '0');
@ -229,12 +229,12 @@ cdio_mmssff_to_lba (const char *psz_mmssff)
else
return CDIO_INVALID_LBA;
}
if(psz_field >= CDIO_CD_SECS_PER_MIN)
return CDIO_INVALID_LBA;
ret += cdio_msf3_to_lba (0, psz_field, 0);
c = *psz_mmssff++;
if (isdigit(c))
psz_field = (c - '0');
@ -248,20 +248,20 @@ cdio_mmssff_to_lba (const char *psz_mmssff)
else
return CDIO_INVALID_LBA;
}
if('\0' != c)
return CDIO_INVALID_LBA;
if(psz_field >= CDIO_CD_FRAMES_PER_SEC)
return CDIO_INVALID_LBA;
ret += psz_field;
return ret;
}
/*
/*
* Local variables:
* c-file-style: "gnu"
* tab-width: 8

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2003, 2004, 2005, 2008, 2011, 2012
Copyright (C) 2003-2005, 2008, 2011-2013
Rocky Bernstein <rocky@gnu.org>
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
@ -25,13 +25,13 @@
#ifdef HAVE_STDBOOL_H
# include <stdbool.h>
#endif
#endif
#include <cdio/cdio.h>
#include <cdio/logging.h>
#include "cdio_private.h"
const char *track_format2str[6] =
const char *track_format2str[6] =
{
"audio", "CD-i", "XA", "data", "PSX", "error"
};
@ -40,7 +40,7 @@ const char *track_format2str[6] =
enum cdio_track_enums;
/*!
Return the number of the first track.
Return the number of the first track.
CDIO_INVALID_TRACK is returned on error.
*/
track_t
@ -50,7 +50,7 @@ cdio_get_first_track_num(const CdIo_t *p_cdio)
cdio_info("Null CdIo object passed\n");
return CDIO_INVALID_TRACK;
}
if (p_cdio->op.get_first_track_num) {
return p_cdio->op.get_first_track_num (p_cdio->env);
@ -74,9 +74,9 @@ cdio_get_last_track_num (const CdIo_t *p_cdio)
{
const track_t i_first_track = cdio_get_first_track_num(p_cdio);
if ( CDIO_INVALID_TRACK != i_first_track ) {
const track_t i_tracks = cdio_get_num_tracks(p_cdio);
if ( CDIO_INVALID_TRACK != i_tracks )
return i_first_track + i_tracks - 1;
const track_t u_tracks = cdio_get_num_tracks(p_cdio);
if ( CDIO_INVALID_TRACK != u_tracks )
return i_first_track + u_tracks - 1;
}
return CDIO_INVALID_TRACK;
}
@ -87,19 +87,21 @@ cdio_get_last_track_num (const CdIo_t *p_cdio)
Not meaningful if track is not an audio track.
*/
int
cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_channels(const CdIo_t *p_cdio, track_t u_track)
{
track_t u_last_track;
if (NULL == p_cdio) {
cdio_info("Null CdIo object passed\n");
return -1;
}
if (i_track > CDIO_CD_MAX_TRACKS) {
u_last_track = cdio_get_last_track_num(p_cdio);
if (u_track > u_last_track) {
cdio_log(CDIO_LOG_WARN, "Number of tracks exceeds maximum (%d vs. %d)\n",
i_track, CDIO_CD_MAX_TRACKS);
u_track, u_last_track);
return -1;
}
if (p_cdio->op.get_track_channels) {
return p_cdio->op.get_track_channels (p_cdio->env, i_track);
return p_cdio->op.get_track_channels (p_cdio->env, u_track);
} else {
return -2;
}
@ -109,44 +111,44 @@ cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track)
if not an audio track?
*/
track_flag_t
cdio_get_track_copy_permit(const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_copy_permit(const CdIo_t *p_cdio, track_t u_track)
{
if (p_cdio->op.get_track_copy_permit) {
return p_cdio->op.get_track_copy_permit (p_cdio->env, i_track);
return p_cdio->op.get_track_copy_permit (p_cdio->env, u_track);
} else {
return CDIO_TRACK_FLAG_UNKNOWN;
}
}
/*!
Get format of track.
/*!
Get format of track.
*/
track_format_t
cdio_get_track_format(const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_format(const CdIo_t *p_cdio, track_t u_track)
{
if (!p_cdio) return TRACK_FORMAT_ERROR;
if (p_cdio->op.get_track_format) {
return p_cdio->op.get_track_format (p_cdio->env, i_track);
return p_cdio->op.get_track_format (p_cdio->env, u_track);
} else {
return TRACK_FORMAT_ERROR;
}
}
/*!
/*!
Return the Joliet level recognized for p_cdio.
*/
uint8_t
uint8_t
cdio_get_joliet_level(const CdIo_t *p_cdio)
{
if (!p_cdio) return 0;
{
const generic_img_private_t *p_env
const generic_img_private_t *p_env
= (generic_img_private_t *) (p_cdio->env);
return p_env->i_joliet_level;
}
}
/*!
/*!
Return the number of tracks in the current medium.
CDIO_INVALID_TRACK is returned on error.
*/
@ -164,8 +166,8 @@ cdio_get_num_tracks (const CdIo_t *p_cdio)
/*! Find the track which contans lsn.
CDIO_INVALID_TRACK is returned if the lsn outside of the CD or
if there was some error.
if there was some error.
If the lsn is before the pregap of the first track 0 is returned.
Otherwise we return the track that spans the lsn.
*/
@ -173,18 +175,19 @@ track_t
cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn)
{
if (!p_cdio) return CDIO_INVALID_TRACK;
{
track_t i_low_track = cdio_get_first_track_num(p_cdio);
track_t i_high_track = cdio_get_last_track_num(p_cdio)+1; /* LEADOUT */
track_t i_high_track = cdio_get_last_track_num(p_cdio)+1;
track_t i_lead_track = i_high_track;
if (CDIO_INVALID_TRACK == i_low_track
if (CDIO_INVALID_TRACK == i_low_track
|| CDIO_INVALID_TRACK == i_high_track ) return CDIO_INVALID_TRACK;
if (lsn < cdio_get_track_lsn(p_cdio, i_low_track))
return 0; /* We're in the pre-gap of first track */
if (lsn > cdio_get_track_lsn(p_cdio, i_high_track))
if (lsn > cdio_get_track_lsn(p_cdio, CDIO_CDROM_LEADOUT_TRACK))
return CDIO_INVALID_TRACK; /* We're beyond the end. */
do {
@ -194,8 +197,14 @@ cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn)
if (lsn >= i_mid_lsn) i_low_track = i_mid + 1;
} while ( i_low_track <= i_high_track );
return (i_low_track > i_high_track + 1)
? i_high_track + 1 : i_high_track;
if (i_low_track > i_high_track + 1) {
i_high_track++;
}
if (i_high_track == i_lead_track ) {
return CDIO_CDROM_LEADOUT_TRACK;
} else {
return i_high_track;
}
}
}
@ -204,24 +213,24 @@ cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn)
XA data (green, mode2 form2). That is track begins:
sync - header - subheader
12 4 - 8
FIXME: there's gotta be a better design for this and get_track_format?
*/
bool
cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_green(const CdIo_t *p_cdio, track_t u_track)
{
if (p_cdio == NULL) {
return false;
}
if (p_cdio->op.get_track_green) {
return p_cdio->op.get_track_green (p_cdio->env, i_track);
return p_cdio->op.get_track_green (p_cdio->env, u_track);
} else {
return false;
}
}
/*!
/*!
Return the starting LBA for track number
track_num in cdio. Tracks numbers start at 1.
The "leadout" track is specified either by
@ -229,7 +238,7 @@ cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track)
CDIO_INVALID_LBA is returned on error.
*/
lba_t
cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_lba(const CdIo_t *p_cdio, track_t u_track)
{
if (NULL == p_cdio) {
cdio_info("Null CdIo object passed\n");
@ -237,42 +246,45 @@ cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track)
}
if (p_cdio->op.get_track_lba) {
return p_cdio->op.get_track_lba (p_cdio->env, i_track);
return p_cdio->op.get_track_lba (p_cdio->env, u_track);
} else {
msf_t msf;
if (p_cdio->op.get_track_msf)
if (cdio_get_track_msf(p_cdio, i_track, &msf))
if (p_cdio->op.get_track_msf)
if (cdio_get_track_msf(p_cdio, u_track, &msf))
return cdio_msf_to_lba(&msf);
return CDIO_INVALID_LBA;
}
}
/*!
/*!
Return the starting LSN for track number
i_track in cdio. Tracks numbers start at 1.
u_track in cdio. Tracks numbers start at 1.
The "leadout" track is specified either by
using i_track LEADOUT_TRACK or the total tracks+1.
using u_track LEADOUT_TRACK or the total tracks+1.
CDIO_INVALID_LSN is returned on error.
*/
lsn_t
cdio_get_track_lsn(const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_lsn(const CdIo_t *p_cdio, track_t u_track)
{
/*track_t u_last_track; */
if (NULL == p_cdio) {
cdio_info("Null CdIo object passed\n");
return CDIO_INVALID_LSN;
}
if (i_track > CDIO_CD_MAX_TRACKS && i_track != CDIO_CDROM_LEADOUT_TRACK) {
/*
u_last_track = cdio_get_last_track_num(p_cdio);
if (u_track > u_last_track && u_track != CDIO_CDROM_LEADOUT_TRACK) {
cdio_log(CDIO_LOG_WARN, "Number of tracks exceeds maximum (%d vs. %d)\n",
i_track, CDIO_CD_MAX_TRACKS);
u_track, u_last_track);
return CDIO_INVALID_LSN;
}
*/
if (p_cdio->op.get_track_lba) {
return cdio_lba_to_lsn(p_cdio->op.get_track_lba (p_cdio->env, i_track));
return cdio_lba_to_lsn(p_cdio->op.get_track_lba (p_cdio->env, u_track));
} else {
msf_t msf;
if (cdio_get_track_msf(p_cdio, i_track, &msf))
if (cdio_get_track_msf(p_cdio, u_track, &msf))
return cdio_msf_to_lsn(&msf);
return CDIO_INVALID_LSN;
}
@ -280,39 +292,41 @@ cdio_get_track_lsn(const CdIo_t *p_cdio, track_t i_track)
/*!
Return the International Standard Recording Code (ISRC) for track number
i_track in p_cdio. Track numbers start at 1.
u_track in p_cdio. Track numbers start at 1.
Note: string is malloc'd so caller has to free() the returned
string when done with it.
*/
char *
cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_isrc (const CdIo_t *p_cdio, track_t u_track)
{
track_t u_last_track;
if (NULL == p_cdio) {
cdio_info("Null CdIo object passed\n");
return NULL;
}
if (i_track > CDIO_CD_MAX_TRACKS) {
u_last_track = cdio_get_last_track_num(p_cdio);
if (u_track > u_last_track) {
cdio_log(CDIO_LOG_WARN, "Number of tracks exceeds maximum (%d vs. %d)\n",
i_track, CDIO_CD_MAX_TRACKS);
u_track, u_last_track);
return NULL;
}
if (p_cdio->op.get_track_isrc) {
return p_cdio->op.get_track_isrc (p_cdio->env, i_track);
return p_cdio->op.get_track_isrc (p_cdio->env, u_track);
} else {
return NULL;
}
}
/*!
/*!
Return the starting LBA for the pregap for track number
i_track in cdio. Track numbers start at 1.
u_track in cdio. Track numbers start at 1.
CDIO_INVALID_LBA is returned on error.
*/
lba_t
cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t u_track)
{
if (NULL == p_cdio) {
cdio_info("Null CdIo object passed\n");
@ -320,53 +334,53 @@ cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t i_track)
}
if (p_cdio->op.get_track_pregap_lba) {
return p_cdio->op.get_track_pregap_lba (p_cdio->env, i_track);
return p_cdio->op.get_track_pregap_lba (p_cdio->env, u_track);
} else {
return CDIO_INVALID_LBA;
}
}
/*!
/*!
Return the starting LSN for the pregap for track number
i_track in cdio. Track numbers start at 1.
u_track in cdio. Track numbers start at 1.
CDIO_INVALID_LSN is returned on error.
*/
lsn_t
cdio_get_track_pregap_lsn(const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_pregap_lsn(const CdIo_t *p_cdio, track_t u_track)
{
return cdio_lba_to_lsn(cdio_get_track_pregap_lba(p_cdio, i_track));
return cdio_lba_to_lsn(cdio_get_track_pregap_lba(p_cdio, u_track));
}
/*!
/*!
Return the ending LSN for track number
i_track in cdio. CDIO_INVALID_LSN is returned on error.
u_track in cdio. CDIO_INVALID_LSN is returned on error.
*/
lsn_t
cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t u_track)
{
lsn_t lsn = cdio_get_track_lsn(p_cdio, i_track+1);
lsn_t lsn = cdio_get_track_lsn(p_cdio, u_track+1);
if (CDIO_INVALID_LSN == lsn) return CDIO_INVALID_LSN;
/* Safe, we've always the leadout. */
return lsn - 1;
}
/*!
/*!
Return the starting MSF (minutes/secs/frames) for track number
i_track in cdio. Track numbers start at 1.
u_track in cdio. Track numbers start at 1.
The "leadout" track is specified either by
using i_track LEADOUT_TRACK or the total tracks+1.
using u_track LEADOUT_TRACK or the total tracks+1.
False is returned if there is no track entry.
*/
bool
cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track, /*out*/ msf_t *msf)
cdio_get_track_msf(const CdIo_t *p_cdio, track_t u_track, /*out*/ msf_t *msf)
{
if (!p_cdio) return false;
if (p_cdio->op.get_track_msf) {
return p_cdio->op.get_track_msf (p_cdio->env, i_track, msf);
return p_cdio->op.get_track_msf (p_cdio->env, u_track, msf);
} else if (p_cdio->op.get_track_lba) {
lba_t lba = p_cdio->op.get_track_lba (p_cdio->env, i_track);
lba_t lba = p_cdio->op.get_track_lba (p_cdio->env, u_track);
if (lba == CDIO_INVALID_LBA) return false;
cdio_lba_to_msf(lba, msf);
return true;
@ -379,28 +393,28 @@ cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track, /*out*/ msf_t *msf)
if not an audio track?
*/
track_flag_t
cdio_get_track_preemphasis(const CdIo *p_cdio, track_t i_track)
cdio_get_track_preemphasis(const CdIo *p_cdio, track_t u_track)
{
if (p_cdio->op.get_track_preemphasis) {
return p_cdio->op.get_track_preemphasis (p_cdio->env, i_track);
return p_cdio->op.get_track_preemphasis (p_cdio->env, u_track);
} else {
return CDIO_TRACK_FLAG_UNKNOWN;
}
}
/*!
/*!
Return the number of sectors between this track an the next. This
includes any pregap sectors before the start of the next track.
Tracks start at 1.
0 is returned if there is an error.
*/
unsigned int
cdio_get_track_sec_count(const CdIo_t *p_cdio, track_t i_track)
cdio_get_track_sec_count(const CdIo_t *p_cdio, track_t u_track)
{
const track_t i_tracks = cdio_get_num_tracks(p_cdio);
const track_t u_tracks = cdio_get_num_tracks(p_cdio);
if (i_track >=1 && i_track <= i_tracks)
return ( cdio_get_track_lba(p_cdio, i_track+1)
- cdio_get_track_lba(p_cdio, i_track) );
if (u_track >=1 && u_track <= u_tracks)
return ( cdio_get_track_lba(p_cdio, u_track+1)
- cdio_get_track_lba(p_cdio, u_track) );
return 0;
}

View File

@ -30,7 +30,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 206, 329
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Rufus v1.3.3.246"
CAPTION "Rufus v1.3.3.247"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
@ -276,8 +276,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,3,3,246
PRODUCTVERSION 1,3,3,246
FILEVERSION 1,3,3,247
PRODUCTVERSION 1,3,3,247
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -294,13 +294,13 @@ BEGIN
BEGIN
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
VALUE "FileDescription", "Rufus"
VALUE "FileVersion", "1.3.3.246"
VALUE "FileVersion", "1.3.3.247"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "(c) 2011-2013 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
VALUE "OriginalFilename", "rufus.exe"
VALUE "ProductName", "Rufus"
VALUE "ProductVersion", "1.3.3.246"
VALUE "ProductVersion", "1.3.3.247"
END
END
BLOCK "VarFileInfo"