summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2020-08-20 18:41:17 +0200
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2020-11-06 21:13:32 +0100
commit07604d62ab375e5c4f42bd05704ace608600c478 (patch)
tree2564d760c71b6036cef730097fabf205508bc4ba
parentbb7aa6f3115c83d47851688b3482f3fa1c2ab32f (diff)
downloadrockbox-07604d62ab375e5c4f42bd05704ace608600c478.tar.gz
rockbox-07604d62ab375e5c4f42bd05704ace608600c478.tar.bz2
rockbox-07604d62ab375e5c4f42bd05704ace608600c478.zip
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
-rw-r--r--rbutil/rbutilqt/base/encoderbase.cpp12
-rw-r--r--rbutil/rbutilqt/base/encoderlame.cpp16
-rw-r--r--rbutil/rbutilqt/base/encoderlame.h4
3 files changed, 22 insertions, 10 deletions
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);