diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2013-12-17 15:04:51 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2013-12-24 18:09:26 +0100 |
commit | bf16c5a22de3d2bab7db290e8cd8b031df7b7eb8 (patch) | |
tree | c849daa6635668ebedd44a264e343e2aefe7dba7 /src/inputs/Input.h | |
parent | d7f33c17ab74729708837628de938745aea0d933 (diff) | |
download | dabmux-bf16c5a22de3d2bab7db290e8cd8b031df7b7eb8.tar.gz dabmux-bf16c5a22de3d2bab7db290e8cd8b031df7b7eb8.tar.bz2 dabmux-bf16c5a22de3d2bab7db290e8cd8b031df7b7eb8.zip |
new object oriented inputs: Test, File
Diffstat (limited to 'src/inputs/Input.h')
-rw-r--r-- | src/inputs/Input.h | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/inputs/Input.h b/src/inputs/Input.h new file mode 100644 index 0000000..943b498 --- /dev/null +++ b/src/inputs/Input.h @@ -0,0 +1,121 @@ +/* + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the Queen in + Right of Canada (Communications Research Center Canada) + + Copyright (C) 2013 Matthias P. Braendli + http://mpb.li + + */ +/* + This file is part of CRC-DabMux. + + CRC-DabMux is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + CRC-DabMux is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CRC-DabMux. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _INPUT_H_ +#define _INPUT_H_ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <vector> +#include <string> +#include <stdint.h> + +class InputBase { + + public: + virtual int Open(); + virtual int Lock(); // TODO get rid of lock/unlock + virtual int Unlock(); + + // ReadFrame must return exactly the right number of bytes + // for the format, which means it must fill the buffer to + // <size> bytes. + virtual int ReadFrame(void* buffer, int size); + + // TODO: ehm, where do we need this ? + virtual int SetBitrate(int bitrate); + + virtual int Close(); + virtual int Clean(); // TODO destructor + virtual int Rewind(); +}; + +/********************************************/ +/** TEST INPUT ***********************/ +/********************************************/ + +// Implement mostly everything, but don't do anything +class InputTest : InputBase { + public: + InputTest() : counter(0) {} + int Open(); + int Lock(); + int Unlock(); + int ReadFrame(void* buffer, int size); + int SetBitrate(int bitrate); + int Close(); + int Clean(); + int Rewind(); + + private: + unsigned long counter; +}; + + +/********************************************/ +/** FILE INPUTS ***********************/ +/********************************************/ + +#ifdef HAVE_INPUT_FILE + +// The InputFile is not used directly but defines some behaviour +// for Fifo, and also for different file types. +class InputFile : InputBase { + public: + InputFile(std::string fileName) : filename(fileName) {} + int Open(); + int Close(); + int Rewind(); + protected: + std::string filename; + int file; // the file descriptor +}; + +#ifdef HAVE_FORMAT_MPEG +class InputMpegFile : InputFile { + public: + InputMpegFile(std::string fileName) : filename(fileName) {} + int ReadFrame(void* buffer, int size); + private: + bool parity; +}; +#endif // HAVE_FORMAT_MPEG + +#ifdef HAVE_FORMAT_DABPLUS +class InputDabplusFile : InputFile { + public: + InputMpegFile(std::string fileName) : filename(fileName) {} + int ReadFrame(void* buffer, int size); + private: + int Read(void* buffer, int size); + std::vector<uint8_t> buffer; + size_t bufferIndex; +}; +#endif + +#endif + |