From 08ca74724207d5dc3471d4a07d62c1a85784a546 Mon Sep 17 00:00:00 2001 From: Stefan Pöschel Date: Tue, 28 Apr 2015 23:24:43 +0200 Subject: Re-enable default conversion to EBU Latin based --- README.md | 12 +++++++----- src/mot-encoder.cpp | 36 +++++++++++++++++++++--------------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 7fbab37..ed604f2 100644 --- a/README.md +++ b/README.md @@ -211,17 +211,19 @@ can also read *mot-encoder* data. This is an ongoing development. Make sure you use the same pad length option for *mot-encoder* and the audio encoder. Only some pad lengths are supported, -please see *mot-encoder*'s help. Only pad lengths 34, 42 and 58 seem to be -working with some receivers, 23 and 26 appear to be broken. +please see *mot-encoder*'s help. Character Sets -------------- When *mot-encoder* is launched with the default character set encoding, it assumes that the DLS text in the file is encoded in UTF-8, and will convert it according to -the DAB standard. +the DAB standard to the EBU Latin based character set encoding. -If you set the character set encoding to anything else, *mot-encoder* will not perform -any conversion, and it is your responsibility to ensure the encoding is valid. +If you set the character set encoding to anything else (except: EBU Latin based, +which needs no conversion), *mot-encoder* will abort, as it does not support +any other conversion than from UTF-8 to EBU Latin based. +You can also use the -C option to transmit the untouched DLS text. In this case, +it is your responsibility to ensure the encoding is valid. Known Limitations ----------------- diff --git a/src/mot-encoder.cpp b/src/mot-encoder.cpp index 5763f61..afcbd86 100644 --- a/src/mot-encoder.cpp +++ b/src/mot-encoder.cpp @@ -236,7 +236,7 @@ void writeMotPAD(int output_fd, unsigned short int padlen); void create_dls_pads(const std::string& text, const int padlen, const uint8_t charset); -void writeDLS(int output_fd, const std::string& dls_file, int padlen, uint8_t charset, bool dls_to_ebu); +void writeDLS(int output_fd, const std::string& dls_file, int padlen, uint8_t charset, bool raw_dls); int get_xpadlengthmask(int padlen); @@ -301,8 +301,8 @@ void usage(char* name) " ID = 6: ISO/IEC 10646 using UCS-2 BE\n" " ID = 15: ISO/IEC 10646 using UTF-8\n" " Default: 15\n" - " -C, --dls-to-ebu Convert each DLS text to Complete EBU Latin based repertoire\n" - " character set encoding (currently only from UTF-8).\n" + " -C, --raw-dls Do not convert DLS texts to Complete EBU Latin based repertoire\n" + " character set encoding.\n" " -R, --raw-slides Do not process slides. Integrity checks and resizing\n" " slides is skipped. Use this if you know what you are doing !\n" " It is useful only when -d is used\n" @@ -323,7 +323,7 @@ int main(int argc, char *argv[]) int sleepdelay = SLEEPDELAY_DEFAULT; bool raw_slides = false; int charset = CHARSET_UTF8; - bool dls_to_ebu = false; + bool raw_dls = false; const char* dir = NULL; const char* output = "/tmp/pad.fifo"; @@ -331,7 +331,7 @@ int main(int argc, char *argv[]) const struct option longopts[] = { {"charset", required_argument, 0, 'c'}, - {"dls-to-ebu", no_argument, 0, 'C'}, + {"raw-dls", no_argument, 0, 'C'}, {"dir", required_argument, 0, 'd'}, {"erase", no_argument, 0, 'e'}, {"output", required_argument, 0, 'o'}, @@ -353,7 +353,7 @@ int main(int argc, char *argv[]) charset = atoi(optarg); break; case 'C': - dls_to_ebu = true; + raw_dls = true; break; case 'd': dir = optarg; @@ -451,12 +451,18 @@ int main(int argc, char *argv[]) user_charset, charset); } - if (dls_to_ebu) { - if (charset != CHARSET_UTF8) { + if (not raw_dls) { + switch (charset) { + case CHARSET_COMPLETE_EBU_LATIN: + // no conversion needed + break; + case CHARSET_UTF8: + fprintf(stderr, "mot-encoder converting DLS texts to Complete EBU Latin\n"); + break; + default: fprintf(stderr, "mot-encoder Error: DLS conversion to EBU is currently only supported for UTF-8 input!\n"); return 1; } - fprintf(stderr, "mot-encoder converting DLS texts to Complete EBU Latin\n"); } int output_fd = open(output, O_WRONLY); @@ -506,7 +512,7 @@ int main(int argc, char *argv[]) if (not dls_file.empty()) { // Maybe we have no slides, always update DLS - writeDLS(output_fd, dls_file, padlen, charset, dls_to_ebu); + writeDLS(output_fd, dls_file, padlen, charset, raw_dls); sleep(sleepdelay); } @@ -530,7 +536,7 @@ int main(int argc, char *argv[]) // Always retransmit DLS after each slide, we want it to be updated frequently if (not dls_file.empty()) { - writeDLS(output_fd, dls_file, padlen, charset, dls_to_ebu); + writeDLS(output_fd, dls_file, padlen, charset, raw_dls); } sleep(sleepdelay); @@ -544,7 +550,7 @@ int main(int argc, char *argv[]) } else if (not dls_file.empty()) { // only DLS // Always retransmit DLS, we want it to be updated frequently - writeDLS(output_fd, dls_file, padlen, charset, dls_to_ebu); + writeDLS(output_fd, dls_file, padlen, charset, raw_dls); sleep(sleepdelay); } @@ -940,7 +946,7 @@ void packMscDG(unsigned char* b, MSCDG* msc, unsigned short int* bsize) } -void writeDLS(int output_fd, const std::string& dls_file, int padlen, uint8_t charset, bool dls_to_ebu) +void writeDLS(int output_fd, const std::string& dls_file, int padlen, uint8_t charset, bool raw_dls) { std::ifstream dls_fstream(dls_file.c_str()); if (!dls_fstream.is_open()) { @@ -955,7 +961,7 @@ void writeDLS(int output_fd, const std::string& dls_file, int padlen, uint8_t ch // line endings while (std::getline(dls_fstream, line)) { if (not line.empty()) { - if (dls_to_ebu) { + if (not raw_dls && charset == CHARSET_UTF8) { dls_lines.push_back(charset_converter.convert(line)); } else { @@ -985,7 +991,7 @@ void writeDLS(int output_fd, const std::string& dls_file, int padlen, uint8_t ch if (dlstext.size() > MAXDLS) dlstext.resize(MAXDLS); - if (dls_to_ebu) + if (not raw_dls) charset = CHARSET_COMPLETE_EBU_LATIN; -- cgit v1.2.3