aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Pöschel <github@basicmaster.de>2015-04-18 19:29:47 +0200
committerStefan Pöschel <github@basicmaster.de>2015-04-18 19:29:47 +0200
commit5c6b9fb58d66b01c660798d33c3e7704dada49e6 (patch)
tree99a64ae35d1a6e7928bd21cd156a02ad13ce7dbf
parent299beb774b0294bb1444d9436f893173aa075751 (diff)
downloadODR-AudioEnc-5c6b9fb58d66b01c660798d33c3e7704dada49e6.tar.gz
ODR-AudioEnc-5c6b9fb58d66b01c660798d33c3e7704dada49e6.tar.bz2
ODR-AudioEnc-5c6b9fb58d66b01c660798d33c3e7704dada49e6.zip
MOT encoder protocol change: transmit used PAD bytes
-rw-r--r--src/dabplus-enc.cpp8
-rw-r--r--src/mot-encoder.cpp13
2 files changed, 14 insertions, 7 deletions
diff --git a/src/dabplus-enc.cpp b/src/dabplus-enc.cpp
index 7ab23d1..a91e4c9 100644
--- a/src/dabplus-enc.cpp
+++ b/src/dabplus-enc.cpp
@@ -624,7 +624,7 @@ int main(int argc, char *argv[])
uint8_t outbuf[24*120];
- unsigned char pad_buf[padlen];
+ unsigned char pad_buf[padlen + 1];
if(outbuf_size % 5 != 0) {
fprintf(stderr, "(outbuf_size mod 5) = %d\n", outbuf_size % 5);
@@ -683,7 +683,7 @@ int main(int argc, char *argv[])
// --------------- Read data from the PAD fifo
int ret;
if (padlen != 0) {
- ret = read(pad_fd, pad_buf, padlen);
+ ret = read(pad_fd, pad_buf, padlen + 1);
}
else {
ret = 0;
@@ -802,11 +802,11 @@ int main(int argc, char *argv[])
// -------------- AAC Encoding
- int calculated_padlen = ret > 0 ? padlen : 0;
+ int calculated_padlen = ret > 0 ? pad_buf[padlen] : 0;
in_ptr[0] = input_buf;
- in_ptr[1] = pad_buf;
+ in_ptr[1] = pad_buf + (padlen - calculated_padlen); // offset due to unused PAD bytes
in_size[0] = read;
in_size[1] = calculated_padlen;
in_elem_size[0] = BYTES_PER_SAMPLE;
diff --git a/src/mot-encoder.cpp b/src/mot-encoder.cpp
index f84326e..8422514 100644
--- a/src/mot-encoder.cpp
+++ b/src/mot-encoder.cpp
@@ -241,6 +241,7 @@ static int cindex_body = 0;
// DLS related
+#define FPAD_LEN 2
#define DLS_SEG_LEN_PREFIX 2
#define DLS_SEG_LEN_CHAR_MAX 16
#define DLS_SEG_LEN_CRC 2
@@ -1009,7 +1010,7 @@ void create_dls_pads(const char* text, const int padlen, const uint8_t charset)
// distribute the segment over one or more PADs
for (int seg_off = 0; seg_off < seg_len;) {
- dls_pads.push_back(pad_t(padlen));
+ dls_pads.push_back(pad_t(padlen + 1));
pad_t &pad = dls_pads.back();
int pad_off = padlen - 1;
@@ -1048,6 +1049,9 @@ void create_dls_pads(const char* text, const int padlen, const uint8_t charset)
// NULL PADDING
std::fill_n(pad.begin(), pad_off + 1, 0x00);
+ // set used pad len
+ pad[padlen] = FPAD_LEN + used_xpad_len;
+
#if DEBUG
fprintf(stderr, "DLS data group:");
for (int i = 0; i < padlen; i++)
@@ -1071,7 +1075,7 @@ void writeMotPAD(int output_fd,
unsigned short int padlen)
{
- unsigned char pad[padlen];
+ unsigned char pad[padlen + 1];
int xpadlengthmask, i, j, k;
unsigned short int crc;
@@ -1145,7 +1149,10 @@ void writeMotPAD(int output_fd,
pad[j] = 0x00;
}
- size_t dummy = write(output_fd, pad, padlen);
+ // set used pad len
+ pad[padlen] = FPAD_LEN + used_xpad_len;
+
+ size_t dummy = write(output_fd, pad, padlen + 1);
#if DEBUG
fprintf(stderr,"MSC Data Group - Segment %d: ",i);
for (j=0;j<padlen;j++)