From 4c9783d7aed3302164adbd8cc3775c1a8761def9 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 1 Jan 2012 17:35:20 +0000 Subject: [PATCH] Implemented cue sheet file commands ARRANGER, COMPOSER, MESSAGE --- cdrskin/cdrskin.1 | 4 +++- cdrskin/cdrskin_timestamp.h | 2 +- doc/cdtext.txt | 14 +++++++++++--- libburn/structure.c | 17 ++++++++++++++++- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/cdrskin/cdrskin.1 b/cdrskin/cdrskin.1 index a53c058..dafe279 100644 --- a/cdrskin/cdrskin.1 +++ b/cdrskin/cdrskin.1 @@ -508,9 +508,11 @@ To enable CD-TEXT from the cue sheet file, cdrskin option -text has to be present. .br cdrskin currently supports TRACK datatypes AUDIO and MODE1/2048 which may -not be mixed. It ignores commands POSTGAP, PREGAP, and FLAGS. Only INDEX 01 +not be mixed. It ignores commands POSTGAP and PREGAP. Only INDEX 01 is interpreted yet. Data source may be of FILE type BINARY or MOTOROLA. .br +Non-CDRWIN commands ARRANGER, COMPOSER, MESSAGE are supported. +.br Cue sheet file commands CATALOG and ISRC may be overridden by option mcn= and by input_sheet_v07t= purpose specifiers "UPC / EAN" and "ISRC". This does not affect their appearance in CD-TEXT, but only on Q sub-channel. diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index f1e24b4..61b293d 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2012.01.01.125539" +#define Cdrskin_timestamP "2012.01.01.173446" diff --git a/doc/cdtext.txt b/doc/cdtext.txt index 8bf0249..b9c567f 100644 --- a/doc/cdtext.txt +++ b/doc/cdtext.txt @@ -7,6 +7,7 @@ by docs and results of cdtext.zip from http://www.sonydadc.com/file/ by reading http://digitalx.org/cue-sheet/syntax by reading source of libcdio from http://www.gnu.org/s/libcdio which quotes source of cdrecord from ftp://ftp.berlios.de/pub/cdrecord/alpha +by reading man cdrecord from ftp://ftp.berlios.de/pub/cdrecord/alpha Language codes were learned from http://tech.ebu.ch/docs/tech/tech3264.pdf Genre codes were learned from libcdio and confirmed by @@ -634,6 +635,9 @@ attributes (CATALOG, TITLE, PERFORMER, SONGWRITER, ISRC), track block types (TRACK) and track start addresses (INDEX 01). The rules for CDRWIN cue sheet files are described at http://digitalx.org/cue-sheet/syntax/ +There are three more text attributes mentioned in man cdrecord for defining +the corresponding CD-TEXT attributes: ARRANGER, COMPOSER, MESSAGE. + -------------------------------------- Example of a CDRWIN cue sheet file : @@ -668,9 +672,13 @@ TITLE "Joyful Nights" Several restrictions apply in the libburn call burn_session_by_cue_file(): -Commands POSTGAP, PREGAP are ignored. Only FILE types BINARY, MOTOROLA are -allowed. Only TRACK datatypes AUDIO, MODE1/2048 are allowed. They may not -be mixed in the same session. INDEX numbers 00, 02 to 99 are ignored. +Commands POSTGAP, PREGAP are ignored. +Only FILE types BINARY, MOTOROLA are allowed. +Only TRACK datatypes AUDIO, MODE1/2048 are allowed. They may not be mixed in +the same session. +INDEX numbers 00, 02 to 99 are ignored. + +On the other hand, ARRANGER, COMPOSER, MESSAGE are supported unconditionally. ------------------------------------------------------------------------------- diff --git a/libburn/structure.c b/libburn/structure.c index cb4a121..4277843 100644 --- a/libburn/structure.c +++ b/libburn/structure.c @@ -1288,7 +1288,12 @@ static int cue_interpret_line(struct burn_session *session, char *line, for (apt++; *apt == 32 || *apt == 9; apt++); } - if (strcmp(cmd, "CATALOG") == 0) { + if (strcmp(cmd, "ARRANGER") == 0) { + ret = cue_set_cdtext(session, crs->track, 0x84, apt, crs, 2); + if (ret <= 0) + goto ex; + + } else if (strcmp(cmd, "CATALOG") == 0) { for (cpt = apt; (cpt - apt) < 13 && *cpt == (*cpt & 0x7f); cpt++); if ((cpt - apt) < 13) { @@ -1322,6 +1327,11 @@ out_of_mem:; ret = -1; goto ex; } + } else if (strcmp(cmd, "COMPOSER") == 0) { + ret = cue_set_cdtext(session, crs->track, 0x83, apt, crs, 2); + if (ret <= 0) + goto ex; + } else if (strcmp(cmd, "FILE") == 0) { if (crs->file_source != NULL) { libdax_msgs_submit(libdax_messenger, -1, 0x00020192, @@ -1561,6 +1571,11 @@ overlapping_ba:; goto ex; } + } else if (strcmp(cmd, "MESSAGE") == 0) { + ret = cue_set_cdtext(session, crs->track, 0x85, apt, crs, 2); + if (ret <= 0) + goto ex; + } else if (strcmp(cmd, "PERFORMER") == 0) { ret = cue_set_cdtext(session, crs->track, 0x81, apt, crs, 2); if (ret <= 0)