diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-12-08 08:54:11 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-12-08 08:54:11 +0000 |
| commit | 600735b0339a1854b2cc79784f2df687aea0e61e (patch) | |
| tree | d2c5fd76f705d21d32dda17c1a520ba143a145dc /src | |
| parent | fc495503e79841b57c8f1a231b1e1559c6e2488a (diff) | |
| download | qmmp-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
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/Input/cdaudio/decoder_cdaudio.cpp | 15 | ||||
| -rw-r--r-- | src/plugins/Input/cdaudio/decoder_cdaudio.h | 3 | ||||
| -rw-r--r-- | src/plugins/Input/cdaudio/settingsdialog.cpp | 3 |
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(); } |
