aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/sid
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-04-28 13:10:43 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-04-28 13:10:43 +0000
commit86d896debe9f4a1d9465b06def8cc81c337d935a (patch)
treedbeae1d6125325e4470e3e04f40b2f980a4e9e3c /src/plugins/Input/sid
parent7681777e32a6c645c2d986f9f70f6de232ae00b1 (diff)
downloadqmmp-86d896debe9f4a1d9465b06def8cc81c337d935a.tar.gz
qmmp-86d896debe9f4a1d9465b06def8cc81c337d935a.tar.bz2
qmmp-86d896debe9f4a1d9465b06def8cc81c337d935a.zip
sid plugin: song length db optimization
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3424 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/sid')
-rw-r--r--src/plugins/Input/sid/decoder_sid.cpp37
-rw-r--r--src/plugins/Input/sid/decoder_sid.h4
-rw-r--r--src/plugins/Input/sid/decodersidfactory.cpp19
-rw-r--r--src/plugins/Input/sid/decodersidfactory.h6
-rw-r--r--src/plugins/Input/sid/settingsdialog.cpp11
-rw-r--r--src/plugins/Input/sid/settingsdialog.h7
-rw-r--r--src/plugins/Input/sid/sidhelper.cpp6
-rw-r--r--src/plugins/Input/sid/sidhelper.h4
8 files changed, 60 insertions, 34 deletions
diff --git a/src/plugins/Input/sid/decoder_sid.cpp b/src/plugins/Input/sid/decoder_sid.cpp
index e038c8e96..c79b8bf70 100644
--- a/src/plugins/Input/sid/decoder_sid.cpp
+++ b/src/plugins/Input/sid/decoder_sid.cpp
@@ -32,10 +32,12 @@
#include "decoder_sid.h"
// Decoder class
-DecoderSID::DecoderSID(const QString &url) : Decoder()
+DecoderSID::DecoderSID(SidDatabase *db, const QString &url) : Decoder()
{
+ m_db = db;
m_url = url;
m_player = new sidplayfp();
+ m_length = 0;
}
DecoderSID::~DecoderSID()
@@ -88,9 +90,17 @@ bool DecoderSID::initialize()
//read settings
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
settings.beginGroup("SID");
- settings.value("use_hvsc", false).toBool();
- QString hvsc_default_path = QFileInfo(Qmmp::configFile()).absolutePath() + "/Songlengths.txt";
- settings.value("hvsc_path", hvsc_default_path).toString();
+ if(settings.value("use_hvsc", false).toBool())
+ {
+ char md5[SidTune::MD5_LENGTH];
+ tune->createMD5(md5);
+ m_length = m_db->length(md5, track);
+ }
+
+ if(m_length <= 0)
+ m_length = settings.value("song_length", 180).toInt();
+
+ qDebug("DecoderSID: song length: %d", m_length);
sidbuilder *rs = 0;
if(settings.value("engine", "residfp").toString() == "residfp")
@@ -128,21 +138,6 @@ bool DecoderSID::initialize()
configure(44100, 2);
qDebug("DecoderSID: initialize succes");
-
-
- char md5[SidTune::MD5_LENGTH];
- tune->createMD5(md5);
-
- SidDatabase database;
-
- database.open("/home/user/.qmmp/Songlengths.txt");
-
-
-
- qDebug("length = %d", database.length(md5, track));
- m_length = database.length(md5, track);
-
-
return true;
}
@@ -163,7 +158,7 @@ int DecoderSID::bitrate()
qint64 DecoderSID::read(char *data, qint64 size)
{
- if(m_player->time() > m_length)
- return 0;
+ //if(m_player->time() > m_length)
+ // return 0;
return m_player->play((short *)data, size/2) * 2;
}
diff --git a/src/plugins/Input/sid/decoder_sid.h b/src/plugins/Input/sid/decoder_sid.h
index 04c2cbaa1..05c70660a 100644
--- a/src/plugins/Input/sid/decoder_sid.h
+++ b/src/plugins/Input/sid/decoder_sid.h
@@ -24,6 +24,7 @@
#include <qmmp/decoder.h>
class sidplayfp;
+class SidDatabase;
/**
@author Ilya Kotov <forkotov02@hotmail.ru>
@@ -31,7 +32,7 @@ class sidplayfp;
class DecoderSID : public Decoder
{
public:
- DecoderSID(const QString &url);
+ DecoderSID(SidDatabase *db, const QString &url);
virtual ~DecoderSID();
// Standard Decoder API
@@ -45,6 +46,7 @@ private:
qint64 m_totalTime;
QString m_url;
sidplayfp *m_player;
+ SidDatabase *m_db;
int m_length;
};
diff --git a/src/plugins/Input/sid/decodersidfactory.cpp b/src/plugins/Input/sid/decodersidfactory.cpp
index f0042032b..3795be74c 100644
--- a/src/plugins/Input/sid/decodersidfactory.cpp
+++ b/src/plugins/Input/sid/decodersidfactory.cpp
@@ -29,6 +29,19 @@
// DecoderSIDFactory
+DecoderSIDFactory::DecoderSIDFactory()
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("SID");
+ if(settings.value("use_hvsc", false).toBool())
+ {
+ QString default_path = QFileInfo(Qmmp::configFile()).absolutePath() + "/Songlengths.txt";
+ if(!m_db.open(qPrintable(settings.value("hvsc_path", default_path).toString())))
+ qWarning("DecoderSIDFactory: %s", m_db.error());
+ }
+ settings.endGroup();
+}
+
bool DecoderSIDFactory::supports(const QString &source) const
{
foreach(QString filter, properties().filters)
@@ -66,12 +79,12 @@ const DecoderProperties DecoderSIDFactory::properties() const
Decoder *DecoderSIDFactory::create(const QString &path, QIODevice *input)
{
Q_UNUSED(input);
- return new DecoderSID(path);
+ return new DecoderSID(&m_db, path);
}
QList<FileInfo *> DecoderSIDFactory::createPlayList(const QString &fileName, bool useMetaData)
{
- SIDHelper helper;
+ SIDHelper helper(&m_db);
helper.load(fileName);
QList <FileInfo*> list = helper.createPlayList(useMetaData);
if(list.isEmpty())
@@ -101,7 +114,7 @@ MetaDataModel* DecoderSIDFactory::createMetaDataModel(const QString &path, QObje
void DecoderSIDFactory::showSettings(QWidget *parent)
{
- SettingsDialog *d = new SettingsDialog(parent);
+ SettingsDialog *d = new SettingsDialog(&m_db, parent);
d->show();
}
diff --git a/src/plugins/Input/sid/decodersidfactory.h b/src/plugins/Input/sid/decodersidfactory.h
index 2d076c8fe..d8bc4bc71 100644
--- a/src/plugins/Input/sid/decodersidfactory.h
+++ b/src/plugins/Input/sid/decodersidfactory.h
@@ -24,6 +24,7 @@
#include <QString>
#include <QIODevice>
#include <QWidget>
+#include <sidplayfp/SidDatabase.h>
#include <qmmp/decoder.h>
#include <qmmp/output.h>
#include <qmmp/decoderfactory.h>
@@ -38,6 +39,8 @@ class DecoderSIDFactory : public QObject, DecoderFactory
Q_INTERFACES(DecoderFactory)
public:
+ DecoderSIDFactory();
+
bool supports(const QString &source) const;
bool canDecode(QIODevice *input) const;
const DecoderProperties properties() const;
@@ -47,6 +50,9 @@ public:
void showSettings(QWidget *parent);
void showAbout(QWidget *parent);
QTranslator *createTranslator(QObject *parent);
+
+private:
+ SidDatabase m_db;
};
#endif
diff --git a/src/plugins/Input/sid/settingsdialog.cpp b/src/plugins/Input/sid/settingsdialog.cpp
index 78db867c6..a27107fa8 100644
--- a/src/plugins/Input/sid/settingsdialog.cpp
+++ b/src/plugins/Input/sid/settingsdialog.cpp
@@ -24,8 +24,9 @@
#include <sidplayfp/SidConfig.h>
#include "settingsdialog.h"
-SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent)
+SettingsDialog::SettingsDialog(SidDatabase *db, QWidget *parent) : QDialog(parent)
{
+ m_db = db;
m_ui.setupUi(this);
setAttribute(Qt::WA_DeleteOnClose);
@@ -35,6 +36,7 @@ SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent)
m_ui.useHVSCCheckBox->setChecked(settings.value("use_hvsc", false).toBool());
QString hvsc_default_path = QFileInfo(Qmmp::configFile()).absolutePath() + "/Songlengths.txt";
m_ui.hvscPathLineEdit->setText(settings.value("hvsc_path", hvsc_default_path).toString());
+ m_ui.defaultLengthSpinBox->setValue(settings.value("song_length", 180).toInt());
m_ui.sampleRateComboBox->addItem(tr("44100 Hz"), 44100);
m_ui.sampleRateComboBox->addItem(tr("48000 Hz"), 48000);
@@ -66,6 +68,7 @@ void SettingsDialog::accept()
settings.beginGroup("SID");
settings.setValue("use_hvsc", m_ui.useHVSCCheckBox->isChecked());
settings.setValue("hvsc_path", m_ui.hvscPathLineEdit->text());
+ settings.setValue("song_length", m_ui.defaultLengthSpinBox->value());
int i = m_ui.sampleRateComboBox->currentIndex();
if(i >= 0)
settings.setValue("sample_rate", m_ui.sampleRateComboBox->itemData(i));
@@ -74,6 +77,12 @@ void SettingsDialog::accept()
settings.setValue("fast_resampling", m_ui.fastResampligCheckBox->isChecked());
if((i = m_ui.resamplingComboBox->currentIndex()) >= 0)
settings.setValue("resampling_method", m_ui.resamplingComboBox->itemData(i));
+ m_db->close();
+ if(m_ui.useHVSCCheckBox->isChecked())
+ {
+ if(!m_db->open(qPrintable(m_ui.hvscPathLineEdit->text())))
+ qWarning("SettingsDialog: %s", m_db->error());
+ }
settings.endGroup();
QDialog::accept();
}
diff --git a/src/plugins/Input/sid/settingsdialog.h b/src/plugins/Input/sid/settingsdialog.h
index c1a9ff2f0..28fb61468 100644
--- a/src/plugins/Input/sid/settingsdialog.h
+++ b/src/plugins/Input/sid/settingsdialog.h
@@ -21,7 +21,7 @@
#define SETTINGSDIALOG_H
#include <QDialog>
-
+#include <sidplayfp/SidDatabase.h>
#include "ui_settingsdialog.h"
/**
@@ -31,15 +31,16 @@ class SettingsDialog : public QDialog
{
Q_OBJECT
public:
- SettingsDialog(QWidget *parent = 0);
+ SettingsDialog(SidDatabase *db, QWidget *parent = 0);
- ~SettingsDialog();
+ virtual ~SettingsDialog();
public slots:
virtual void accept();
private:
Ui::SettingsDialog m_ui;
+ SidDatabase *m_db;
};
diff --git a/src/plugins/Input/sid/sidhelper.cpp b/src/plugins/Input/sid/sidhelper.cpp
index bc6091d7d..bc1d7de91 100644
--- a/src/plugins/Input/sid/sidhelper.cpp
+++ b/src/plugins/Input/sid/sidhelper.cpp
@@ -22,10 +22,10 @@
#include <sidplayfp/SidDatabase.h>
#include "sidhelper.h"
-SIDHelper::SIDHelper()
+SIDHelper::SIDHelper(SidDatabase *db)
{
m_tune = 0;
- m_database.open("/home/user/.qmmp/Songlengths.txt");
+ m_db = db;
}
SIDHelper::~SIDHelper()
@@ -79,7 +79,7 @@ QList <FileInfo*> SIDHelper::createPlayList(bool meta)
info->setMetaData(Qmmp::COMMENT, tune_info->commentString(0));
info->setMetaData(Qmmp::TRACK, i);
}
- int length = m_database.length(md5, i);
+ int length = m_db->length(md5, i);
if(length > -1)
info->setLength(length);
diff --git a/src/plugins/Input/sid/sidhelper.h b/src/plugins/Input/sid/sidhelper.h
index c3640d0d8..4532be8ec 100644
--- a/src/plugins/Input/sid/sidhelper.h
+++ b/src/plugins/Input/sid/sidhelper.h
@@ -34,7 +34,7 @@
class SIDHelper
{
public:
- SIDHelper();
+ SIDHelper(SidDatabase *db);
~SIDHelper();
SidTune *load(const QString &url);
QList <FileInfo*> createPlayList(bool meta);
@@ -42,7 +42,7 @@ public:
private:
QString m_path;
SidTune *m_tune;
- SidDatabase m_database;
+ SidDatabase *m_db;
};
#endif // SIDHELPER_H