Improve cdrdao to handle MSF-length.

Remove vcd_demo_toc.right since the cd-info output is now the same as
vcd_demo.right vcd_demo.toc adjusted accordingly.
This commit is contained in:
rocky
2005-01-22 23:57:10 +00:00
parent e0cce4558d
commit a352d2c8df
6 changed files with 80 additions and 125 deletions

View File

@@ -1,5 +1,5 @@
/* /*
$Id: image.h,v 1.5 2005/01/21 10:11:24 rocky Exp $ $Id: image.h,v 1.6 2005/01/22 23:57:10 rocky Exp $
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
@@ -48,7 +48,6 @@ typedef struct {
msf_t start_msf; msf_t start_msf;
lba_t start_lba; lba_t start_lba;
int start_index; int start_index;
lba_t length;
lba_t pregap; /**< pre-gap with zero audio data */ lba_t pregap; /**< pre-gap with zero audio data */
int sec_count; /**< Number of sectors in this track. Does not int sec_count; /**< Number of sectors in this track. Does not
include pregap */ include pregap */

View File

@@ -1,5 +1,5 @@
/* /*
$Id: cdrdao.c,v 1.8 2005/01/21 10:11:24 rocky Exp $ $Id: cdrdao.c,v 1.9 2005/01/22 23:57:10 rocky Exp $
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004, 2005 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.8 2005/01/21 10:11:24 rocky Exp $"; static const char _rcsid[] = "$Id: cdrdao.c,v 1.9 2005/01/22 23:57:10 rocky Exp $";
#include "image.h" #include "image.h"
#include "cdio_assert.h" #include "cdio_assert.h"
@@ -237,15 +237,20 @@ _stat_size_cdrdao (void *p_user_data)
_img_private_t *p_env = p_user_data; _img_private_t *p_env = p_user_data;
track_t i_leadout = p_env->gen.i_tracks; track_t i_leadout = p_env->gen.i_tracks;
long i_blocksize = p_env->tocent[i_leadout-1].blocksize; long i_blocksize = p_env->tocent[i_leadout-1].blocksize;
long i_size = cdio_stream_stat(p_env->tocent[i_leadout-1].data_source) long i_size;
- p_env->tocent[i_leadout-1].offset;
if (check_track_is_blocksize_multiple(p_env->tocent[i_leadout-1].filename, if (p_env->tocent[i_leadout-1].sec_count) {
i_leadout-1, i_size, i_blocksize)) { i_size = p_env->tocent[i_leadout-1].sec_count;
i_size /= i_blocksize;
} else { } else {
/* Round up */ i_size = cdio_stream_stat(p_env->tocent[i_leadout-1].data_source)
i_size = (i_size / i_blocksize) + 1; - p_env->tocent[i_leadout-1].offset;
if (check_track_is_blocksize_multiple(p_env->tocent[i_leadout-1].filename,
i_leadout-1, i_size, i_blocksize)) {
i_size /= i_blocksize;
} else {
/* Round up */
i_size = (i_size / i_blocksize) + 1;
}
} }
i_size += p_env->tocent[i_leadout-1].start_lba; i_size += p_env->tocent[i_leadout-1].start_lba;
@@ -270,7 +275,7 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name)
int i = -1; /* Position in tocent. Same as int i = -1; /* Position in tocent. Same as
cd->gen.i_tracks - 1 */ cd->gen.i_tracks - 1 */
char *psz_keyword, *psz_field; char *psz_keyword, *psz_field;
cdio_log_level_t log_level = (NULL == cd) ? CDIO_LOG_INFO : CDIO_LOG_WARN; cdio_log_level_t log_level = (cd) ? CDIO_LOG_WARN : CDIO_LOG_INFO ;
cdtext_field_t cdtext_key; cdtext_field_t cdtext_key;
/* The below declaration(s) may be unique to this image-parse routine. */ /* The below declaration(s) may be unique to this image-parse routine. */
@@ -291,17 +296,17 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name)
cd->gen.b_cdtext_error = false; cd->gen.b_cdtext_error = false;
} }
while ((fgets(psz_line, MAXLINE, fp)) != NULL) { while (fgets(psz_line, MAXLINE, fp)) {
i_line++; i_line++;
/* strip comment from line */ /* strip comment from line */
/* todo: // in quoted strings? */ /* todo: // in quoted strings? */
/* //comment */ /* //comment */
if (NULL != (psz_field = strstr (psz_line, "//"))) if ((psz_field = strstr (psz_line, "//")))
*psz_field = '\0'; *psz_field = '\0';
if (NULL != (psz_keyword = strtok (psz_line, " \t\n\r"))) { if ((psz_keyword = strtok (psz_line, " \t\n\r"))) {
/* CATALOG "ddddddddddddd" */ /* CATALOG "ddddddddddddd" */
if (0 == strcmp ("CATALOG", psz_keyword)) { if (0 == strcmp ("CATALOG", psz_keyword)) {
if (-1 == i) { if (-1 == i) {
@@ -648,37 +653,70 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name)
|| 0 == strcmp ("AUDIOFILE", psz_keyword)) { || 0 == strcmp ("AUDIOFILE", psz_keyword)) {
if (0 <= i) { if (0 <= i) {
if (NULL != (psz_field = strtok (NULL, "\"\t\n\r"))) { if (NULL != (psz_field = strtok (NULL, "\"\t\n\r"))) {
long i_size;
/* Handle "<filename>" */ /* Handle "<filename>" */
if (NULL != cd) { if (cd) {
cd->tocent[i].filename = strdup (psz_field); cd->tocent[i].filename = strdup (psz_field);
/* Todo: do something about reusing existing files. */ /* To do: do something about reusing existing files. */
if (!(cd->tocent[i].data_source = cdio_stdio_new (psz_field))) { if (!(cd->tocent[i].data_source = cdio_stdio_new (psz_field))) {
cdio_log (log_level, cdio_log (log_level,
"%s line %d: can't open file `%s' for reading", "%s line %d: can't open file `%s' for reading",
psz_cue_name, i_line, psz_field); psz_cue_name, i_line, psz_field);
goto err_exit; goto err_exit;
} }
i_size = cdio_stream_stat(cd->tocent[i].data_source);
} else {
CdioDataSource_t *s = cdio_stdio_new (psz_field);
if (!s) {
cdio_log (log_level,
"%s line %d: can't open file `%s' for reading",
psz_cue_name, i_line, psz_field);
goto err_exit;
}
i_size = cdio_stream_stat(s);
cdio_stdio_destroy (s);
} }
} }
if (NULL != (psz_field = strtok (NULL, " \t\n\r"))) { if (NULL != (psz_field = strtok (NULL, " \t\n\r"))) {
/* Handle <start-msf> */ /* Handle <start-msf> */
lba_t lba = cdio_lsn_to_lba(cdio_mmssff_to_lba (psz_field)); lba_t i_start_lba =
if (CDIO_INVALID_LBA == lba) { cdio_lsn_to_lba(cdio_mmssff_to_lba (psz_field));
if (CDIO_INVALID_LBA == i_start_lba) {
cdio_log(log_level, "%s line %d: invalid MSF string %s", cdio_log(log_level, "%s line %d: invalid MSF string %s",
psz_cue_name, i_line, psz_field); psz_cue_name, i_line, psz_field);
goto err_exit; goto err_exit;
} }
if (NULL != cd) { if (NULL != cd) {
cd->tocent[i].start_lba = lba; cd->tocent[i].start_lba = i_start_lba;
cdio_lba_to_msf(lba, &(cd->tocent[i].start_msf)); cdio_lba_to_msf(i_start_lba, &(cd->tocent[i].start_msf));
} }
} }
if (NULL != (psz_field = strtok (NULL, " \t\n\r"))) if (NULL != (psz_field = strtok (NULL, " \t\n\r"))) {
/* Handle <length-msf> */ /* Handle <length-msf> */
if (NULL != cd) lba_t lba = cdio_mmssff_to_lba (psz_field);
cd->tocent[i].length = cdio_mmssff_to_lba (psz_field); if (CDIO_INVALID_LBA == lba) {
cdio_log(log_level, "%s line %d: invalid MSF string %s",
psz_cue_name, i_line, psz_field);
goto err_exit;
}
if (cd) {
long i_size = cdio_stream_stat(cd->tocent[i].data_source);
if (lba) {
if ( (lba * cd->tocent[i].datasize) > i_size) {
cdio_log(log_level,
"%s line %d: MSF length %s exceeds end of file",
psz_cue_name, i_line, psz_field);
goto err_exit;
}
} else {
lba = i_size / cd->tocent[i].blocksize;
}
cd->tocent[i].sec_count = lba;
}
}
if (NULL != (psz_field = strtok (NULL, " \t\n\r"))) { if (NULL != (psz_field = strtok (NULL, " \t\n\r"))) {
goto format_error; goto format_error;
} }
@@ -691,15 +729,24 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name)
if (0 <= i) { if (0 <= i) {
if (NULL != (psz_field = strtok (NULL, "\"\t\n\r"))) { if (NULL != (psz_field = strtok (NULL, "\"\t\n\r"))) {
/* Handle <filename> */ /* Handle <filename> */
if (NULL != cd) { if (cd) {
cd->tocent[i].filename = strdup (psz_field); cd->tocent[i].filename = strdup (psz_field);
/* Todo: do something about reusing existing files. */ /* To do: do something about reusing existing files. */
if (!(cd->tocent[i].data_source = cdio_stdio_new (psz_field))) { if (!(cd->tocent[i].data_source = cdio_stdio_new (psz_field))) {
cdio_log (log_level, cdio_log (log_level,
"%s line %d: can't open file `%s' for reading", "%s line %d: can't open file `%s' for reading",
psz_cue_name, i_line, psz_field); psz_cue_name, i_line, psz_field);
goto err_exit; goto err_exit;
} }
} else {
CdioDataSource_t *s = cdio_stdio_new (psz_field);
if (!s) {
cdio_log (log_level,
"%s line %d: can't open file `%s' for reading",
psz_cue_name, i_line, psz_field);
goto err_exit;
}
cdio_stdio_destroy (s);
} }
} }

View File

@@ -1,4 +1,4 @@
# $Id: Makefile.am,v 1.43 2005/01/18 03:46:40 rocky Exp $ # $Id: Makefile.am,v 1.44 2005/01/22 23:57:10 rocky Exp $
# #
# Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com> # Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
# #
@@ -56,7 +56,7 @@ check_SCRIPTS = check_nrg.sh check_cue.sh check_cd_read.sh \
check_PROGRAMS = $(hack) check_PROGRAMS = $(hack)
check_DATA = vcd_demo.right vcd_demo_vcdinfo.right vcd_demo_vcdinfo_toc.right \ check_DATA = vcd_demo.right vcd_demo_vcdinfo.right \
videocd.right videocd.nrg \ videocd.right videocd.nrg \
cdda.right cdda.toc cdda.cue cdda.bin \ cdda.right cdda.toc cdda.cue cdda.bin \
isofs-m1.right isofs-m1.toc isofs-m1.cue isofs-m1.bin \ isofs-m1.right isofs-m1.toc isofs-m1.cue isofs-m1.bin \

View File

@@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
#$Id: check_cue.sh.in,v 1.23 2004/12/31 08:27:49 rocky Exp $ #$Id: check_cue.sh.in,v 1.24 2005/01/22 23:57:11 rocky Exp $
# Tests to see that BIN/CUE and cdrdao TOC file iamge reading is correct # Tests to see that BIN/CUE and cdrdao TOC file iamge reading is correct
# (via cd-info). # (via cd-info).
@@ -72,9 +72,9 @@ if test -f ${srcdir}/${fname}.bin ; then
check_result $RC "cd-info CUE test $testnum" "${CD_INFO} $opts" check_result $RC "cd-info CUE test $testnum" "${CD_INFO} $opts"
if test -z "@VCDINFO_LIBS@" ; then if test -z "@VCDINFO_LIBS@" ; then
right=${srcdir}/${fname}_toc.right right=${srcdir}/${fname}.right
else else
right=${srcdir}/${fname}_vcdinfo_toc.right right=${srcdir}/${fname}_vcdinfo.right
fi fi
opts="-q --no-device-info --no-disc-mode -t ${srcdir}/${fname}.toc --iso9660" opts="-q --no-device-info --no-disc-mode -t ${srcdir}/${fname}.toc --iso9660"
if test -f ${srcdir}/${fname}.toc ; then if test -f ${srcdir}/${fname}.toc ; then

View File

@@ -1,4 +1,4 @@
CD_DA CD_ROM_XA
TRACK MODE2_RAW TRACK MODE2_RAW
COPY COPY
@@ -11,5 +11,5 @@ START 00:02:00
TRACK MODE2_RAW TRACK MODE2_RAW
COPY COPY
FILE "vcd_demo.bin" 00:20:71 00:00:00 FILE "vcd_demo.bin" 00:20:71 00:05:14
START 00:02:00 START 00:02:00

View File

@@ -1,91 +0,0 @@
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
__________________________________
CD-ROM Track List (1 - 3)
#: MSF LSN Type Green? Copy? Channels Premphasis?
1: 00:02:00 000000 XA true yes
2: 00:17:57 001182 XA true yes
3: 00:24:71 001721 XA true yes
170: 00:53:06 003831 leadout (8 MB raw, 8 MB formatted)
Media Catalog Number (MCN): not available
__________________________________
CD Analysis Report
CD-ROM with CD-RTOS and ISO 9660 filesystem
ISO 9660: 1032 blocks, label `V0469 '
Application:
Preparer : LKVCDIMAGER 5.0.7.10(WIN32)
Publisher : LAURENS KOEHOORN
System : CD-RTOS CD-BRIDGE
Volume : V0469
Volume Set :
ISO9660 filesystem
/:
d d---1xrxrxr 0 0 [fn 00] [LSN 18] 2048 Jul 14 1978 00:00 .
d d---1xrxrxr 0 0 [fn 00] [LSN 18] 2048 Jul 14 1978 00:00 ..
d d---1xrxrxr 0 0 [fn 00] [LSN 19] 2048 Jul 14 1978 00:00 ext
d d---1xrxrxr 0 0 [fn 00] [LSN 20] 2048 Jul 14 1978 00:00 mpegav
d d---1xrxrxr 0 0 [fn 00] [LSN 21] 2048 Jul 14 1978 00:00 segment
d d---1xrxrxr 0 0 [fn 00] [LSN 22] 2048 Jul 14 1978 00:00 sources
d d---1xrxrxr 0 0 [fn 00] [LSN 25] 2048 Jul 14 1978 00:00 vcd
/EXT/:
d d---1xrxrxr 0 0 [fn 00] [LSN 19] 2048 Jul 14 1978 00:00 .
d d---1xrxrxr 0 0 [fn 00] [LSN 18] 2048 Jul 14 1978 00:00 ..
- ----1xrxrxr 0 0 [fn 01] [LSN 375] 65536 Jul 14 1978 00:00 lot_x.vcd
- ----1xrxrxr 0 0 [fn 01] [LSN 407] 144 Jul 14 1978 00:00 psd_x.vcd
/MPEGAV/:
d d---1xrxrxr 0 0 [fn 00] [LSN 20] 2048 Jul 14 1978 00:00 .
d d---1xrxrxr 0 0 [fn 00] [LSN 18] 2048 Jul 14 1978 00:00 ..
- ---2-xrxrxr 0 0 [fn 01] [LSN 1182] 904036 ( 796672) Jul 14 1978 00:00 avseq01.dat
- ---2-xrxrxr 0 0 [fn 02] [LSN 1721] 904036 ( 796672) Jul 14 1978 00:00 avseq02.dat
/SEGMENT/:
d d---1xrxrxr 0 0 [fn 00] [LSN 21] 2048 Jul 14 1978 00:00 .
d d---1xrxrxr 0 0 [fn 00] [LSN 18] 2048 Jul 14 1978 00:00 ..
- ---2-xrxrxr 0 0 [fn 01] [LSN 225] 220780 ( 194560) Jul 14 1978 00:00 item0001.dat
/Sources/:
d d---1xrxrxr 0 0 [fn 00] [LSN 22] 2048 Jul 14 1978 00:00 .
d d---1xrxrxr 0 0 [fn 00] [LSN 18] 2048 Jul 14 1978 00:00 ..
d d---1xrxrxr 0 0 [fn 00] [LSN 23] 2048 Jul 14 1978 00:00 html
- ----1xrxrxr 0 0 [fn 01] [LSN 434] 842 Dec 11 2002 10:33 index.htm
- ----1xrxrxr 0 0 [fn 01] [LSN 435] 1216557 Jan 07 2003 18:01 menu.ppm
- ----1xrxrxr 0 0 [fn 01] [LSN 1030] 2793 Jan 07 2003 18:08 source.xml
/Sources/HTML/:
d d---1xrxrxr 0 0 [fn 00] [LSN 23] 2048 Jul 14 1978 00:00 .
d d---1xrxrxr 0 0 [fn 00] [LSN 22] 2048 Jul 14 1978 00:00 ..
- ----1xrxrxr 0 0 [fn 01] [LSN 425] 1067 Jan 07 2003 17:51 0.xml
- ----1xrxrxr 0 0 [fn 01] [LSN 426] 1067 Jan 07 2003 17:51 1.xml
d d---1xrxrxr 0 0 [fn 00] [LSN 24] 2048 Jul 14 1978 00:00 img
- ----1xrxrxr 0 0 [fn 01] [LSN 427] 1327 Jan 07 2003 17:51 movies.css
- ----1xrxrxr 0 0 [fn 01] [LSN 428] 12024 Jan 07 2003 17:51 toc.xsl
/Sources/HTML/img/:
d d---1xrxrxr 0 0 [fn 00] [LSN 24] 2048 Jul 14 1978 00:00 .
d d---1xrxrxr 0 0 [fn 00] [LSN 23] 2048 Jul 14 1978 00:00 ..
- ----1xrxrxr 0 0 [fn 01] [LSN 408] 1999 Nov 13 2002 07:27 al.gif
- ----1xrxrxr 0 0 [fn 01] [LSN 409] 7626 Jan 07 2003 17:42 loeki_groep_01.gif
- ----1xrxrxr 0 0 [fn 01] [LSN 413] 9986 Jan 07 2003 17:42 loeki_groep_02.gif
- ----1xrxrxr 0 0 [fn 01] [LSN 418] 207 Nov 14 2002 19:33 a_left.gif
- ----1xrxrxr 0 0 [fn 01] [LSN 419] 207 Nov 14 2002 19:33 a_right.gif
- ----1xrxrxr 0 0 [fn 01] [LSN 420] 441 Nov 13 2002 10:54 animatie.gif
- ----1xrxrxr 0 0 [fn 01] [LSN 421] 250 Nov 14 2002 11:44 face_up2.gif
- ----1xrxrxr 0 0 [fn 01] [LSN 422] 259 Nov 13 2002 11:09 familie.gif
- ----1xrxrxr 0 0 [fn 01] [LSN 423] 1010 Nov 14 2002 11:52 goldstar2.gif
- ----1xrxrxr 0 0 [fn 01] [LSN 424] 1783 Nov 13 2002 07:15 vcd.gif
/VCD/:
d d---1xrxrxr 0 0 [fn 00] [LSN 25] 2048 Jul 14 1978 00:00 .
d d---1xrxrxr 0 0 [fn 00] [LSN 18] 2048 Jul 14 1978 00:00 ..
- ----1xrxrxr 0 0 [fn 00] [LSN 151] 2048 Jul 14 1978 00:00 entries.vcd
- ----1xrxrxr 0 0 [fn 00] [LSN 150] 2048 Jul 14 1978 00:00 info.vcd
- ----1xrxrxr 0 0 [fn 00] [LSN 152] 65536 Jul 14 1978 00:00 lot.vcd
- ----1xrxrxr 0 0 [fn 00] [LSN 184] 72 Jul 14 1978 00:00 psd.vcd
XA sectors Video CD
session #2 starts at track 2, LSN: 1182, ISO 9660 blocks: 1032
ISO 9660: 1032 blocks, label `V0469 '