diff options
Diffstat (limited to 'src/plugins/Input/cdaudio/decoder_cdaudio.cpp')
| -rw-r--r-- | src/plugins/Input/cdaudio/decoder_cdaudio.cpp | 15 |
1 files changed, 15 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; |
