aboutsummaryrefslogtreecommitdiffstats
path: root/src/inputs/Input.h
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2013-12-17 15:04:51 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2013-12-24 18:09:26 +0100
commitbf16c5a22de3d2bab7db290e8cd8b031df7b7eb8 (patch)
treec849daa6635668ebedd44a264e343e2aefe7dba7 /src/inputs/Input.h
parentd7f33c17ab74729708837628de938745aea0d933 (diff)
downloaddabmux-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.h121
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
+