Interpreting .cue file command POSTGAP

This commit is contained in:
Thomas Schmitt 2012-01-12 12:03:47 +00:00
parent 8403a0b629
commit 2e58768b54
5 changed files with 61 additions and 46 deletions

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "Jan 11, 2012" .TH CDRSKIN 1 "Jan 12, 2012"
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@ -508,7 +508,7 @@ To enable CD-TEXT from the cue sheet file, cdrskin option -text has to be
present. present.
.br .br
cdrskin currently supports TRACK datatypes AUDIO and MODE1/2048 which may cdrskin currently supports TRACK datatypes AUDIO and MODE1/2048 which may
not be mixed. It ignores command POSTGAP. not be mixed.
Data source may be of FILE type BINARY, MOTOROLA, or WAVE. Data source may be of FILE type BINARY, MOTOROLA, or WAVE.
.br .br
Non-CDRWIN commands ARRANGER, COMPOSER, MESSAGE are supported. Non-CDRWIN commands ARRANGER, COMPOSER, MESSAGE are supported.

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2012.01.12.084429" #define Cdrskin_timestamP "2012.01.12.120316"

View File

@ -112,7 +112,7 @@ The two binary bytes form a big-endian index to the following list.
Sony documents the cleartext part as "Genre information that would supplement Sony documents the cleartext part as "Genre information that would supplement
the Genre Code, such as 'USA Rock music in the 60s'". Always ASCII encoded. the Genre Code, such as 'USA Rock music in the 60s'". Always ASCII encoded.
Pack type 0x88 records information from the CDs Table of Content, as of Pack type 0x88 records information from the CD's Table of Content, as of
READ PMA/TOC/ATIP Format 0010b (mmc5r03c.pdf, table 490 TOC Track Descriptor READ PMA/TOC/ATIP Format 0010b (mmc5r03c.pdf, table 490 TOC Track Descriptor
Format, Q Sub-channel). Format, Q Sub-channel).
See below, Format of CD-TEXT packs, for more details about the content of See below, Format of CD-TEXT packs, for more details about the content of
@ -682,9 +682,8 @@ TITLE "Joyful Nights"
-------------------------------------- --------------------------------------
Several restrictions apply in the libburn call burn_session_by_cue_file(): Some restrictions apply in the libburn call burn_session_by_cue_file():
Command POSTGAP gets ignored.
Only FILE types BINARY, MOTOROLA, WAVE are allowed. Only FILE types BINARY, MOTOROLA, WAVE are allowed.
Only TRACK datatypes AUDIO, MODE1/2048 are allowed. They may not be mixed in Only TRACK datatypes AUDIO, MODE1/2048 are allowed. They may not be mixed in
the same session. the same session.

View File

@ -1867,17 +1867,18 @@ int burn_disc_remove_session(struct burn_disc *d, struct burn_session *s);
CD-TEXT according to the content of the file. CD-TEXT according to the content of the file.
For a description of CDRWIN file format see For a description of CDRWIN file format see
http://digitalx.org/cue-sheet/syntax/ http://digitalx.org/cue-sheet/syntax/
>>> fully supported commands: CATALOG CDTEXTFILE FLAGS INDEX ISRC PERFORMER REM Fully supported commands are:
>>> SONGWRITER TITLE CATALOG , CDTEXTFILE , FLAGS , INDEX , ISRC , PERFORMER ,
>>> supported commands introduced by cdrecord: ARRANGER COMPOSER MESSAGE POSTGAP , PREGAP , REM , SONGWRITER , TITLE
>>> partly supported commands: FILE TRACK Further supported commands introduced by cdrecord (usage like PERFORMER):
>>> supported FILE types: BINARY MOTOROLA WAVE ARRANGER , COMPOSER , MESSAGE
>>> supported TRACK datatypes: AUDIO MODE1/2048 Partly supported commands are:
>>> ignored commands: POSTGAP PREGAP FILE which supports only types BINARY , MOTOROLA , WAVE
>>> not allowed: mixing of AUDIO and MODE1/2048 TRACK which supports only datatypes AUDIO , MODE1/2048
>>> not allowed: unsupported FILE types Unsupported types of FILE or TRACK lead to failure of the call.
>>> not allowed: unsupported TRACK datatypes libburn does not yet support mixing of AUDIO and MODE1/2048. So this call
>>> will fail if such a mix is found.
Empty lines and lines which start by '#' are ignored.
@param session Session where to attach tracks. It must not yet have @param session Session where to attach tracks. It must not yet have
tracks or else this call will fail. tracks or else this call will fail.
@param path Filesystem address of the CDRWIN cue sheet file. @param path Filesystem address of the CDRWIN cue sheet file.

View File

@ -1500,6 +1500,28 @@ ex:;
return ret; return ret;
} }
static int cue_check_for_track(struct burn_cue_file_cursor *crs, char *cmd,
int flag)
{
int ret;
char *msg = NULL;
if (crs->track == NULL) {
BURN_ALLOC_MEM(msg, char, 4096);
sprintf(msg, "In cue sheet file: %s found before TRACK",
cmd);
libdax_msgs_submit(libdax_messenger, -1, 0x00020192,
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH,
msg, 0, 0);
ret = 0; goto ex;
}
ret = 1;
ex:;
BURN_FREE_MEM(msg);
return ret;
}
static int cue_interpret_line(struct burn_session *session, char *line, static int cue_interpret_line(struct burn_session *session, char *line,
struct burn_cue_file_cursor *crs, int flag) struct burn_cue_file_cursor *crs, int flag)
{ {
@ -1634,13 +1656,9 @@ not_usable_file:;
goto ex; goto ex;
} else if (strcmp(cmd, "FLAGS") == 0) { } else if (strcmp(cmd, "FLAGS") == 0) {
if (crs->track == NULL) { ret = cue_check_for_track(crs, cmd, 0);
libdax_msgs_submit(libdax_messenger, -1, 0x00020192, if (ret <= 0)
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH, goto ex;
"In cue sheet file: FLAGS found before TRACK",
0, 0);
ret = 0; goto ex;
}
while (*apt) { while (*apt) {
if (strncmp(apt, "DCP", 3) == 0) { if (strncmp(apt, "DCP", 3) == 0) {
crs->track_mode |= BURN_COPY; crs->track_mode |= BURN_COPY;
@ -1679,14 +1697,9 @@ bad_flags:;
burn_track_define_data(crs->track, 0, 0, 1, crs->track_mode); burn_track_define_data(crs->track, 0, 0, 1, crs->track_mode);
} else if (strcmp(cmd, "INDEX") == 0) { } else if (strcmp(cmd, "INDEX") == 0) {
if (crs->track == NULL) { ret = cue_check_for_track(crs, cmd, 0);
libdax_msgs_submit(libdax_messenger, -1, 0x00020192, if (ret <= 0)
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH, goto ex;
"In cue sheet file: INDEX found before TRACK",
0, 0);
ret = 0; goto ex;
}
ret = cue_read_number(&apt, &index_no, 0); ret = cue_read_number(&apt, &index_no, 0);
if (ret <= 0) if (ret <= 0)
goto ex; goto ex;
@ -1776,6 +1789,9 @@ overlapping_ba:;
crs->track_has_source = 1; crs->track_has_source = 1;
} else if (strcmp(cmd, "ISRC") == 0) { } else if (strcmp(cmd, "ISRC") == 0) {
ret = cue_check_for_track(crs, cmd, 0);
if (ret <= 0)
goto ex;
ret = cue_set_cdtext(session, crs->track, 0x8e, apt, crs, ret = cue_set_cdtext(session, crs->track, 0x8e, apt, crs,
1 | 2); 1 | 2);
if (ret <= 0) if (ret <= 0)
@ -1797,22 +1813,21 @@ overlapping_ba:;
goto ex; goto ex;
} else if (strcmp(cmd, "POSTGAP") == 0) { } else if (strcmp(cmd, "POSTGAP") == 0) {
ret = cue_check_for_track(crs, cmd, 0);
/* >>> ??? implement ? */; if (ret <= 0)
goto ex;
libdax_msgs_submit(libdax_messenger, -1, 0x00020195, ret = cue_read_timepoint_lba(apt, "post-gap duration",
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_HIGH, &file_ba, 0);
"In cue sheet file: POSTGAP command not supported", if (ret <= 0)
0, 0); goto ex;
ret = burn_track_set_postgap_size(crs->track, file_ba, 0);
if (ret <= 0)
goto ex;
} else if (strcmp(cmd, "PREGAP") == 0) { } else if (strcmp(cmd, "PREGAP") == 0) {
if (crs->track == NULL) { ret = cue_check_for_track(crs, cmd, 0);
libdax_msgs_submit(libdax_messenger, -1, 0x00020192, if (ret <= 0)
LIBDAX_MSGS_SEV_FAILURE, LIBDAX_MSGS_PRIO_HIGH, goto ex;
"In cue sheet file: INDEX found before TRACK",
0, 0);
ret = 0; goto ex;
}
ret = cue_read_timepoint_lba(apt, "pre-gap duration", ret = cue_read_timepoint_lba(apt, "pre-gap duration",
&file_ba, 0); &file_ba, 0);
if (ret <= 0) if (ret <= 0)