From 07604d62ab375e5c4f42bd05704ace608600c478 Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Thu, 20 Aug 2020 18:41:17 +0200 Subject: rbutil: Command line fallback on libmp3lame failure. When loading libmp3lame fails fall back to using the command line lame. Avoids an unresolvable error when trying to create voice / talk files for Archos. Modernize code a bit. Change-Id: I2e8fd5786fda972cb24adbcb9ced531e08093b4f --- rbutil/rbutilqt/base/encoderbase.cpp | 12 +++++++++++- rbutil/rbutilqt/base/encoderlame.cpp | 16 +++++++++------- rbutil/rbutilqt/base/encoderlame.h | 4 ++-- 3 files changed, 22 insertions(+), 10 deletions(-) (limited to 'rbutil/rbutilqt') diff --git a/rbutil/rbutilqt/base/encoderbase.cpp b/rbutil/rbutilqt/base/encoderbase.cpp index 05ccae3011..90d7292b3a 100644 --- a/rbutil/rbutilqt/base/encoderbase.cpp +++ b/rbutil/rbutilqt/base/encoderbase.cpp @@ -23,6 +23,8 @@ #include "encoderlame.h" #include "encoderexe.h" +#include "Logger.h" + /********************************************************************* * Encoder Base **********************************************************************/ @@ -58,9 +60,17 @@ EncoderBase* EncoderBase::getEncoder(QObject* parent,QString encoder) { #if defined(Q_OS_MACX) /* currently not on OS X */ - enc = new EncoderExe(encoder,parent); + enc = new EncoderExe(encoder, parent); #else enc = new EncoderLame(parent); + if (!enc->configOk()) + { + LOG_WARNING() << "Could not load lame dll, falling back to command " + "line lame. This is notably slower."; + delete enc; + enc = new EncoderExe(encoder, parent); + + } #endif return enc; } diff --git a/rbutil/rbutilqt/base/encoderlame.cpp b/rbutil/rbutilqt/base/encoderlame.cpp index ad283ccf9e..1658a7092d 100644 --- a/rbutil/rbutilqt/base/encoderlame.cpp +++ b/rbutil/rbutilqt/base/encoderlame.cpp @@ -25,15 +25,19 @@ /** Resolve a symbol from loaded library. */ #define SYMBOLRESOLVE(symbol, type) \ - do { m_##symbol = (type)lib->resolve(#symbol); \ + do { m_##symbol = (type)lib.resolve(#symbol); \ if(!m_##symbol) return; \ LOG_INFO() << "Resolved symbol " #symbol; } \ while(0) -EncoderLame::EncoderLame(QObject *parent) : EncoderBase(parent) +EncoderLame::EncoderLame(QObject *parent) : EncoderBase(parent), + lib("libmp3lame", this), m_symbolsResolved(false) { - m_symbolsResolved = false; - lib = new QLibrary("libmp3lame", this); + lib.load(); + if (!lib.isLoaded()) { + LOG_WARNING() << "Loading mp3lame lib failed:" << lib.errorString(); + return; + } SYMBOLRESOLVE(get_lame_short_version, const char* (*)()); SYMBOLRESOLVE(lame_set_out_samplerate, int (*)(lame_global_flags*, int)); @@ -51,8 +55,6 @@ EncoderLame::EncoderLame(QObject *parent) : EncoderBase(parent) SYMBOLRESOLVE(lame_encode_flush, int (*)(lame_global_flags*, unsigned char*, int)); SYMBOLRESOLVE(lame_close, int (*)(lame_global_flags*)); - LOG_INFO() << "libmp3lame loaded:" << lib->isLoaded(); - m_encoderVolume = RbSettings::subValue("lame", RbSettings::EncoderVolume).toDouble(); m_encoderQuality = RbSettings::subValue("lame", RbSettings::EncoderQuality).toDouble(); m_symbolsResolved = true; @@ -305,6 +307,6 @@ bool EncoderLame::encode(QString input,QString output) */ bool EncoderLame::configOk() { - return (lib->isLoaded() && m_symbolsResolved); + return m_symbolsResolved; } diff --git a/rbutil/rbutilqt/base/encoderlame.h b/rbutil/rbutilqt/base/encoderlame.h index a8651f0cda..a5f1b2d3f4 100644 --- a/rbutil/rbutilqt/base/encoderlame.h +++ b/rbutil/rbutilqt/base/encoderlame.h @@ -34,7 +34,7 @@ class EncoderLame : public EncoderBase Q_OBJECT public: - EncoderLame(QObject *parent = NULL); + EncoderLame(QObject *parent = nullptr); bool encode(QString input,QString output); bool start(); bool stop() {return true;} @@ -45,7 +45,7 @@ class EncoderLame : public EncoderBase void saveSettings(); private: - QLibrary *lib; + QLibrary lib; const char*(*m_get_lame_short_version)(void); int (*m_lame_set_out_samplerate)(lame_global_flags*, int); int (*m_lame_set_in_samplerate)(lame_global_flags*, int); -- cgit v1.2.3