From 503647557aa43e8be23133f8619c6c66bfe2f470 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Tue, 27 Aug 2019 08:40:01 +0200 Subject: Make InputBase::setBitrate fail with invalid_argument instead of return value --- src/input/Edi.cpp | 3 +-- src/input/File.cpp | 16 ++++++++++------ src/input/Prbs.cpp | 3 +++ src/input/Udp.cpp | 3 +-- src/input/Zmq.cpp | 6 +++++- src/input/Zmq.h | 4 +++- src/input/inputs.h | 2 ++ 7 files changed, 25 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/input/Edi.cpp b/src/input/Edi.cpp index 58ad38b..c50c9cf 100644 --- a/src/input/Edi.cpp +++ b/src/input/Edi.cpp @@ -203,8 +203,7 @@ void Edi::m_run() int Edi::setBitrate(int bitrate) { if (bitrate <= 0) { - etiLog.level(error) << "Invalid bitrate (" << bitrate << ") for " << m_name; - return -1; + throw invalid_argument("Invalid bitrate " + to_string(bitrate) + " for " + m_name); } return bitrate; diff --git a/src/input/File.cpp b/src/input/File.cpp index 3c2ef4c..5c83627 100644 --- a/src/input/File.cpp +++ b/src/input/File.cpp @@ -35,6 +35,8 @@ #include "mpeg.h" #include "ReedSolomon.h" +using namespace std; + namespace Inputs { #ifdef _WIN32 @@ -67,7 +69,7 @@ void FileBase::open(const std::string& name) m_fd = ::open(name.c_str(), flags); if (m_fd == -1) { - throw std::runtime_error("Could not open input file " + name + ": " + + throw runtime_error("Could not open input file " + name + ": " + strerror(errno)); } } @@ -75,8 +77,7 @@ void FileBase::open(const std::string& name) int FileBase::setBitrate(int bitrate) { if (bitrate <= 0) { - etiLog.log(error, "Invalid bitrate (%i)", bitrate); - return -1; + throw invalid_argument("Invalid bitrate " + to_string(bitrate)); } return bitrate; @@ -279,7 +280,10 @@ MUTE_SUBCHANNEL: int MPEGFile::setBitrate(int bitrate) { - if (bitrate == 0) { + if (bitrate < 0) { + throw invalid_argument("Invalid bitrate " + to_string(bitrate)); + } + else if (bitrate == 0) { uint8_t buffer[4]; if (readFrame(buffer, 4) == 0) { @@ -356,7 +360,7 @@ int PacketFile::readFrame(uint8_t* buffer, size_t size) length = 24; } else { - std::copy(m_packetData.begin(), + copy(m_packetData.begin(), m_packetData.begin() + m_packetLength, buffer); length = m_packetLength; @@ -364,7 +368,7 @@ int PacketFile::readFrame(uint8_t* buffer, size_t size) } } else { - std::copy(m_packetData.begin(), + copy(m_packetData.begin(), m_packetData.begin() + m_packetLength, buffer); length = m_packetLength; diff --git a/src/input/Prbs.cpp b/src/input/Prbs.cpp index 821f7b1..5cbeee3 100644 --- a/src/input/Prbs.cpp +++ b/src/input/Prbs.cpp @@ -86,6 +86,9 @@ int Prbs::readFrame(uint8_t* buffer, size_t size) int Prbs::setBitrate(int bitrate) { + if (bitrate <= 0) { + throw invalid_argument("Invalid bitrate " + to_string(bitrate)); + } return bitrate; } diff --git a/src/input/Udp.cpp b/src/input/Udp.cpp index b527530..fa9c286 100644 --- a/src/input/Udp.cpp +++ b/src/input/Udp.cpp @@ -108,8 +108,7 @@ int Udp::readFrame(uint8_t* buffer, size_t size) int Udp::setBitrate(int bitrate) { if (bitrate <= 0) { - etiLog.log(error, "Invalid bitrate (%i)\n", bitrate); - return -1; + throw invalid_argument("Invalid bitrate " + to_string(bitrate) + " for " + m_name); } return bitrate; diff --git a/src/input/Zmq.cpp b/src/input/Zmq.cpp index ce7f439..ec5f9b9 100644 --- a/src/input/Zmq.cpp +++ b/src/input/Zmq.cpp @@ -239,8 +239,12 @@ int ZmqBase::close() int ZmqBase::setBitrate(int bitrate) { + if (bitrate <= 0) { + throw invalid_argument("Invalid bitrate " + to_string(bitrate) + " for " + m_name); + } + m_bitrate = bitrate; - return bitrate; // TODO do a nice check here + return bitrate; } // size corresponds to a frame size. It is constant for a given bitrate diff --git a/src/input/Zmq.h b/src/input/Zmq.h index bf2d5ae..ab3e610 100644 --- a/src/input/Zmq.h +++ b/src/input/Zmq.h @@ -45,7 +45,7 @@ #include #include -#include +#include #include "zmq.hpp" #include "input/inputs.h" #include "ManagementServer.h" @@ -156,6 +156,7 @@ class ZmqBase : public InputBase, public RemoteControllable { m_bitrate(0), m_enable_input(true), m_config(config), + m_name(name), m_stats(name), m_prebuf_current(config.prebuffering) { RC_ADD_PARAMETER(enable, @@ -220,6 +221,7 @@ class ZmqBase : public InputBase, public RemoteControllable { char m_curve_encoder_key[CURVE_KEYLEN+1]; std::string m_inputUri; + std::string m_name; InputStat m_stats; diff --git a/src/input/inputs.h b/src/input/inputs.h index b823998..9c6c3f5 100644 --- a/src/input/inputs.h +++ b/src/input/inputs.h @@ -42,6 +42,8 @@ class InputBase { virtual void open(const std::string& name) = 0; virtual int readFrame(uint8_t* buffer, size_t size) = 0; + + /* Returns the effectively used bitrate, or throws invalid_argument on invalid bitrate */ virtual int setBitrate(int bitrate) = 0; virtual int close() = 0; -- cgit v1.2.3