aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-12-08 08:54:11 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-12-08 08:54:11 +0000
commit600735b0339a1854b2cc79784f2df687aea0e61e (patch)
treed2c5fd76f705d21d32dda17c1a520ba143a145dc
parentfc495503e79841b57c8f1a231b1e1559c6e2488a (diff)
downloadqmmp-600735b0339a1854b2cc79784f2df687aea0e61e.tar.gz
qmmp-600735b0339a1854b2cc79784f2df687aea0e61e.tar.bz2
qmmp-600735b0339a1854b2cc79784f2df687aea0e61e.zip
cdaudio: added disk cache
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3954 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/Input/cdaudio/decoder_cdaudio.cpp15
-rw-r--r--src/plugins/Input/cdaudio/decoder_cdaudio.h3
-rw-r--r--src/plugins/Input/cdaudio/settingsdialog.cpp3
3 files changed, 21 insertions, 0 deletions
diff --git a/src/plugins/Input/cdaudio/decoder_cdaudio.cpp b/src/plugins/Input/cdaudio/decoder_cdaudio.cpp
index 0bd8b4f5e..88a22a2d6 100644
--- a/src/plugins/Input/cdaudio/decoder_cdaudio.cpp
+++ b/src/plugins/Input/cdaudio/decoder_cdaudio.cpp
@@ -43,6 +43,8 @@
#include "decoder_cdaudio.h"
+QList <CDATrack> DecoderCDAudio::m_track_cache;
+
static void log_handler (cdio_log_level_t level, const char message[])
{
QString str = QString::fromLocal8Bit(message).trimmed();
@@ -133,6 +135,13 @@ QList <CDATrack> DecoderCDAudio::generateTrackList(const QString &device)
qDebug("DecoderCDAudio: using cd audio capable drive \"%s\"", qPrintable(device_path));
}
+ if(!m_track_cache.isEmpty() && !cdio_get_media_changed(cdio))
+ {
+ qDebug("DecoderCDAudio: using track cache...");
+ cdio_destroy(cdio);
+ return m_track_cache;
+ }
+
if (cd_speed)
{
qDebug("DecoderCDAudio: setting drive speed to %dX.", cd_speed);
@@ -294,6 +303,7 @@ QList <CDATrack> DecoderCDAudio::generateTrackList(const QString &device)
cdio_destroy(cdio);
cdio = 0;
+ m_track_cache = tracks;
return tracks;
}
@@ -344,6 +354,11 @@ qint64 DecoderCDAudio::calculateTrackLength(lsn_t startlsn, lsn_t endlsn)
return ((endlsn - startlsn + 1) * 1000) / 75;
}
+void DecoderCDAudio::clearTrackCache()
+{
+ m_track_cache.clear();
+}
+
bool DecoderCDAudio::initialize()
{
m_bitrate = 0;
diff --git a/src/plugins/Input/cdaudio/decoder_cdaudio.h b/src/plugins/Input/cdaudio/decoder_cdaudio.h
index e84521bb6..50a87c161 100644
--- a/src/plugins/Input/cdaudio/decoder_cdaudio.h
+++ b/src/plugins/Input/cdaudio/decoder_cdaudio.h
@@ -48,6 +48,7 @@ public:
static QList <CDATrack> generateTrackList(const QString &device);
static qint64 calculateTrackLength(lsn_t startlsn, lsn_t endlsn);
+ static void clearTrackCache();
// Standard Decoder API
bool initialize();
@@ -71,6 +72,8 @@ private:
qint64 m_totalTime;
char *m_buffer;
qint64 m_buffer_at;
+ //tracks cache
+ static QList <CDATrack> m_track_cache;
};
#endif // DECODER_CDAUIDO_H
diff --git a/src/plugins/Input/cdaudio/settingsdialog.cpp b/src/plugins/Input/cdaudio/settingsdialog.cpp
index b41b86b7a..8404d43f9 100644
--- a/src/plugins/Input/cdaudio/settingsdialog.cpp
+++ b/src/plugins/Input/cdaudio/settingsdialog.cpp
@@ -21,6 +21,7 @@
#include <QSettings>
#include <QDir>
#include <qmmp/qmmp.h>
+#include "decoder_cdaudio.h"
#include "settingsdialog.h"
SettingsDialog::SettingsDialog(QWidget *parent)
@@ -67,6 +68,8 @@ void SettingsDialog::accept()
settings.setValue("cddb_path", ui.pathLineEdit->text());
settings.setValue("cddb_port", ui.portLineEdit->text());
settings.endGroup();
+ settings.sync();
+ DecoderCDAudio::clearCacheCache();
QDialog::accept();
}