New API call burn_track_set_pregap_size()

This commit is contained in:
Thomas Schmitt 2012-01-10 12:20:23 +00:00
parent a2493b97e4
commit d4c4430a40
6 changed files with 61 additions and 25 deletions

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2012.01.08.191443"
#define Cdrskin_timestamP "2012.01.10.122000"

View File

@ -1935,7 +1935,7 @@ int burn_session_remove_track(struct burn_session *s, struct burn_track *t);
/* ts B20107 */
/** Set the number which shall be written as CD track number with the first
track of the session. The following tracks will then get written with
consequtive CD track numbers. The resulting number of the last track
consecutive CD track numbers. The resulting number of the last track
must not exceed 99. The lowest possible start number is 1, which is also
the default. This setting applies only to CD SAO writing.
@param session The session to be manipulated
@ -2270,16 +2270,6 @@ void burn_track_define_data(struct burn_track *t, int offset, int tail,
int pad, int mode);
/* ts A61024 */
/** Define whether a track shall swap bytes of its input stream.
@param t The track to change
@param swap_source_bytes 0=do not swap, 1=swap byte pairs
@return 1=success , 0=unacceptable value
@since 0.2.6
*/
int burn_track_set_byte_swap(struct burn_track *t, int swap_source_bytes);
/* ts B11206 */
/** Attach text or binary data as CD-TEXT attributes to a track.
The payload will be used to generate CD-TEXT packs by
@ -2427,12 +2417,41 @@ int burn_track_set_index(struct burn_track *t, int index_number,
after the end of their predecessor.
@param t The track to be manipulated
@param flag Bitfield for control purposes. Unused yet. Submit 0.
@return i > 0 indicates success, <= 0 means failure
@return > 0 indicates success, <= 0 means failure
@since 1.2.0
*/
int burn_track_clear_indice(struct burn_track *t, int flag);
/* ts B20110 */
/** Define whether a pre-gap shall be written before the track and how many
sectors this pregap shall have. A pre-gap is written in the range of track
index 0 and contains zeros resp. silence. No bytes from the track source
will be read for writing the pre-gap.
This setting affects only CD SAO write runs.
Track 1 always has a pre-gap of at least 150 sectors. Further pre-gaps
are not mandatory for MMC compliance as long as track modes are not mixed.
Mode mixing is currently not supported by libburn.
@param t The track to change
@param size Number of sectors in the pre-gap.
0 disables pre-gap, except for the first track.
@param flag Bitfield for control purposes. Unused yet. Submit 0.
@return > 0 indicates success, <= 0 means failure
@since 1.2.0
*/
int burn_track_set_pregap_size(struct burn_track *t, int size, int flag);
/* ts A61024 */
/** Define whether a track shall swap bytes of its input stream.
@param t The track to change
@param swap_source_bytes 0=do not swap, 1=swap byte pairs
@return 1=success , 0=unacceptable value
@since 0.2.6
*/
int burn_track_set_byte_swap(struct burn_track *t, int swap_source_bytes);
/** Hide the first track in the "pre gap" of the disc
@param s session to change
@param onoff 1 to enable hiding, 0 to disable

View File

@ -159,6 +159,7 @@ burn_track_set_default_size;
burn_track_set_index;
burn_track_set_isrc;
burn_track_set_isrc_string;
burn_track_set_pregap_size;
burn_track_set_size;
burn_track_set_source;
burn_version;

View File

@ -203,6 +203,7 @@ struct burn_track *burn_track_create(void)
t->postgap = 0;
t->pregap1 = 0;
t->pregap2 = 0;
t->pregap2_size = 150;
/* ts A61024 */
t->swap_source_bytes = 0;
@ -475,6 +476,13 @@ int burn_track_clear_indice(struct burn_track *t, int flag)
return 1;
}
/* ts B20110 API */
int burn_track_set_pregap_size(struct burn_track *t, int size, int flag)
{
t->pregap2 = (size > 0);
t->pregap2_size = size;
return 1;
}
int burn_track_get_sectors(struct burn_track *t)
{

View File

@ -90,6 +90,11 @@ struct burn_track
int pregap1;
/** The track contains interval two of a pregap */
int pregap2;
/* ts B20110 */
/** The number of sectors in pre-gap 2, if .pregap2 is set */
int pregap2_size;
/** The track contains a postgap */
int postgap;
struct isrc isrc;

View File

@ -301,6 +301,7 @@ int burn_write_close_session(struct burn_write_opts *o)
This is useful only when changes about CD SAO get tested.
# define Libburn_write_with_function_print_cuE yes
*/
#define Libburn_write_with_function_print_cuE
#ifdef Libburn_write_with_function_print_cuE
@ -333,14 +334,20 @@ static void print_cue(struct cue_sheet *sheet)
unit[7] == 0 ? ' ' : cue_printify(unit[7]));
} else if ((unit[0] & 0xf) == 3) {
printf(
" %1X %1X | %02X | | | | | %c%c%c%c%c%c\n",
" %1X %1X | %2d | | | | | %c%c%c%c%c%c\n",
(unit[0] & 0xf0) >> 4, unit[0] & 0xf,
unit[1], cue_printify(unit[2]),
cue_printify(unit[3]), cue_printify(unit[4]),
cue_printify(unit[5]), cue_printify(unit[6]),
cue_printify(unit[7]));
} else if (unit[1] > 99) {
printf(" %1X %1X |0x%02X| %02X | %02X | %02X |",
(unit[0] & 0xf0) >> 4, unit[0] & 0xf,
unit[1], unit[2], unit[3], unit[4]);
printf(" %02d:%02d:%02d |\n",
unit[5], unit[6], unit[7]);
} else {
printf(" %1X %1X | %02X | %02X | %02X | %02X |",
printf(" %1X %1X | %2d | %02X | %02X | %02X |",
(unit[0] & 0xf0) >> 4, unit[0] & 0xf,
unit[1], unit[2], unit[3], unit[4]);
printf(" %02d:%02d:%02d |\n",
@ -585,14 +592,10 @@ struct cue_sheet *burn_create_toc_entries(struct burn_write_opts *o,
e[2].control = e[1].control;
e[2].adr = 1;
/* ts A70121 : The pause before the first track is not really Pre-gap.
To count it as part 2 of a Pre-gap is a dirty hack. It also seems
to have caused confusion in dealing with part 1 of an eventual
real Pre-gap. mmc5r03c.pdf 6.33.3.2, 6.33.3.18 .
ts B20103 : It is not really Pre-gap with audio tracks.
*/
tar[0]->pregap2 = 1;
pregap = 150;
if (tar[0]->pregap2_size < 150)
tar[0]->pregap2_size = 150;
pregap = tar[0]->pregap2_size;
pform = form;
for (i = 0; i < ntr; i++) {
@ -1057,7 +1060,7 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s,
if (t->pregap1)
d->rlba += 75;
if (t->pregap2)
d->rlba += 150;
d->rlba += t->pregap2_size;
if (t->pregap1) {
@ -1087,7 +1090,7 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s,
{ ret = 0; goto ex; }
}
if (t->pregap2)
for (i = 0; i < 150; i++)
for (i = 0; i < t->pregap2_size; i++)
if (!sector_pregap(o, t->entry->point,
t->entry->control, t->mode))
{ ret = 0; goto ex; }
@ -2890,7 +2893,7 @@ return crap. so we send the command, then ignore the result.
#ifdef Libburn_write_with_function_print_cuE
print_cue(sheet);
/* goto fail_wo_sync; */
goto fail_wo_sync;
#endif /* Libburn_write_with_function_print_cuE */
ret = 1;