get isrc from nrg files AND new API char * cdio_get_track_isrc(CdIo_t *,track_t);

This commit is contained in:
edsdead
2008-03-20 01:40:28 +00:00
parent c0f66c3330
commit e4ecb61b05
10 changed files with 112 additions and 24 deletions

View File

@@ -1,5 +1,5 @@
/* -*- c -*- /* -*- c -*-
$Id: track.h,v 1.12 2008/03/16 00:12:42 rocky Exp $ $Id: track.h,v 1.13 2008/03/20 01:40:28 edsdead Exp $
Copyright (C) 2005, 2006 Rocky Bernstein <rocky@panix.com> Copyright (C) 2005, 2006 Rocky Bernstein <rocky@panix.com>
@@ -218,6 +218,20 @@ extern "C" {
@return the starting LSN or CDIO_INVALID_LSN on error. @return the starting LSN or CDIO_INVALID_LSN on error.
*/ */
lsn_t cdio_get_track_pregap_lsn(const CdIo_t *p_cdio, track_t i_track); lsn_t cdio_get_track_pregap_lsn(const CdIo_t *p_cdio, track_t i_track);
/*!
Get the International Standard Recording Code (ISRC) for track number
i_track in p_cdio. Track numbers usually start at something
greater than 0, usually 1.
@return the International Standard Recording Code (ISRC) or NULL
if there is none or we don't have the ability to get it.
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);
/*! /*!
Return the starting MSF (minutes/secs/frames) for track number Return the starting MSF (minutes/secs/frames) for track number

View File

@@ -1,5 +1,5 @@
/* /*
$Id: cdio_private.h,v 1.32 2008/03/16 00:12:43 rocky Exp $ $Id: cdio_private.h,v 1.33 2008/03/20 01:40:29 edsdead Exp $
Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com> Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
@@ -267,6 +267,15 @@ extern "C" {
CDIO_INVALID_LBA is returned on error. CDIO_INVALID_LBA is returned on error.
*/ */
lba_t (*get_track_pregap_lba) ( const void *p_env, track_t i_track ); lba_t (*get_track_pregap_lba) ( const void *p_env, track_t i_track );
/*!
Return the International Standard Recording Code (ISRC) for track number
i_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 * (*get_track_isrc) ( const CdIo_t *p_cdio, track_t i_track );
/*! /*!
Get format of track. Get format of track.

View File

@@ -1,5 +1,5 @@
/* /*
$Id: bincue.c,v 1.21 2008/03/19 04:38:52 edsdead Exp $ $Id: bincue.c,v 1.22 2008/03/20 01:40:29 edsdead Exp $
Copyright (C) 2002, 2003, 2004, 2005, 2006 Copyright (C) 2002, 2003, 2004, 2005, 2006
Rocky Bernstein <rocky@panix.com> Rocky Bernstein <rocky@panix.com>
@@ -27,7 +27,7 @@
(*.cue). (*.cue).
*/ */
static const char _rcsid[] = "$Id: bincue.c,v 1.21 2008/03/19 04:38:52 edsdead Exp $"; static const char _rcsid[] = "$Id: bincue.c,v 1.22 2008/03/20 01:40:29 edsdead Exp $";
#include "image.h" #include "image.h"
#include "cdio_assert.h" #include "cdio_assert.h"
@@ -1154,14 +1154,15 @@ cdio_open_cue (const char *psz_cue_name)
_funcs.get_media_changed = get_media_changed_image; _funcs.get_media_changed = get_media_changed_image;
_funcs.get_mcn = _get_mcn_image; _funcs.get_mcn = _get_mcn_image;
_funcs.get_num_tracks = _get_num_tracks_image; _funcs.get_num_tracks = _get_num_tracks_image;
_funcs.get_track_channels = get_track_channels_image, _funcs.get_track_channels = get_track_channels_image;
_funcs.get_track_copy_permit = get_track_copy_permit_image, _funcs.get_track_copy_permit = get_track_copy_permit_image;
_funcs.get_track_format = _get_track_format_bincue; _funcs.get_track_format = _get_track_format_bincue;
_funcs.get_track_green = _get_track_green_bincue; _funcs.get_track_green = _get_track_green_bincue;
_funcs.get_track_lba = _get_lba_track_bincue; _funcs.get_track_lba = _get_lba_track_bincue;
_funcs.get_track_msf = _get_track_msf_image; _funcs.get_track_msf = _get_track_msf_image;
_funcs.get_track_preemphasis = get_track_preemphasis_image, _funcs.get_track_preemphasis = get_track_preemphasis_image;
_funcs.get_track_pregap_lba = get_track_pregap_lba_image; _funcs.get_track_pregap_lba = get_track_pregap_lba_image;
_funcs.get_track_isrc = get_track_isrc_image;
_funcs.lseek = _lseek_bincue; _funcs.lseek = _lseek_bincue;
_funcs.read = _read_bincue; _funcs.read = _read_bincue;
_funcs.read_audio_sectors = _read_audio_sectors_bincue; _funcs.read_audio_sectors = _read_audio_sectors_bincue;

View File

@@ -1,5 +1,5 @@
/* /*
$Id: cdrdao.c,v 1.25 2008/03/19 04:38:52 edsdead Exp $ $Id: cdrdao.c,v 1.26 2008/03/20 01:40:29 edsdead Exp $
Copyright (C) 2004, 2005, 2006, 2007 Rocky Bernstein <rocky@gnu.org> Copyright (C) 2004, 2005, 2006, 2007 Rocky Bernstein <rocky@gnu.org>
toc reading routine adapted from cuetools toc reading routine adapted from cuetools
@@ -25,7 +25,7 @@
(*.cue). (*.cue).
*/ */
static const char _rcsid[] = "$Id: cdrdao.c,v 1.25 2008/03/19 04:38:52 edsdead Exp $"; static const char _rcsid[] = "$Id: cdrdao.c,v 1.26 2008/03/20 01:40:29 edsdead Exp $";
#include "image.h" #include "image.h"
#include "cdio_assert.h" #include "cdio_assert.h"
@@ -1276,14 +1276,15 @@ cdio_open_cdrdao (const char *psz_cue_name)
_funcs.get_media_changed = get_media_changed_image; _funcs.get_media_changed = get_media_changed_image;
_funcs.get_mcn = _get_mcn_image; _funcs.get_mcn = _get_mcn_image;
_funcs.get_num_tracks = _get_num_tracks_image; _funcs.get_num_tracks = _get_num_tracks_image;
_funcs.get_track_channels = get_track_channels_image, _funcs.get_track_channels = get_track_channels_image;
_funcs.get_track_copy_permit = get_track_copy_permit_image, _funcs.get_track_copy_permit = get_track_copy_permit_image;
_funcs.get_track_format = _get_track_format_cdrdao; _funcs.get_track_format = _get_track_format_cdrdao;
_funcs.get_track_green = _get_track_green_cdrdao; _funcs.get_track_green = _get_track_green_cdrdao;
_funcs.get_track_lba = _get_lba_track_cdrdao; _funcs.get_track_lba = _get_lba_track_cdrdao;
_funcs.get_track_msf = _get_track_msf_image; _funcs.get_track_msf = _get_track_msf_image;
_funcs.get_track_preemphasis = get_track_preemphasis_image, _funcs.get_track_preemphasis = get_track_preemphasis_image;
_funcs.get_track_pregap_lba = get_track_pregap_lba_image; _funcs.get_track_pregap_lba = get_track_pregap_lba_image;
_funcs.get_track_isrc = get_track_isrc_image;
_funcs.lseek = _lseek_cdrdao; _funcs.lseek = _lseek_cdrdao;
_funcs.read = _read_cdrdao; _funcs.read = _read_cdrdao;
_funcs.read_audio_sectors = _read_audio_sectors_cdrdao; _funcs.read_audio_sectors = _read_audio_sectors_cdrdao;

View File

@@ -1,5 +1,5 @@
/* /*
$Id: nrg.c,v 1.25 2008/03/16 00:12:43 rocky Exp $ $Id: nrg.c,v 1.26 2008/03/20 01:40:29 edsdead Exp $
Copyright (C) 2003, 2004, 2005, 2006 Rocky Bernstein <rocky@panix.com> Copyright (C) 2003, 2004, 2005, 2006 Rocky Bernstein <rocky@panix.com>
Copyright (C) 2001, 2003 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001, 2003 Herbert Valerio Riedel <hvr@gnu.org>
@@ -46,7 +46,7 @@
#include "_cdio_stdio.h" #include "_cdio_stdio.h"
#include "nrg.h" #include "nrg.h"
static const char _rcsid[] = "$Id: nrg.c,v 1.25 2008/03/16 00:12:43 rocky Exp $"; static const char _rcsid[] = "$Id: nrg.c,v 1.26 2008/03/20 01:40:29 edsdead Exp $";
nero_id_t nero_id; nero_id_t nero_id;
nero_dtype_t nero_dtype; nero_dtype_t nero_dtype;
@@ -373,7 +373,8 @@ parse_nrg (_img_private_t *p_env, const char *psz_nrg_name,
{ {
_daox_t *_xentries = NULL; _daox_t *_xentries = NULL;
_daoi_t *_ientries = NULL; _daoi_t *_ientries = NULL;
_dao_common_t *_dao_common = (void *) chunk->data; _dao_array_common_t *_dao_array_common = NULL;
_dao_common_t *_dao_common = (void *) chunk->data;
int disc_mode = _dao_common->unknown[1]; int disc_mode = _dao_common->unknown[1];
track_format_t track_format; track_format_t track_format;
int i; int i;
@@ -385,10 +386,10 @@ parse_nrg (_img_private_t *p_env, const char *psz_nrg_name,
if (DAOX_ID == opcode) { if (DAOX_ID == opcode) {
_xentries = (void *) chunk->data; _xentries = (void *) chunk->data;
p_env->dtyp = _xentries->track_info[0].common.unknown[0]; p_env->dtyp = _xentries->track_info[0].common.unknown[2];
} else { } else {
_ientries = (void *) chunk->data; _ientries = (void *) chunk->data;
p_env->dtyp = _ientries->track_info[0].common.unknown[0]; p_env->dtyp = _ientries->track_info[0].common.unknown[2];
} }
p_env->is_dao = true; p_env->is_dao = true;
@@ -473,6 +474,19 @@ parse_nrg (_img_private_t *p_env, const char *psz_nrg_name,
} }
for (i=0; i<p_env->gen.i_tracks; i++) { for (i=0; i<p_env->gen.i_tracks; i++) {
if (DAOX_ID == opcode) {
_dao_array_common = &_xentries->track_info[i].common;
} else {
_dao_array_common = &_ientries->track_info[i].common;
}
p_env->tocent[i].isrc = calloc(1, CDIO_ISRC_SIZE+1);
memcpy(p_env->tocent[i].isrc, _dao_array_common->psz_isrc, CDIO_ISRC_SIZE);
p_env->tocent[i].isrc[CDIO_ISRC_SIZE] = '\0';
if (p_env->tocent[i].isrc[0]) {
cdio_info("nrg isrc has value \"%s\"", p_env->tocent[i].isrc);
}
if (!p_env->tocent[i].datasize) { if (!p_env->tocent[i].datasize) {
continue; continue;
} }
@@ -1263,6 +1277,7 @@ cdio_open_nrg (const char *psz_source)
_funcs.get_track_msf = _get_track_msf_image; _funcs.get_track_msf = _get_track_msf_image;
_funcs.get_track_preemphasis = get_track_preemphasis_generic; _funcs.get_track_preemphasis = get_track_preemphasis_generic;
_funcs.get_track_pregap_lba = get_track_pregap_lba_image; _funcs.get_track_pregap_lba = get_track_pregap_lba_image;
_funcs.get_track_isrc = get_track_isrc_image;
_funcs.lseek = _lseek_nrg; _funcs.lseek = _lseek_nrg;
_funcs.read = _read_nrg; _funcs.read = _read_nrg;
_funcs.read_audio_sectors = _read_audio_sectors_nrg; _funcs.read_audio_sectors = _read_audio_sectors_nrg;

View File

@@ -1,5 +1,5 @@
/* /*
$Id: nrg.h,v 1.4 2008/03/16 00:12:43 rocky Exp $ $Id: nrg.h,v 1.5 2008/03/20 01:40:29 edsdead Exp $
Copyright (C) 2004, 2006 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004, 2006 Rocky Bernstein <rocky@panix.com>
Copyright (C) 2001, 2003 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001, 2003 Herbert Valerio Riedel <hvr@gnu.org>
@@ -75,9 +75,8 @@ typedef struct {
*/ */
typedef struct { typedef struct {
uint8_t zero[10]; char psz_isrc[CDIO_ISRC_SIZE];
uint32_t sector_size GNUC_PACKED; uint8_t unknown[6];
uint8_t unknown[4];
} _dao_array_common_t; } _dao_array_common_t;
typedef struct { typedef struct {

View File

@@ -1,5 +1,5 @@
/* /*
$Id: image_common.c,v 1.13 2008/03/16 00:12:43 rocky Exp $ $Id: image_common.c,v 1.14 2008/03/20 01:40:29 edsdead Exp $
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
@@ -270,6 +270,26 @@ get_track_pregap_lba_image(const void *p_user_data, track_t i_track)
return pregap; return pregap;
} }
/*!
Return the International Standard Recording Code (ISRC) for track number
i_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 *
get_track_isrc_image(const void *p_user_data, track_t i_track)
{
const _img_private_t *p_env = p_user_data;
char *isrc = p_env->tocent[i_track-p_env->gen.i_first_track].isrc;
if (isrc && isrc[0]) {
return strdup(isrc);
} else {
return NULL;
}
}
/*! /*!
Read a data sector Read a data sector

View File

@@ -1,5 +1,5 @@
/* /*
$Id: image_common.h,v 1.11 2008/03/16 00:12:43 rocky Exp $ $Id: image_common.h,v 1.12 2008/03/20 01:40:29 edsdead Exp $
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
@@ -157,6 +157,15 @@ track_flag_t get_track_preemphasis_image(const void *p_user_data,
*/ */
lba_t get_track_pregap_lba_image(const void *p_user_data, track_t i_track); lba_t get_track_pregap_lba_image(const void *p_user_data, track_t i_track);
/*!
Return the International Standard Recording Code (ISRC) for track number
i_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 *get_track_isrc_image(const void *p_user_data, track_t i_track);
/*! /*!
Read a data sector Read a data sector

View File

@@ -82,6 +82,7 @@ cdio_get_track_last_lsn
cdio_get_track_lba cdio_get_track_lba
cdio_get_track_pregap_lba cdio_get_track_pregap_lba
cdio_get_track_pregap_lsn cdio_get_track_pregap_lsn
cdio_get_track_isrc
cdio_get_track_lsn cdio_get_track_lsn
cdio_get_track_msf cdio_get_track_msf
cdio_get_track_preemphasis cdio_get_track_preemphasis

View File

@@ -1,5 +1,5 @@
/* /*
$Id: track.c,v 1.5 2008/03/16 00:12:43 rocky Exp $ $Id: track.c,v 1.6 2008/03/20 01:40:29 edsdead Exp $
Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com> Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
@@ -246,6 +246,25 @@ 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.
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)
{
if (p_cdio == NULL) return NULL;
if (p_cdio->op.get_track_isrc) {
return p_cdio->op.get_track_isrc (p_cdio->env, i_track);
} else {
return NULL;
}
}
/*! /*!
Return the starting LBA for the pregap for track number Return the starting LBA for the pregap for track number
i_track in cdio. Track numbers start at 1. i_track in cdio. Track numbers start at 1.