diff options
author | Matthias P. Braendli (think) <matthias@mpb.li> | 2013-11-08 14:43:19 +0100 |
---|---|---|
committer | Matthias P. Braendli (think) <matthias@mpb.li> | 2013-11-08 14:43:19 +0100 |
commit | c5306f81a9d3b87df7e16c852f2505ac913193ca (patch) | |
tree | 40716835305aa871cae5a5b3c805f0c673f47108 /src/dabOutput/dabOutputFifo.cpp | |
parent | 573c7b63092618ecae86847d9d0a143801db0780 (diff) | |
download | dabmux-c5306f81a9d3b87df7e16c852f2505ac913193ca.tar.gz dabmux-c5306f81a9d3b87df7e16c852f2505ac913193ca.tar.bz2 dabmux-c5306f81a9d3b87df7e16c852f2505ac913193ca.zip |
make dabOutput more object-oriented
Diffstat (limited to 'src/dabOutput/dabOutputFifo.cpp')
-rw-r--r-- | src/dabOutput/dabOutputFifo.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/dabOutput/dabOutputFifo.cpp b/src/dabOutput/dabOutputFifo.cpp new file mode 100644 index 0000000..49fc331 --- /dev/null +++ b/src/dabOutput/dabOutputFifo.cpp @@ -0,0 +1,48 @@ +#include <cstdio> +#include <cstring> +#include <fcntl.h> +#include <limits.h> +#include "dabOutput.h" + + +int DabOutputFifo::Write(void* buffer, int size) +{ + uint8_t padding[6144]; + + switch (this->type_) { + case ETI_FILE_TYPE_FRAMED: + if (this->nbFrames_ == 0) { + uint32_t nbFrames = (uint32_t)-1; + // Writing nb frames + if (write(this->file_, &nbFrames, 4) == -1) + goto FIFO_WRITE_ERROR; + } + case ETI_FILE_TYPE_STREAMED: + // Writting frame length + if (write(this->file_, &size, 2) == -1) + goto FIFO_WRITE_ERROR; + // Appending data + if (write(this->file_, buffer, size) == -1) + goto FIFO_WRITE_ERROR; + break; + case ETI_FILE_TYPE_RAW: + // Appending data + if (write(this->file_, buffer, size) == -1) + goto FIFO_WRITE_ERROR; + // Appending padding + memset(padding, 0x55, 6144 - size); + if (write(this->file_, padding, 6144 - size) == -1) + goto FIFO_WRITE_ERROR; + break; + default: + etiLog.printHeader(TcpLog::ERR, "File type is not supported.\n"); + return -1; + } + + return size; + +FIFO_WRITE_ERROR: + perror("Error while writting to file"); + return -1; +} + |