Merge common cdtext code into image drivers.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: _cdio_generic.c,v 1.23 2004/08/10 11:58:15 rocky Exp $
|
$Id: _cdio_generic.c,v 1.24 2004/08/13 13:04:37 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char _rcsid[] = "$Id: _cdio_generic.c,v 1.23 2004/08/10 11:58:15 rocky Exp $";
|
static const char _rcsid[] = "$Id: _cdio_generic.c,v 1.24 2004/08/13 13:04:37 rocky Exp $";
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -65,17 +65,22 @@ cdio_generic_bogus_eject_media (void *user_data) {
|
|||||||
Release and free resources associated with cd.
|
Release and free resources associated with cd.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
cdio_generic_free (void *user_data)
|
cdio_generic_free (void *p_user_data)
|
||||||
{
|
{
|
||||||
generic_img_private_t *env = user_data;
|
generic_img_private_t *p_env = p_user_data;
|
||||||
|
track_t i_track;
|
||||||
|
|
||||||
if (NULL == env) return;
|
if (NULL == p_env) return;
|
||||||
free (env->source_name);
|
free (p_env->source_name);
|
||||||
|
|
||||||
if (env->fd >= 0)
|
for (i_track=0; i_track < p_env->i_tracks; i_track++) {
|
||||||
close (env->fd);
|
cdtext_destroy(&(p_env->cdtext_track[i_track]));
|
||||||
|
}
|
||||||
|
|
||||||
free (env);
|
if (p_env->fd >= 0)
|
||||||
|
close (p_env->fd);
|
||||||
|
|
||||||
|
free (p_env);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: bincue.c,v 1.39 2004/07/29 02:16:20 rocky Exp $
|
$Id: bincue.c,v 1.40 2004/08/13 13:04:37 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
(*.cue).
|
(*.cue).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char _rcsid[] = "$Id: bincue.c,v 1.39 2004/07/29 02:16:20 rocky Exp $";
|
static const char _rcsid[] = "$Id: bincue.c,v 1.40 2004/08/13 13:04:37 rocky Exp $";
|
||||||
|
|
||||||
#include "image.h"
|
#include "image.h"
|
||||||
#include "cdio_assert.h"
|
#include "cdio_assert.h"
|
||||||
@@ -81,7 +81,6 @@ typedef struct {
|
|||||||
exactly 13 bytes */
|
exactly 13 bytes */
|
||||||
track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track
|
track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track
|
||||||
add 1 for leadout. */
|
add 1 for leadout. */
|
||||||
cdtext_t cdtext; /* CD-TEXT */
|
|
||||||
discmode_t disc_mode;
|
discmode_t disc_mode;
|
||||||
} _img_private_t;
|
} _img_private_t;
|
||||||
|
|
||||||
@@ -115,7 +114,7 @@ _init_bincue (_img_private_t *env)
|
|||||||
env->psz_mcn = NULL;
|
env->psz_mcn = NULL;
|
||||||
env->disc_mode = CDIO_DISC_MODE_NO_INFO;
|
env->disc_mode = CDIO_DISC_MODE_NO_INFO;
|
||||||
|
|
||||||
cdtext_init (&(env->cdtext));
|
cdtext_init (&(env->gen.cdtext));
|
||||||
|
|
||||||
lead_lsn = _stat_size_bincue( (_img_private_t *) env);
|
lead_lsn = _stat_size_bincue( (_img_private_t *) env);
|
||||||
|
|
||||||
@@ -296,6 +295,8 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name)
|
|||||||
if (cd) {
|
if (cd) {
|
||||||
cd->gen.i_tracks=0;
|
cd->gen.i_tracks=0;
|
||||||
cd->gen.i_first_track=1;
|
cd->gen.i_first_track=1;
|
||||||
|
cd->gen.b_cdtext_init = true;
|
||||||
|
cd->gen.b_cdtext_error = false;
|
||||||
cd->psz_mcn=NULL;
|
cd->psz_mcn=NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,7 +384,7 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name)
|
|||||||
this_track->track_num = cd->gen.i_tracks;
|
this_track->track_num = cd->gen.i_tracks;
|
||||||
this_track->num_indices = 0;
|
this_track->num_indices = 0;
|
||||||
b_first_index_for_track = false;
|
b_first_index_for_track = false;
|
||||||
cdtext_init (&(cd->tocent[cd->gen.i_tracks].cdtext));
|
cdtext_init (&(cd->gen.cdtext_track[cd->gen.i_tracks]));
|
||||||
cd->gen.i_tracks++;
|
cd->gen.i_tracks++;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
@@ -745,12 +746,14 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name)
|
|||||||
(cdtext_key = cdtext_is_keyword (psz_keyword)) ) {
|
(cdtext_key = cdtext_is_keyword (psz_keyword)) ) {
|
||||||
if (-1 == i) {
|
if (-1 == i) {
|
||||||
if (cd) {
|
if (cd) {
|
||||||
cdtext_set (cdtext_key, strtok (NULL, "\"\t\n\r"), &(cd->cdtext));
|
cdtext_set (cdtext_key,
|
||||||
|
strtok (NULL, "\"\t\n\r"),
|
||||||
|
&(cd->gen.cdtext));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (cd) {
|
if (cd) {
|
||||||
cdtext_set (cdtext_key, strtok (NULL, "\"\t\n\r"),
|
cdtext_set (cdtext_key, strtok (NULL, "\"\t\n\r"),
|
||||||
&(cd->tocent[i].cdtext));
|
&(cd->gen.cdtext_track[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1137,7 +1140,7 @@ cdio_open_cue (const char *psz_cue_name)
|
|||||||
.eject_media = _eject_media_image,
|
.eject_media = _eject_media_image,
|
||||||
.free = _free_image,
|
.free = _free_image,
|
||||||
.get_arg = _get_arg_image,
|
.get_arg = _get_arg_image,
|
||||||
.get_cdtext = _get_cdtext_image,
|
.get_cdtext = get_cdtext_generic,
|
||||||
.get_devices = cdio_get_devices_bincue,
|
.get_devices = cdio_get_devices_bincue,
|
||||||
.get_default_device = cdio_get_default_device_bincue,
|
.get_default_device = cdio_get_default_device_bincue,
|
||||||
.get_discmode = _get_discmode_image,
|
.get_discmode = _get_discmode_image,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: cdrdao.c,v 1.24 2004/07/29 02:16:20 rocky Exp $
|
$Id: cdrdao.c,v 1.25 2004/08/13 13:04:37 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
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.24 2004/07/29 02:16:20 rocky Exp $";
|
static const char _rcsid[] = "$Id: cdrdao.c,v 1.25 2004/08/13 13:04:37 rocky Exp $";
|
||||||
|
|
||||||
#include "image.h"
|
#include "image.h"
|
||||||
#include "cdio_assert.h"
|
#include "cdio_assert.h"
|
||||||
@@ -81,7 +81,6 @@ typedef struct {
|
|||||||
exactly 13 bytes */
|
exactly 13 bytes */
|
||||||
track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track
|
track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track
|
||||||
add 1 for leadout. */
|
add 1 for leadout. */
|
||||||
cdtext_t cdtext; /* CD-TEXT */
|
|
||||||
discmode_t disc_mode;
|
discmode_t disc_mode;
|
||||||
} _img_private_t;
|
} _img_private_t;
|
||||||
|
|
||||||
@@ -110,7 +109,7 @@ _init_cdrdao (_img_private_t *env)
|
|||||||
env->psz_mcn = NULL;
|
env->psz_mcn = NULL;
|
||||||
env->disc_mode = CDIO_DISC_MODE_NO_INFO;
|
env->disc_mode = CDIO_DISC_MODE_NO_INFO;
|
||||||
|
|
||||||
cdtext_init (&(env->cdtext));
|
cdtext_init (&(env->gen.cdtext));
|
||||||
|
|
||||||
/* Read in TOC sheet. */
|
/* Read in TOC sheet. */
|
||||||
if ( !parse_tocfile(env, env->psz_cue_name) ) return false;
|
if ( !parse_tocfile(env, env->psz_cue_name) ) return false;
|
||||||
@@ -289,6 +288,11 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cd) {
|
||||||
|
cd->gen.b_cdtext_init = true;
|
||||||
|
cd->gen.b_cdtext_error = false;
|
||||||
|
}
|
||||||
|
|
||||||
while ((fgets(psz_line, MAXLINE, fp)) != NULL) {
|
while ((fgets(psz_line, MAXLINE, fp)) != NULL) {
|
||||||
|
|
||||||
i_line++;
|
i_line++;
|
||||||
@@ -368,7 +372,7 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name)
|
|||||||
/* TRACK <track-mode> [<sub-channel-mode>] */
|
/* TRACK <track-mode> [<sub-channel-mode>] */
|
||||||
} else if (0 == strcmp ("TRACK", psz_keyword)) {
|
} else if (0 == strcmp ("TRACK", psz_keyword)) {
|
||||||
i++;
|
i++;
|
||||||
if (NULL != cd) cdtext_init (&(cd->tocent[i].cdtext));
|
if (NULL != cd) cdtext_init (&(cd->gen.cdtext_track[i]));
|
||||||
if (NULL != (psz_field = strtok (NULL, " \t\n\r"))) {
|
if (NULL != (psz_field = strtok (NULL, " \t\n\r"))) {
|
||||||
if (0 == strcmp ("AUDIO", psz_field)) {
|
if (0 == strcmp ("AUDIO", psz_field)) {
|
||||||
if (NULL != cd) {
|
if (NULL != cd) {
|
||||||
@@ -786,12 +790,15 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name)
|
|||||||
(cdtext_key = cdtext_is_keyword (psz_keyword)) ) {
|
(cdtext_key = cdtext_is_keyword (psz_keyword)) ) {
|
||||||
if (-1 == i) {
|
if (-1 == i) {
|
||||||
if (NULL != cd) {
|
if (NULL != cd) {
|
||||||
cdtext_set (cdtext_key, strtok (NULL, "\"\t\n\r"), &(cd->cdtext));
|
cdtext_set (cdtext_key,
|
||||||
|
strtok (NULL, "\"\t\n\r"),
|
||||||
|
&(cd->gen.cdtext));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (NULL != cd) {
|
if (NULL != cd) {
|
||||||
cdtext_set (cdtext_key, strtok (NULL, "\"\t\n\r"),
|
cdtext_set (cdtext_key,
|
||||||
&(cd->tocent[i].cdtext));
|
strtok (NULL, "\"\t\n\r"),
|
||||||
|
&(cd->gen.cdtext_track[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1117,7 +1124,7 @@ cdio_open_cdrdao (const char *psz_cue_name)
|
|||||||
.eject_media = _eject_media_image,
|
.eject_media = _eject_media_image,
|
||||||
.free = _free_image,
|
.free = _free_image,
|
||||||
.get_arg = _get_arg_image,
|
.get_arg = _get_arg_image,
|
||||||
.get_cdtext = _get_cdtext_image,
|
.get_cdtext = get_cdtext_generic,
|
||||||
.get_devices = cdio_get_devices_cdrdao,
|
.get_devices = cdio_get_devices_cdrdao,
|
||||||
.get_default_device = cdio_get_default_device_cdrdao,
|
.get_default_device = cdio_get_default_device_cdrdao,
|
||||||
.get_discmode = _get_discmode_image,
|
.get_discmode = _get_discmode_image,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: nrg.c,v 1.36 2004/07/29 02:16:20 rocky Exp $
|
$Id: nrg.c,v 1.37 2004/08/13 13:04:37 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2003, 2004 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>
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
#include "_cdio_stdio.h"
|
#include "_cdio_stdio.h"
|
||||||
#include "nrg.h"
|
#include "nrg.h"
|
||||||
|
|
||||||
static const char _rcsid[] = "$Id: nrg.c,v 1.36 2004/07/29 02:16:20 rocky Exp $";
|
static const char _rcsid[] = "$Id: nrg.c,v 1.37 2004/08/13 13:04:37 rocky Exp $";
|
||||||
|
|
||||||
|
|
||||||
/* reader */
|
/* reader */
|
||||||
@@ -77,7 +77,6 @@ typedef struct {
|
|||||||
|
|
||||||
track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track
|
track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track
|
||||||
add 1 for leadout. */
|
add 1 for leadout. */
|
||||||
cdtext_t cdtext; /* CD-TEXT */
|
|
||||||
discmode_t disc_mode;
|
discmode_t disc_mode;
|
||||||
|
|
||||||
/* Nero Specific stuff. Note: for the image_free to work, this *must*
|
/* Nero Specific stuff. Note: for the image_free to work, this *must*
|
||||||
@@ -429,6 +428,7 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name)
|
|||||||
if (0 == form2) {
|
if (0 == form2) {
|
||||||
int i;
|
int i;
|
||||||
for (i=0; i<env->gen.i_tracks; i++) {
|
for (i=0; i<env->gen.i_tracks; i++) {
|
||||||
|
cdtext_init (&(env->gen.cdtext_track[i]));
|
||||||
env->tocent[i].track_format= track_format;
|
env->tocent[i].track_format= track_format;
|
||||||
env->tocent[i].datastart = 0;
|
env->tocent[i].datastart = 0;
|
||||||
env->tocent[i].track_green = false;
|
env->tocent[i].track_green = false;
|
||||||
@@ -444,6 +444,7 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name)
|
|||||||
} else if (2 == form2) {
|
} else if (2 == form2) {
|
||||||
int i;
|
int i;
|
||||||
for (i=0; i<env->gen.i_tracks; i++) {
|
for (i=0; i<env->gen.i_tracks; i++) {
|
||||||
|
cdtext_init (&(env->gen.cdtext_track[i]));
|
||||||
env->tocent[i].track_green = true;
|
env->tocent[i].track_green = true;
|
||||||
env->tocent[i].track_format= track_format;
|
env->tocent[i].track_format= track_format;
|
||||||
env->tocent[i].datasize = CDIO_CD_FRAMESIZE;
|
env->tocent[i].datasize = CDIO_CD_FRAMESIZE;
|
||||||
@@ -732,6 +733,8 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name)
|
|||||||
env->tocent[env->gen.i_tracks-1].sec_count =
|
env->tocent[env->gen.i_tracks-1].sec_count =
|
||||||
cdio_lsn_to_lba(env->size - env->tocent[env->gen.i_tracks-1].start_lba);
|
cdio_lsn_to_lba(env->size - env->tocent[env->gen.i_tracks-1].start_lba);
|
||||||
|
|
||||||
|
env->gen.b_cdtext_init = true;
|
||||||
|
env->gen.b_cdtext_error = false;
|
||||||
free(footer_buf);
|
free(footer_buf);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -756,7 +759,7 @@ _init_nrg (_img_private_t *env)
|
|||||||
env->psz_mcn = NULL;
|
env->psz_mcn = NULL;
|
||||||
env->disc_mode = CDIO_DISC_MODE_NO_INFO;
|
env->disc_mode = CDIO_DISC_MODE_NO_INFO;
|
||||||
|
|
||||||
cdtext_init (&(env->cdtext));
|
cdtext_init (&(env->gen.cdtext));
|
||||||
|
|
||||||
if ( !parse_nrg (env, env->gen.source_name) ) {
|
if ( !parse_nrg (env, env->gen.source_name) ) {
|
||||||
cdio_warn ("image file %s is not a Nero image",
|
cdio_warn ("image file %s is not a Nero image",
|
||||||
@@ -1185,7 +1188,7 @@ cdio_open_nrg (const char *psz_source)
|
|||||||
.eject_media = _eject_media_nrg,
|
.eject_media = _eject_media_nrg,
|
||||||
.free = _free_nrg,
|
.free = _free_nrg,
|
||||||
.get_arg = _get_arg_image,
|
.get_arg = _get_arg_image,
|
||||||
.get_cdtext = _get_cdtext_image,
|
.get_cdtext = get_cdtext_generic,
|
||||||
.get_devices = cdio_get_devices_nrg,
|
.get_devices = cdio_get_devices_nrg,
|
||||||
.get_default_device = cdio_get_default_device_nrg,
|
.get_default_device = cdio_get_default_device_nrg,
|
||||||
.get_discmode = _get_discmode_image,
|
.get_discmode = _get_discmode_image,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: image_common.h,v 1.15 2004/07/29 02:16:20 rocky Exp $
|
$Id: image_common.h,v 1.16 2004/08/13 13:04:37 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ _free_image (void *user_data)
|
|||||||
|
|
||||||
free_if_notnull(env->psz_mcn);
|
free_if_notnull(env->psz_mcn);
|
||||||
free_if_notnull(env->psz_cue_name);
|
free_if_notnull(env->psz_cue_name);
|
||||||
cdtext_destroy(&(env->cdtext));
|
cdtext_destroy(&(env->gen.cdtext));
|
||||||
cdio_generic_stdio_free(env);
|
cdio_generic_stdio_free(env);
|
||||||
free(env);
|
free(env);
|
||||||
}
|
}
|
||||||
@@ -89,36 +89,6 @@ _get_arg_image (void *user_data, const char key[])
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
Get cdtext information for a CdIo object.
|
|
||||||
|
|
||||||
@param obj the CD object that may contain CD-TEXT information.
|
|
||||||
@return the CD-TEXT object or NULL if obj is NULL
|
|
||||||
or CD-TEXT information does not exist.
|
|
||||||
|
|
||||||
If i_track is 0 or CDIO_CDROM_LEADOUT_TRACK the track returned
|
|
||||||
is the information assocated with the CD.
|
|
||||||
*/
|
|
||||||
static const cdtext_t *
|
|
||||||
_get_cdtext_image (void *user_data, track_t i_track)
|
|
||||||
{
|
|
||||||
const _img_private_t *env = user_data;
|
|
||||||
|
|
||||||
if ( NULL == env ||
|
|
||||||
( 0 != i_track
|
|
||||||
&& i_track >= env->gen.i_tracks + env->gen.i_first_track ) )
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (CDIO_CDROM_LEADOUT_TRACK == i_track)
|
|
||||||
i_track = 0;
|
|
||||||
|
|
||||||
if (0 == i_track)
|
|
||||||
return &(env->cdtext);
|
|
||||||
else
|
|
||||||
return &(env->tocent[i_track-env->gen.i_first_track].cdtext);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Get disc type associated with cd_obj.
|
Get disc type associated with cd_obj.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user