- forgotten fixes from March

This commit is contained in:
Dmytro Bogovych 2020-05-05 12:34:52 +03:00
parent 762eb9ca33
commit 0d69c26a13
7 changed files with 233 additions and 212 deletions

View File

@ -1,6 +1,7 @@
#include "HL_CrashRpt.h"
#if defined(USE_CRASHRPT)
#include "HL_CrashRpt.h"
#include "HL_String.h"
@ -171,4 +172,22 @@ CrashReporterGuard::~CrashReporterGuard()
CrashReporter::free();
}
#else
CrashReporterThreadPoint::CrashReporterThreadPoint()
{
}
CrashReporterThreadPoint::~CrashReporterThreadPoint()
{
}
CrashReporterGuard::CrashReporterGuard()
{
}
CrashReporterGuard::~CrashReporterGuard()
{
}
#endif

View File

@ -20,6 +20,9 @@ bool CsvReader::readLine(std::vector<std::string>& cells)
std::string line;
if (!std::getline(mInputStream, line))
return false;
StringHelper::trim(line);
if (line.empty())
return false;
StringHelper::split(line, cells, ",;");
return true;

View File

@ -202,7 +202,6 @@ std::shared_ptr<std::thread> OsProcess::asyncExecCommand(const std::string& cmdl
std::string OsProcess::execCommand(const std::string& cmd)
{
std::string cp = cmd;
std::shared_ptr<FILE> pipe(popen(cp.c_str(), "r"), pclose);
if (!pipe)
throw std::runtime_error("Failed to run.");

View File

@ -276,8 +276,8 @@ float StringHelper::toFloat(const std::string &s, float v, bool* isOk)
std::string StringHelper::trim(const std::string &s)
{
auto wsfront = std::find_if_not(s.begin(), s.end(), [](int c) { return std::isspace(c); });
auto wsback = std::find_if_not(s.rbegin(), s.rend(), [](int c) { return std::isspace(c); }).base();
auto wsfront = std::find_if_not(s.begin(), s.end(), [](int c) { return std::isspace(c) || c == '\r' || c == '\n'; });
auto wsback = std::find_if_not(s.rbegin(), s.rend(), [](int c) { return std::isspace(c) || c == '\r' || c == '\n'; }).base();
return (wsback <= wsfront ? std::string() : std::string(wsfront,wsback));
}

View File

@ -17,8 +17,8 @@
extern "C"
{
#include "libgsm/gsm.h"
#include "g722/g722.h"
#include "libgsm/gsm.h"
#include "g722/g722.h"
}
#include "libg729/g729_typedef.h"
@ -28,27 +28,27 @@ extern "C"
namespace MT
{
class G729Codec: public Codec
{
protected:
class G729Codec: public Codec
{
protected:
CodState* mEncoder = nullptr;
DecState* mDecoder = nullptr;
void decodeFrame(const uint8_t* rtp, int16_t* pcm);
public:
public:
class G729Factory: public Factory
{
public:
const char* name() override;
int channels() override;
int samplerate() override;
int payloadType() override;
const char* name() override;
int channels() override;
int samplerate() override;
int payloadType() override;
#if defined(USE_RESIP_INTEGRATION)
void updateSdp(resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction) override;
int processSdp(const resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction) override;
void updateSdp(resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction) override;
int processSdp(const resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction) override;
#endif
PCodec create() override;
PCodec create() override;
};
G729Codec();
~G729Codec() override;
@ -62,48 +62,48 @@ namespace MT
int encode(const void* input, int inputBytes, void* output, int outputCapacity) override;
int decode(const void* input, int inputBytes, void* output, int outputCapacity) override;
int plc(int lostFrames, void* output, int outputCapacity) override;
};
};
class OpusCodec: public Codec
{
protected:
class OpusCodec: public Codec
{
protected:
OpusEncoder *mEncoderCtx;
OpusDecoder *mDecoderCtx;
int mPTime, mSamplerate, mChannels;
Audio::SpeexResampler mDecodeResampler;
public:
public:
struct Params
{
bool mUseDtx, mUseInbandFec, mStereo;
int mPtime, mTargetBitrate, mExpectedPacketLoss;
bool mUseDtx, mUseInbandFec, mStereo;
int mPtime, mTargetBitrate, mExpectedPacketLoss;
Params();
Params();
#if defined(USE_RESIP_INTEGRATION)
resip::Data toString() const;
void parse(const resip::Data& params);
resip::Data toString() const;
void parse(const resip::Data& params);
#endif
};
class OpusFactory: public Factory
{
protected:
int mSamplerate, mChannels, mPType;
OpusCodec::Params mParams;
typedef std::vector<PCodec> CodecList;
CodecList mCodecList;
int mSamplerate, mChannels, mPType;
OpusCodec::Params mParams;
typedef std::vector<PCodec> CodecList;
CodecList mCodecList;
public:
OpusFactory(int samplerate, int channels, int ptype);
OpusFactory(int samplerate, int channels, int ptype);
const char* name() override;
int channels() override;
int samplerate() override;
int payloadType() override;
const char* name() override;
int channels() override;
int samplerate() override;
int payloadType() override;
#if defined(USE_RESIP_INTEGRATION)
void updateSdp(resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction) override;
int processSdp(const resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction) override;
void updateSdp(resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction) override;
int processSdp(const resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction) override;
#endif
PCodec create() override;
PCodec create() override;
};
OpusCodec(int samplerate, int channels, int ptime);
@ -119,34 +119,34 @@ namespace MT
int encode(const void* input, int inputBytes, void* output, int outputCapacity);
int decode(const void* input, int inputBytes, void* output, int outputCapacity);
int plc(int lostFrames, void* output, int outputCapacity);
};
};
class IlbcCodec: public Codec
{
protected:
class IlbcCodec: public Codec
{
protected:
int mPacketTime; /// Single frame time (20 or 30 ms)
iLBC_encinst_t* mEncoderCtx;
iLBC_decinst_t* mDecoderCtx;
public:
public:
class IlbcFactory: public Factory
{
protected:
int mPtime;
int mPType20ms, mPType30ms;
int mPtime;
int mPType20ms, mPType30ms;
public:
IlbcFactory(int ptype20ms, int ptype30ms);
const char* name();
int samplerate();
int payloadType();
IlbcFactory(int ptype20ms, int ptype30ms);
const char* name();
int samplerate();
int payloadType();
#if defined(USE_RESIP_INTEGRATION)
void updateSdp(resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction);
int processSdp(const resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction);
void create(CodecMap& codecs);
void updateSdp(resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction);
int processSdp(const resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction);
void create(CodecMap& codecs);
#endif
PCodec create();
PCodec create();
};
IlbcCodec(int packetTime);
@ -159,33 +159,33 @@ namespace MT
int encode(const void* input, int inputBytes, void* output, int outputCapacity);
int decode(const void* input, int inputBytes, void* output, int outputCapacity);
int plc(int lostFrames, void* output, int outputCapacity);
};
};
class G711Codec: public Codec
{
public:
class G711Codec: public Codec
{
public:
class AlawFactory: public Factory
{
public:
const char* name();
int samplerate();
int payloadType();
PCodec create();
const char* name();
int samplerate();
int payloadType();
PCodec create();
};
class UlawFactory: public Factory
{
public:
const char* name();
int samplerate();
int payloadType();
PCodec create();
const char* name();
int samplerate();
int payloadType();
PCodec create();
};
enum
{
ALaw = 0, /// a-law codec type
ULaw = 1 /// u-law codec type
ALaw = 0, /// a-law codec type
ULaw = 1 /// u-law codec type
};
G711Codec(int type);
@ -201,42 +201,42 @@ namespace MT
int decode(const void* input, int inputBytes, void* output, int outputCapacity);
int plc(int lostSamples, void* output, int outputCapacity);
protected:
protected:
int mType; /// Determines if it is u-law or a-law codec. Its value is ALaw or ULaw.
};
};
class IsacCodec: public Codec
{
protected:
int mSamplerate;
class IsacCodec: public Codec
{
protected:
int mSamplerate;
ISACFIX_MainStruct* mEncoderCtx;
ISACFIX_MainStruct* mDecoderCtx;
public:
public:
class IsacFactory16K: public Factory
{
public:
IsacFactory16K(int ptype);
const char* name();
int samplerate();
int payloadType();
PCodec create();
IsacFactory16K(int ptype);
const char* name();
int samplerate();
int payloadType();
PCodec create();
protected:
int mPType;
int mPType;
};
class IsacFactory32K: public Factory
{
public:
IsacFactory32K(int ptype);
IsacFactory32K(int ptype);
const char* name();
int samplerate();
int payloadType();
PCodec create();
const char* name();
int samplerate();
int payloadType();
PCodec create();
protected:
int mPType;
int mPType;
};
IsacCodec(int sampleRate);
@ -251,63 +251,63 @@ namespace MT
int encode(const void* input, int inputBytes, void* output, int outputCapacity);
int decode(const void* input, int inputBytes, void* output, int outputCapacity);
int plc(int lostFrames, void* output, int outputCapacity);
};
};
/// GSM MIME name
#define GSM_MIME_NAME "gsm"
/// Optional GSM SIP attributes
#define GSM_SIP_ATTR ""
/// GSM MIME name
#define GSM_MIME_NAME "gsm"
/// GSM codec single frame time in milliseconds
#define GSM_AUDIOFRAME_TIME 20
/// Optional GSM SIP attributes
#define GSM_SIP_ATTR ""
/// GSM codec single RTP frame size in bytes
#define GSM_RTPFRAME_SIZE_33 33
#define GSM_RTPFRAME_SIZE_32 32
#define GSM_RTPFRAME_SIZE_31 31
/// GSM codec single frame time in milliseconds
#define GSM_AUDIOFRAME_TIME 20
/// GSM payload type
#define GSM_PAYLOAD_TYPE 3
/// GSM codec single RTP frame size in bytes
#define GSM_RTPFRAME_SIZE_33 33
#define GSM_RTPFRAME_SIZE_32 32
#define GSM_RTPFRAME_SIZE_31 31
/// GSM bitrate (bits/sec)
#define GSM_BITRATE 13000
/// GSM payload type
#define GSM_PAYLOAD_TYPE 3
/// GSM bitrate (bits/sec)
#define GSM_BITRATE 13000
/*!
/*!
* GSM codec wrapper. Based on implementation located in libgsm directory.
* @see IMediaCodec
*/
class GsmCodec: public Codec
{
public:
class GsmCodec: public Codec
{
public:
enum class Type
{
Bytes_33,
Bytes_32,
Bytes_31,
Bytes_65
Bytes_33,
Bytes_32,
Bytes_31,
Bytes_65
};
protected:
protected:
struct gsm_state * mGSM; /// Pointer to codec context
Type mCodecType;
public:
public:
class GsmFactory: public Factory
{
protected:
int mPayloadType;
Type mCodecType;
int mPayloadType;
Type mCodecType;
public:
GsmFactory(Type codecType = Type::Bytes_33, int pt = GSM_PAYLOAD_TYPE);
GsmFactory(Type codecType = Type::Bytes_33, int pt = GSM_PAYLOAD_TYPE);
const char* name();
int samplerate();
int payloadType();
PCodec create();
const char* name();
int samplerate();
int payloadType();
PCodec create();
};
/*! Default constructor. Initializes codec context's pointer to NULL. */
@ -325,42 +325,42 @@ namespace MT
int encode(const void* input, int inputBytes, void* output, int outputCapacity);
int decode(const void* input, int inputBytes, void* output, int outputCapacity);
int plc(int lostFrames, void* output, int outputCapacity);
};
};
/// GSM MIME name
#define G722_MIME_NAME "g722"
/// GSM MIME name
#define G722_MIME_NAME "g722"
/// Optional GSM SIP attributes
#define G722_SIP_ATTR ""
/// Optional GSM SIP attributes
#define G722_SIP_ATTR ""
/// GSM codec single frame time in milliseconds
#define G722_AUDIOFRAME_TIME 20
/// GSM codec single frame time in milliseconds
#define G722_AUDIOFRAME_TIME 20
/// GSM codec single RTP frame size in bytes
#define G722_RTPFRAME_SIZE 80
/// GSM codec single RTP frame size in bytes
#define G722_RTPFRAME_SIZE 80
/// GSM payload type
#define G722_PAYLOAD_TYPE 9
/// GSM payload type
#define G722_PAYLOAD_TYPE 9
/// GSM bitrate (bits/sec)
#define G722_BITRATE 64000
/// GSM bitrate (bits/sec)
#define G722_BITRATE 64000
class G722Codec: public Codec
{
protected:
class G722Codec: public Codec
{
protected:
void* mEncoder;
void* mDecoder;
public:
public:
class G722Factory: public Factory
{
public:
G722Factory();
G722Factory();
const char* name();
int samplerate();
int payloadType();
PCodec create();
const char* name();
int samplerate();
int payloadType();
PCodec create();
};
G722Codec();
virtual ~G722Codec();
@ -376,26 +376,26 @@ namespace MT
int plc(int lostFrames, void* output, int outputCapacity);
//unsigned GetSamplerate() { return 16000; }
};
};
class GsmHrCodec: public Codec
{
protected:
class GsmHrCodec: public Codec
{
protected:
void* mDecoder;
public:
public:
class GsmHrFactory: public Factory
{
protected:
int mPtype;
int mPtype;
public:
GsmHrFactory(int ptype);
GsmHrFactory(int ptype);
const char* name() override;
int samplerate() override;
int payloadType() override;
PCodec create() override;
const char* name() override;
int samplerate() override;
int payloadType() override;
PCodec create() override;
};
GsmHrCodec();
@ -410,7 +410,7 @@ namespace MT
int encode(const void* input, int inputBytes, void* output, int outputCapacity) override;
int decode(const void* input, int inputBytes, void* output, int outputCapacity) override;
int plc(int lostFrames, void* output, int outputCapacity) override;
};
};
}
#endif

View File

@ -16,33 +16,33 @@
namespace MT
{
class Codec;
typedef std::shared_ptr<Codec> PCodec;
class Codec;
typedef std::shared_ptr<Codec> PCodec;
class CodecMap: public std::map<int, PCodec>
{
};
class CodecMap: public std::map<int, PCodec>
{
};
class Codec
{
public:
class Codec
{
public:
class Factory
{
public:
virtual ~Factory() {}
virtual const char* name() = 0;
virtual int samplerate() = 0;
virtual int payloadType() = 0;
virtual PCodec create() = 0;
virtual ~Factory() {}
virtual const char* name() = 0;
virtual int samplerate() = 0;
virtual int payloadType() = 0;
virtual PCodec create() = 0;
virtual int channels();
virtual int channels();
#if defined(USE_RESIP_INTEGRATION)
typedef std::map<int, PCodec > CodecMap;
virtual void create(CodecMap& codecs);
virtual void updateSdp(resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction);
// Returns payload type from chosen codec if success. -1 is returned for negative result.
virtual int processSdp(const resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction);
resip::Codec resipCodec();
typedef std::map<int, PCodec > CodecMap;
virtual void create(CodecMap& codecs);
virtual void updateSdp(resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction);
// Returns payload type from chosen codec if success. -1 is returned for negative result.
virtual int processSdp(const resip::SdpContents::Session::Medium::CodecContainer& codecs, SdpDirection direction);
resip::Codec resipCodec();
#endif
};
virtual ~Codec() {}
@ -59,6 +59,6 @@ namespace MT
// Returns size of codec in memory
virtual int getSize() const { return 0; };
};
};
}
#endif

View File

@ -19,41 +19,41 @@
namespace MT
{
class CodecList
{
public:
class CodecList
{
public:
struct Settings
{
bool mWrapIuUP = false;
bool mSkipDecode = false;
bool mWrapIuUP = false;
bool mSkipDecode = false;
// AMR payload types
std::set<int> mAmrWbPayloadType = { MT_AMRWB_PAYLOADTYPE };
std::set<int> mAmrNbPayloadType = { MT_AMRNB_PAYLOADTYPE };
std::set<int> mAmrWbOctetPayloadType = { MT_AMRWB_OCTET_PAYLOADTYPE };
std::set<int> mAmrNbOctetPayloadType = { MT_AMRNB_OCTET_PAYLOADTYPE };
// AMR payload types
std::set<int> mAmrWbPayloadType = { MT_AMRWB_PAYLOADTYPE };
std::set<int> mAmrNbPayloadType = { MT_AMRNB_PAYLOADTYPE };
std::set<int> mAmrWbOctetPayloadType = { MT_AMRWB_OCTET_PAYLOADTYPE };
std::set<int> mAmrNbOctetPayloadType = { MT_AMRNB_OCTET_PAYLOADTYPE };
bool isAmrWb(int ptype) const { return mAmrWbOctetPayloadType.count(ptype) > 0 || mAmrWbPayloadType.count(ptype) > 0; }
bool isAmrNb(int ptype) const { return mAmrNbOctetPayloadType.count(ptype) > 0 || mAmrNbPayloadType.count(ptype) > 0; }
bool isAmrWb(int ptype) const { return mAmrWbOctetPayloadType.count(ptype) > 0 || mAmrWbPayloadType.count(ptype) > 0; }
bool isAmrNb(int ptype) const { return mAmrNbOctetPayloadType.count(ptype) > 0 || mAmrNbPayloadType.count(ptype) > 0; }
int mIsac16KPayloadType = MT_ISAC16K_PAYLOADTYPE;
int mIsac32KPayloadType = MT_ISAC32K_PAYLOADTYPE;
int mIlbc20PayloadType = MT_ILBC20_PAYLOADTYPE;
int mIlbc30PayloadType = MT_ILBC30_PAYLOADTYPE;
int mGsmFrPayloadType = 3; // GSM is codec with fixed payload type. But sometimes it has to be overwritten.
int mGsmFrPayloadLength = 33; // Expected GSM payload length
int mGsmHrPayloadType = MT_GSMHR_PAYLOADTYPE;
int mGsmEfrPayloadType = MT_GSMEFR_PAYLOADTYPE;
int mIsac16KPayloadType = MT_ISAC16K_PAYLOADTYPE;
int mIsac32KPayloadType = MT_ISAC32K_PAYLOADTYPE;
int mIlbc20PayloadType = MT_ILBC20_PAYLOADTYPE;
int mIlbc30PayloadType = MT_ILBC30_PAYLOADTYPE;
int mGsmFrPayloadType = 3; // GSM is codec with fixed payload type. But sometimes it has to be overwritten.
int mGsmFrPayloadLength = 33; // Expected GSM payload length
int mGsmHrPayloadType = MT_GSMHR_PAYLOADTYPE;
int mGsmEfrPayloadType = MT_GSMEFR_PAYLOADTYPE;
struct OpusSpec
{
int mPayloadType = 0;
int mRate = 0;
int mChannels = 0;
};
std::vector<OpusSpec> mOpusSpec;
struct OpusSpec
{
int mPayloadType = 0;
int mRate = 0;
int mChannels = 0;
};
std::vector<OpusSpec> mOpusSpec;
static Settings DefaultSettings;
static Settings DefaultSettings;
};
CodecList(const Settings& settings);
@ -64,15 +64,15 @@ namespace MT
int findCodec(const std::string& name) const;
void fillCodecMap(CodecMap& cm);
protected:
protected:
typedef std::vector<Codec::Factory*> FactoryList;
FactoryList mFactoryList;
Settings mSettings;
};
};
class CodecListPriority
{
public:
class CodecListPriority
{
public:
CodecListPriority();
~CodecListPriority();
@ -80,16 +80,16 @@ namespace MT
int count(const CodecList& cl) const;
Codec::Factory& codecAt(const CodecList& cl, int index) const;
protected:
protected:
struct Item
{
int mCodecIndex;
int mPriority;
int mCodecIndex;
int mPriority;
};
std::vector<Item> mPriorityList;
static bool isNegativePriority(const CodecListPriority::Item& item);
static bool compare(const Item& item1, const Item& item2);
};
};
}
#endif