diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | src/DabMultiplexer.cpp | 1 | ||||
-rw-r--r-- | src/DabMux.cpp | 80 | ||||
-rw-r--r-- | src/DabMux.h | 45 | ||||
-rw-r--r-- | src/Eti.cpp | 17 | ||||
-rw-r--r-- | src/Eti.h | 18 | ||||
-rw-r--r-- | src/Interleaver.cpp | 5 | ||||
-rw-r--r-- | src/ManagementServer.cpp | 11 | ||||
-rw-r--r-- | src/ManagementServer.h | 2 | ||||
-rw-r--r-- | src/MuxElements.cpp | 9 | ||||
-rw-r--r-- | src/MuxElements.h | 8 | ||||
-rw-r--r-- | src/PcDebug.h | 62 | ||||
-rw-r--r-- | src/fig/FIG0_6.h | 2 | ||||
-rw-r--r-- | src/fig/FIG1.h | 13 | ||||
-rw-r--r-- | src/fig/FIG2.h | 14 | ||||
-rw-r--r-- | src/input/File.cpp | 18 | ||||
-rw-r--r-- | src/mpeg.h | 15 |
17 files changed, 54 insertions, 267 deletions
diff --git a/Makefile.am b/Makefile.am index be2eed3..455a3a0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -60,7 +60,6 @@ odr_dabmux_LDADD =$(ZMQ_LIBS) $(BOOST_LDFLAGS) \ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) $(BOOST_SYSTEM_LIB) odr_dabmux_SOURCES =src/DabMux.cpp \ - src/DabMux.h \ src/DabMultiplexer.cpp \ src/DabMultiplexer.h \ src/input/inputs.h \ diff --git a/src/DabMultiplexer.cpp b/src/DabMultiplexer.cpp index bea82c2..c665f2c 100644 --- a/src/DabMultiplexer.cpp +++ b/src/DabMultiplexer.cpp @@ -31,6 +31,7 @@ #include "ManagementServer.h" #include "crc.h" #include "utils.h" +#include "Eti.h" using namespace std; diff --git a/src/DabMux.cpp b/src/DabMux.cpp index 4b9352f..0066629 100644 --- a/src/DabMux.cpp +++ b/src/DabMux.cpp @@ -29,83 +29,27 @@ # include "config.h" #endif -#include <stdlib.h> #include <memory> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/info_parser.hpp> #include <boost/property_tree/json_parser.hpp> +#include <ctime> +#include <cstdlib> #include <cstdio> -#include <iostream> -#include <fstream> -#include <iomanip> #include <cstring> +#include <cmath> #include <string> -#include <errno.h> -#include <sys/types.h> -#include <sys/stat.h> #include <fcntl.h> #include <signal.h> -// for basename -#include <libgen.h> - -#include <iterator> #include <vector> -#include <list> #include <set> -#include <map> -#include <functional> -#include <algorithm> - -#ifdef _WIN32 -# include <time.h> -# include <process.h> -# include <io.h> -# include <conio.h> -# include <winsock2.h> // For types... -typedef u_char uint8_t; -typedef WORD uint16_t; -typedef DWORD32 uint32_t; - -# ifndef __MINGW32__ -# include "xgetopt.h" -# endif -# define read _read -# define snprintf _snprintf -# define sleep(a) Sleep((a) * 1000) -#else -# include <netinet/in.h> -# include <unistd.h> -# include <sys/time.h> -# include <sys/wait.h> -# include <sys/socket.h> -# include <sys/ioctl.h> -# include <sys/times.h> -# include <sys/resource.h> - -#endif - -#include <time.h> - -#ifdef _WIN32 -# pragma warning ( disable : 4103 ) -# include "Eti.h" -# pragma warning ( default : 4103 ) -#else -# include "Eti.h" -#endif -#include "input/Prbs.h" -#include "input/Zmq.h" +#include "DabMultiplexer.h" #include "dabOutput/dabOutput.h" -#include "crc.h" -#include "Socket.h" -#include "PcDebug.h" -#include "DabMux.h" #include "MuxElements.h" #include "utils.h" -#include "ConfigParser.h" #include "ManagementServer.h" #include "Log.h" #include "RemoteControl.h" @@ -120,14 +64,10 @@ volatile sig_atomic_t running = 1; */ void signalHandler(int signum) { -#ifdef _WIN32 - fprintf(stderr, "\npid: %i\n", _getpid()); -#else fprintf(stderr, "\npid: %i, ppid: %i\n", getpid(), getppid()); -#endif + #define SIG_MSG "Signal received: " switch (signum) { -#ifndef _WIN32 case SIGHUP: fprintf(stderr, SIG_MSG "SIGHUP\n"); break; @@ -138,7 +78,6 @@ void signalHandler(int signum) fprintf(stderr, SIG_MSG "SIGPIPE\n"); return; break; -#endif case SIGINT: fprintf(stderr, SIG_MSG "SIGINT\n"); break; @@ -150,9 +89,7 @@ void signalHandler(int signum) default: fprintf(stderr, SIG_MSG "number %i\n", signum); } -#ifndef _WIN32 killpg(0, SIGPIPE); -#endif running = 0; } @@ -185,12 +122,6 @@ int main(int argc, char *argv[]) } } -#ifdef _WIN32 - if (SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST) == 0) { - etiLog.log(warn, "Can't increase priority: %s\n", - strerror(errno)); - } -#else // Use the lowest real-time priority for this thread, and switch to real-time scheduling const int policy = SCHED_RR; sched_param sp; @@ -199,7 +130,6 @@ int main(int argc, char *argv[]) if (thread_prio_ret != 0) { etiLog.level(error) << "Could not set real-time priority for thread:" << thread_prio_ret; } -#endif int returnCode = 0; ptree pt; diff --git a/src/DabMux.h b/src/DabMux.h deleted file mode 100644 index 80b4881..0000000 --- a/src/DabMux.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, - 2011 Her Majesty the Queen in Right of Canada (Communications - Research Center Canada) - - Copyright (C) 2014 - Matthias P. Braendli, matthias.braendli@mpb.li - - This file declares several structures used in the multiplexer, - and defines default values for some parameters. - */ -/* - This file is part of ODR-DabMux. - - ODR-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. - - ODR-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 ODR-DabMux. If not, see <http://www.gnu.org/licenses/>. -*/ -#pragma once - -#include <stdint.h> -#include <string> -#include <vector> -#include "DabMultiplexer.h" -#include "RemoteControl.h" -#include "dabOutput/dabOutput.h" -#include "input/inputs.h" -#include "Eti.h" -#include "MuxElements.h" - -#ifdef _WIN32 -# include <time.h> -#else -# include <sys/time.h> -#endif - diff --git a/src/Eti.cpp b/src/Eti.cpp index e1b51fb..2f26f2d 100644 --- a/src/Eti.cpp +++ b/src/Eti.cpp @@ -22,19 +22,10 @@ along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>. */ -#ifdef _WIN32 -# pragma warning ( disable : 4103 ) -# include "Eti.h" -# pragma warning ( default : 4103 ) -#else -# include "Eti.h" -# include <time.h> -#endif - +#include "Eti.h" //definitions des structures des champs du ETI(NI, G703) - unsigned short eti_FC::getFrameLength() { return (unsigned short)((FL_high << 8) | FL_low); @@ -80,7 +71,7 @@ void eti_MNSC_TIME_1::setFromTime(struct tm *time_tm) { second_unit = time_tm->tm_sec % 10; second_tens = time_tm->tm_sec / 10; - + minute_unit = time_tm->tm_min % 10; minute_tens = time_tm->tm_min / 10; } @@ -89,7 +80,7 @@ void eti_MNSC_TIME_2::setFromTime(struct tm *time_tm) { hour_unit = time_tm->tm_hour % 10; hour_tens = time_tm->tm_hour / 10; - + day_unit = time_tm->tm_mday % 10; day_tens = time_tm->tm_mday / 10; } @@ -98,7 +89,7 @@ void eti_MNSC_TIME_3::setFromTime(struct tm *time_tm) { month_unit = (time_tm->tm_mon + 1) % 10; month_tens = (time_tm->tm_mon + 1) / 10; - + // They didn't see the y2k bug coming, did they ? year_unit = (time_tm->tm_year - 100) % 10; year_tens = (time_tm->tm_year - 100) / 10; @@ -29,24 +29,12 @@ # include <config.h> #endif -#ifdef _WIN32 -# include <winsock2.h> // For types... -typedef WORD uint16_t; -typedef DWORD32 uint32_t; - -# define PACKED -# pragma pack(push, 1) -#else -# include <stdint.h> -# include <time.h> - -# define PACKED __attribute__ ((packed)) -#endif - +#include <cstdint> +#include <ctime> +#define PACKED __attribute__ ((packed)) //definitions des structures des champs du ETI(NI, G703) - struct eti_SYNC { uint32_t ERR:8; uint32_t FSYNC:24; diff --git a/src/Interleaver.cpp b/src/Interleaver.cpp index cf0d235..1786d08 100644 --- a/src/Interleaver.cpp +++ b/src/Interleaver.cpp @@ -23,11 +23,6 @@ #include <string.h> -#ifdef _WIN32 -# define bzero(a, b) memset((a), 0, (b)) -#endif // _WIN32 - - Interleaver::Interleaver(unsigned short I, unsigned short M, bool reverse) : I(I), M(M), diff --git a/src/ManagementServer.cpp b/src/ManagementServer.cpp index dff093a..2c25a7a 100644 --- a/src/ManagementServer.cpp +++ b/src/ManagementServer.cpp @@ -95,11 +95,6 @@ INPUT_COUNTER_RESET_TIME = std::chrono::minutes(30); static constexpr int INPUT_UNSTABLE_THRESHOLD = 3; -/* For how long the input buffers must be empty before we move an input to the - * NoData state. */ -static constexpr auto -INPUT_NODATA_TIMEOUT = std::chrono::seconds(30); - /* Keep 30s of min/max buffer fill information so that we can catch meaningful * values even if we have a slow poller */ static constexpr auto @@ -643,11 +638,7 @@ input_state_t InputStat::determineState() // STATE CALCULATION - /* If the buffer has been empty for more than - * INPUT_NODATA_TIMEOUT, we go to the NoData state. - * - * Consider an empty deque to be NoData too. - */ + /* Consider an empty deque to be NoData. */ if (std::all_of( m_buffer_fill_stats.begin(), m_buffer_fill_stats.end(), [](const fill_stat_t& fs) { return fs.bufsize == 0; }) ) { diff --git a/src/ManagementServer.h b/src/ManagementServer.h index c7a4222..d328f88 100644 --- a/src/ManagementServer.h +++ b/src/ManagementServer.h @@ -50,7 +50,6 @@ # include "config.h" #endif -#include "Socket.h" #include "zmq.hpp" #include <string> #include <map> @@ -65,7 +64,6 @@ #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/json_parser.hpp> -#include <cmath> /*** State handing ***/ /* An input can be in one of the following three states: diff --git a/src/MuxElements.cpp b/src/MuxElements.cpp index d17b283..1f02a6d 100644 --- a/src/MuxElements.cpp +++ b/src/MuxElements.cpp @@ -743,7 +743,14 @@ const json::map_t dabEnsemble::get_all_values() const return map; } -bool dabEnsemble::validate_linkage_sets() +bool dabEnsemble::validate_linkage_sets() const +{ + return validate_linkage_sets(services, linkagesets); +} + +bool dabEnsemble::validate_linkage_sets( + const vec_sp_service& services, + std::vector<std::shared_ptr<LinkageSet> > linkagesets) { for (const auto& ls : linkagesets) { const std::string keyserviceuid = ls->keyservice; diff --git a/src/MuxElements.h b/src/MuxElements.h index d118df9..0266671 100644 --- a/src/MuxElements.h +++ b/src/MuxElements.h @@ -33,16 +33,13 @@ #include <memory> #include <mutex> #include <string> -#include <functional> #include <exception> -#include <algorithm> #include <chrono> #include <optional> #include <stdint.h> #include "dabOutput/dabOutput.h" #include "input/inputs.h" #include "RemoteControl.h" -#include "Eti.h" // Protection levels and bitrates for UEP. const unsigned char ProtectionLevelTable[64] = { @@ -315,7 +312,10 @@ class dabEnsemble : public RemoteControllable { virtual const json::map_t get_all_values() const; /* Check if the Linkage Sets are valid */ - bool validate_linkage_sets(void); + bool validate_linkage_sets() const; + static bool validate_linkage_sets( + const vec_sp_service& services, + std::vector<std::shared_ptr<LinkageSet> > linkagesets); /* all fields are public, since this was a struct before */ uint16_t id = 0; diff --git a/src/PcDebug.h b/src/PcDebug.h index d0b2b2c..68fceb8 100644 --- a/src/PcDebug.h +++ b/src/PcDebug.h @@ -19,8 +19,7 @@ along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef PC_DEBUG_ -#define PC_DEBUG_ +#pragma once #ifdef HAVE_CONFIG_H # include "config.h" @@ -31,49 +30,28 @@ #include <stdio.h> -#define LOG stderr +#define LOG stderr -#if !defined(_WIN32) || defined(__MINGW32__) -# ifndef PDEBUG -# ifdef DEBUG -# define PDEBUG(fmt, args...) fprintf (LOG, fmt , ## args) -# else -# define PDEBUG(fmt, args...) -# endif -# endif +#ifndef PDEBUG # ifdef DEBUG -# define PDEBUG_VERBOSE(level, verbosity, fmt, args...) if (level <= verbosity) { fprintf(LOG, fmt, ## args); fflush(LOG); } -# define PDEBUG0_VERBOSE(level, verbosity, txt) if (level <= verbosity) { fprintf(LOG, txt); fflush(LOG); } -# define PDEBUG1_VERBOSE(level, verbosity, txt, arg0) if (level <= verbosity) { fprintf(LOG, txt, arg0); fflush(LOG); } -# define PDEBUG2_VERBOSE(level, verbosity, txt, arg0, arg1) if (level <= verbosity) { fprintf(LOG, txt, arg0, arg1); fflush(LOG); } -# define PDEBUG3_VERBOSE(level, verbosity, txt, arg0, arg1, arg2) if (level <= verbosity) { fprintf(LOG, txt, arg0, arg1, arg2); fflush(LOG); } -# define PDEBUG4_VERBOSE(level, verbosity, txt, arg0, arg1, arg2, arg3) if (level <= verbosity) { fprintf(LOG, txt, arg0, arg1, arg2, arg3); fflush(LOG); } -# else -# define PDEBUG_VERBOSE(level, verbosity, fmt, args...) -# define PDEBUG0_VERBOSE(level, verbosity, txt) -# define PDEBUG1_VERBOSE(level, verbosity, txt, arg0) -# define PDEBUG2_VERBOSE(level, verbosity, txt, arg0, arg1) -# define PDEBUG3_VERBOSE(level, verbosity, txt, arg0, arg1, arg2) -# define PDEBUG4_VERBOSE(level, verbosity, txt, arg0, arg1, arg2, arg3) -# endif // DEBUG -#else // _WIN32 -# ifdef _DEBUG -# define PDEBUG -# define PDEBUG_VERBOSE -# define PDEBUG0_VERBOSE(level, verbosity, txt) if (level <= verbosity) { fprintf(LOG, txt); fflush(LOG); } -# define PDEBUG1_VERBOSE(level, verbosity, txt, arg0) if (level <= verbosity) { fprintf(LOG, txt, arg0); fflush(LOG); } -# define PDEBUG2_VERBOSE(level, verbosity, txt, arg0, arg1) if (level <= verbosity) { fprintf(LOG, txt, arg0, arg1); fflush(LOG); } -# define PDEBUG3_VERBOSE(level, verbosity, txt, arg0, arg1, arg2) if (level <= verbosity) { fprintf(LOG, txt, arg0, arg1, arg2); fflush(LOG); } -# define PDEBUG4_VERBOSE(level, verbosity, txt, arg0, arg1, arg2, arg3) if (level <= verbosity) { fprintf(LOG, txt, arg0, arg1, arg2, arg3); fflush(LOG); } +# define PDEBUG(fmt, args...) fprintf (LOG, fmt , ## args) # else -# define PDEBUG -# define PDEBUG_VERBOSE -# define PDEBUG0_VERBOSE(level, verbosity, txt) -# define PDEBUG1_VERBOSE(level, verbosity, txt, arg0) -# define PDEBUG2_VERBOSE(level, verbosity, txt, arg0, arg1) -# define PDEBUG3_VERBOSE(level, verbosity, txt, arg0, arg1, arg2) -# define PDEBUG4_VERBOSE(level, verbosity, txt, arg0, arg1, arg2, arg3) +# define PDEBUG(fmt, args...) # endif #endif +#ifdef DEBUG +# define PDEBUG_VERBOSE(level, verbosity, fmt, args...) if (level <= verbosity) { fprintf(LOG, fmt, ## args); fflush(LOG); } +# define PDEBUG0_VERBOSE(level, verbosity, txt) if (level <= verbosity) { fprintf(LOG, txt); fflush(LOG); } +# define PDEBUG1_VERBOSE(level, verbosity, txt, arg0) if (level <= verbosity) { fprintf(LOG, txt, arg0); fflush(LOG); } +# define PDEBUG2_VERBOSE(level, verbosity, txt, arg0, arg1) if (level <= verbosity) { fprintf(LOG, txt, arg0, arg1); fflush(LOG); } +# define PDEBUG3_VERBOSE(level, verbosity, txt, arg0, arg1, arg2) if (level <= verbosity) { fprintf(LOG, txt, arg0, arg1, arg2); fflush(LOG); } +# define PDEBUG4_VERBOSE(level, verbosity, txt, arg0, arg1, arg2, arg3) if (level <= verbosity) { fprintf(LOG, txt, arg0, arg1, arg2, arg3); fflush(LOG); } +#else +# define PDEBUG_VERBOSE(level, verbosity, fmt, args...) +# define PDEBUG0_VERBOSE(level, verbosity, txt) +# define PDEBUG1_VERBOSE(level, verbosity, txt, arg0) +# define PDEBUG2_VERBOSE(level, verbosity, txt, arg0, arg1) +# define PDEBUG3_VERBOSE(level, verbosity, txt, arg0, arg1, arg2) +# define PDEBUG4_VERBOSE(level, verbosity, txt, arg0, arg1, arg2, arg3) +#endif // DEBUG -#endif // PC_DEBUG_ diff --git a/src/fig/FIG0_6.h b/src/fig/FIG0_6.h index 770c4d5..96464d2 100644 --- a/src/fig/FIG0_6.h +++ b/src/fig/FIG0_6.h @@ -26,8 +26,6 @@ #pragma once #include <cstdint> -#include <vector> -#include <memory> namespace FIC { diff --git a/src/fig/FIG1.h b/src/fig/FIG1.h index 0fedffe..fe36717 100644 --- a/src/fig/FIG1.h +++ b/src/fig/FIG1.h @@ -23,8 +23,7 @@ along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef __FIG1_H_ -#define __FIG1_H_ +#pragma once #include <cstdint> @@ -103,10 +102,6 @@ class FIG1_5 : public IFIG vec_sp_service::iterator service; }; -#ifdef _WIN32 -# pragma pack(push) -#endif - struct FIGtype1_0 { uint8_t Length:5; uint8_t FIGtypeNumber:3; @@ -165,11 +160,5 @@ struct FIGtype1_4_data { } PACKED; -#ifdef _WIN32 -# pragma pack(pop) -#endif - } // namespace FIC -#endif // __FIG1_H_ - diff --git a/src/fig/FIG2.h b/src/fig/FIG2.h index ee3fed9..e69c5db 100644 --- a/src/fig/FIG2.h +++ b/src/fig/FIG2.h @@ -22,9 +22,7 @@ You should have received a copy of the GNU General Public License along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef __FIG2_H_ -#define __FIG2_H_ +#pragma once #include <cstdint> #include <map> @@ -117,10 +115,6 @@ class FIG2_4 : public IFIG std::map<std::pair<uint32_t, uint8_t>, FIG2_Segments> segment_per_component; }; -#ifdef _WIN32 -# pragma pack(push) -#endif - struct FIGtype2 { uint8_t Length:5; uint8_t FIGtypeNumber:3; @@ -159,11 +153,5 @@ struct FIG2_Extended_Label_WithTextControl { uint8_t EncodingFlag:1; } PACKED; -#ifdef _WIN32 -# pragma pack(pop) -#endif - } // namespace FIC -#endif // __FIG2_H_ - diff --git a/src/input/File.cpp b/src/input/File.cpp index d9fe02a..c70feee 100644 --- a/src/input/File.cpp +++ b/src/input/File.cpp @@ -28,9 +28,6 @@ #include <cstdio> #include <fcntl.h> #include <unistd.h> -#ifndef _WIN32 -# define O_BINARY 0 -#endif #include "input/File.h" #include "mpeg.h" #include "ReedSolomon.h" @@ -39,9 +36,6 @@ using namespace std; namespace Inputs { -#ifdef _WIN32 -# pragma pack(push, 1) -#endif struct packetHeader { unsigned char addressHigh:2; unsigned char last:1; @@ -52,11 +46,7 @@ struct packetHeader { unsigned char dataLength:7; unsigned char command; } -#ifdef _WIN32 -# pragma pack(pop) -#else __attribute((packed)) -#endif ; @@ -68,7 +58,7 @@ void FileBase::open(const std::string& name) load_entire_file(); } else { - int flags = O_RDONLY | O_BINARY; + int flags = O_RDONLY; if (m_nonblock) { flags |= O_NONBLOCK; } @@ -140,13 +130,13 @@ ssize_t FileBase::load_entire_file() { // Clear the buffer if the file open fails, this allows user to stop transmission // of the current data. - vector<uint8_t> old_file_contents = move(m_file_contents); + vector<uint8_t> old_file_contents = std::move(m_file_contents); m_file_contents.clear(); m_file_contents_offset = 0; // Read entire file in chunks of 4MiB constexpr size_t blocksize = 4 * 1024 * 1024; - constexpr int flags = O_RDONLY | O_BINARY; + constexpr int flags = O_RDONLY; m_fd = ::open(m_filename.c_str(), flags); if (m_fd == -1) { if (not m_file_open_alert_shown) { @@ -225,7 +215,7 @@ ssize_t FileBase::readFromFile(uint8_t *buffer, size_t size) vector<uint8_t> remaining_buf; copy(m_nonblock_buffer.begin() + size, m_nonblock_buffer.end(), back_inserter(remaining_buf)); - m_nonblock_buffer = move(remaining_buf); + m_nonblock_buffer = std::move(remaining_buf); return size; } @@ -18,23 +18,13 @@ You should have received a copy of the GNU General Public License along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef _MPEG -#define _MPEG +#pragma once #ifdef HAVE_CONFIG_H # include "config.h" #endif -#ifdef _WIN32 -# include <stddef.h> -# include <basetsd.h> -# include <io.h> - -# define ssize_t SSIZE_T -#else -# include <unistd.h> -#endif +#include <unistd.h> #ifdef __cplusplus extern "C" { @@ -86,4 +76,3 @@ int checkDabMpegFrame(void* data); } #endif -#endif // _MPEG |