Bug fix: CD SAO sessions with data tracks started by an audio pause
This commit is contained in:
parent
22eee798e1
commit
9e2e34fc9b
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2012.05.08.080449"
|
#define Cdrskin_timestamP "2012.05.30.202249"
|
||||||
|
@ -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
|
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.)
|
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,
|
DATA FORM is 00h for audio payload, 01h for audio pause (Lead-in and Lead-out),
|
||||||
41h for CD-TEXT in Lead-in.
|
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)
|
(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
|
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
|
Its content is
|
||||||
(CTL|ADR ,00h,00h, DATA FORM ,00h,00h,00h,00h)
|
(CTL|ADR ,00h,00h, DATA FORM ,00h,00h,00h,00h)
|
||||||
With the CTL|ADR for the first track: 41h for data, 01h for audio.
|
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
|
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.
|
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)
|
(mmc5r03c.pdf 6.33.3.6)
|
||||||
|
|
||||||
At the end of the session there is a lead-out entry
|
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.)
|
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.
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
@ -908,6 +908,12 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf)
|
|||||||
extern int burn_sg_log_scsi;
|
extern int burn_sg_log_scsi;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
fprintf(stderr, "libburn_DEBUG: buffer sectors= %d bytes= %d\n",
|
||||||
|
buf->sectors, buf->bytes);
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
c = &(d->casual_command);
|
c = &(d->casual_command);
|
||||||
|
|
||||||
#ifdef Libburn_log_in_and_out_streaM
|
#ifdef Libburn_log_in_and_out_streaM
|
||||||
|
@ -508,11 +508,13 @@ struct cue_sheet *burn_create_toc_entries(struct burn_write_opts *o,
|
|||||||
"Track mode has unusable value", 0, 0);
|
"Track mode has unusable value", 0, 0);
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
if (o->num_text_packs > 0) {
|
if (tar[0]->mode & BURN_AUDIO)
|
||||||
leadin_form = 0x41;
|
|
||||||
} else {
|
|
||||||
leadin_form = 0x01;
|
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,
|
/* Check for CD-TEXT in session. Not the final creation,
|
||||||
because the cue sheet content might be needed for CD-TEXT
|
because the cue sheet content might be needed for CD-TEXT
|
||||||
pack type 0x88 "TOC".
|
pack type 0x88 "TOC".
|
||||||
@ -522,7 +524,7 @@ struct cue_sheet *burn_create_toc_entries(struct burn_write_opts *o,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto failed;
|
goto failed;
|
||||||
else if (ret > 0)
|
else if (ret > 0)
|
||||||
leadin_form = 0x41;
|
leadin_form |= 0x40;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -803,7 +805,9 @@ XXX this is untested :)
|
|||||||
e[2].pmin = m;
|
e[2].pmin = m;
|
||||||
e[2].psec = s;
|
e[2].psec = s;
|
||||||
e[2].pframe = f;
|
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)
|
if (ret <= 0)
|
||||||
goto failed;
|
goto failed;
|
||||||
return sheet;
|
return sheet;
|
||||||
|
Loading…
Reference in New Issue
Block a user