diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index dc99afb..eca568e 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2012.05.08.080449" +#define Cdrskin_timestamP "2012.05.30.202249" diff --git a/doc/cookbook.txt b/doc/cookbook.txt index b1be3f2..fbde8de 100644 --- a/doc/cookbook.txt +++ b/doc/cookbook.txt @@ -296,8 +296,9 @@ A pre-gap of 2 seconds is mandatory only for the first track. Pre-gap and post-gap may be needed with further tracks if they have neighbors with different DATA FORM values. (Such mixing is not yet supported by libburn.) -DATA FORM is 00h for audio payload, 01h for audio pause, 10h for data, -41h for CD-TEXT in Lead-in. +DATA FORM is 00h for audio payload, 01h for audio pause (Lead-in and Lead-out), +10h for data, 14h for data pause (Lead-in and Lead-out). +This shall be ored with 40h for CD-TEXT in Lead-in. (mmc5r03c.pdf 6.33.3.11 CD-DA Data Form, 6.33.3.12 CD-ROM mode 1 Form) SCMS value 80h in conjunction with bit5 of CTL is an indicator for exhausted @@ -318,7 +319,8 @@ The next entry (eventually being the first one) describes the Lead-in. Its content is (CTL|ADR ,00h,00h, DATA FORM ,00h,00h,00h,00h) With the CTL|ADR for the first track: 41h for data, 01h for audio. -DATA FORM is 41h if CD-TEXT shall be stored in Lean-in. Else it is 01h. +DATA FORM is pause (audio=01h, data=14h). Ored with 40h if CD-TEXT shall +be stored in Lean-in. The LBA for the first write is negative: -150. This corresponds to MSF address 00h:00h:00h. All addresses are to be given in MSF format. @@ -354,8 +356,9 @@ A track must at least contain 300 payload blocks: 4 seconds of audio or (mmc5r03c.pdf 6.33.3.6) At the end of the session there is a lead-out entry -(CTL|ADR,AAh,01h,01h,00h,MIN,SEC,FRAME) +(CTL|ADR,AAh,01h,DATA FORM,00h,MIN,SEC,FRAME) marking the end of the last track. (With libburn CTL is as of the last track.) +DATA FORM is 01h for audio, 14h for data. ------------------------------------------------------------------------------- diff --git a/libburn/mmc.c b/libburn/mmc.c index 4383778..ce7da1f 100644 --- a/libburn/mmc.c +++ b/libburn/mmc.c @@ -908,6 +908,12 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf) extern int burn_sg_log_scsi; #endif +/* +fprintf(stderr, "libburn_DEBUG: buffer sectors= %d bytes= %d\n", + buf->sectors, buf->bytes); +*/ + + c = &(d->casual_command); #ifdef Libburn_log_in_and_out_streaM diff --git a/libburn/write.c b/libburn/write.c index cbf0cb2..cb5bd3e 100644 --- a/libburn/write.c +++ b/libburn/write.c @@ -508,11 +508,13 @@ struct cue_sheet *burn_create_toc_entries(struct burn_write_opts *o, "Track mode has unusable value", 0, 0); goto failed; } - if (o->num_text_packs > 0) { - leadin_form = 0x41; - } else { + if (tar[0]->mode & BURN_AUDIO) leadin_form = 0x01; - + else + leadin_form = 0x14; + if (o->num_text_packs > 0) { + leadin_form |= 0x40; + } else { /* Check for CD-TEXT in session. Not the final creation, because the cue sheet content might be needed for CD-TEXT pack type 0x88 "TOC". @@ -522,7 +524,7 @@ struct cue_sheet *burn_create_toc_entries(struct burn_write_opts *o, if (ret < 0) goto failed; else if (ret > 0) - leadin_form = 0x41; + leadin_form |= 0x40; } } @@ -803,7 +805,9 @@ XXX this is untested :) e[2].pmin = m; e[2].psec = s; e[2].pframe = f; - ret = add_cue(sheet, ctladr | 1, 0xAA, 1, 1, 0, runtime); + + ret = add_cue(sheet, ctladr | 1, 0xAA, 1, leadin_form & 0x3f, + 0, runtime); if (ret <= 0) goto failed; return sheet;