diff options
| -rw-r--r-- | src/plugins/Input/Input.pro | 2 | ||||
| -rw-r--r-- | src/plugins/Input/cdaudio/decoder_cdaudio.cpp | 58 | ||||
| -rw-r--r-- | src/plugins/Input/cdaudio/decoder_cdaudio.h | 5 | ||||
| -rw-r--r-- | src/plugins/Input/cdaudio/decodercdaudiofactory.cpp | 13 | ||||
| -rw-r--r-- | src/plugins/Input/cdaudio/decodercdaudiofactory.h | 12 |
5 files changed, 47 insertions, 43 deletions
diff --git a/src/plugins/Input/Input.pro b/src/plugins/Input/Input.pro index bef91bc20..f0c701b2b 100644 --- a/src/plugins/Input/Input.pro +++ b/src/plugins/Input/Input.pro @@ -32,7 +32,7 @@ contains(CONFIG, OPUS_PLUGIN){ } contains(CONFIG, CDAUDIO_PLUGIN){ - #SUBDIRS += cdaudio + SUBDIRS += cdaudio } contains(CONFIG, SID_PLUGIN){ diff --git a/src/plugins/Input/cdaudio/decoder_cdaudio.cpp b/src/plugins/Input/cdaudio/decoder_cdaudio.cpp index f1e3d543a..c25de0597 100644 --- a/src/plugins/Input/cdaudio/decoder_cdaudio.cpp +++ b/src/plugins/Input/cdaudio/decoder_cdaudio.cpp @@ -103,7 +103,7 @@ DecoderCDAudio::~DecoderCDAudio() delete [] m_buffer; } -QList <CDATrack> DecoderCDAudio::generateTrackList(const QString &device) +QList<CDATrack> DecoderCDAudio::generateTrackList(const QString &device, TrackInfo::Parts parts) { //read settings QSettings settings(Qmmp::configFile(), QSettings::IniFormat); @@ -183,9 +183,19 @@ QList <CDATrack> DecoderCDAudio::generateTrackList(const QString &device) CDATrack t; t.first_sector = cdio_get_track_lsn(pcdrom_drive->p_cdio, i); t.last_sector = cdio_get_track_last_lsn(pcdrom_drive->p_cdio, i); - t.info.setLength((t.last_sector - t.first_sector +1) / 75); - t.info.setMetaData(Qmmp::TRACK, i); + t.info.setDuration((t.last_sector - t.first_sector +1) * 1000 / 75); + t.info.setValue(Qmmp::TRACK, i); t.info.setPath(QString("cdda://%1#%2").arg(device_path).arg(i)); + + if(parts & TrackInfo::Properties) + { + t.info.setValue(Qmmp::BITRATE, 1411); + t.info.setValue(Qmmp::SAMPLERATE, 44100); + t.info.setValue(Qmmp::CHANNELS, 2); + t.info.setValue(Qmmp::BITS_PER_SAMPLE, 16); + t.info.setValue(Qmmp::FORMAT_NAME, "CDDA"); + } + if ((t.first_sector == CDIO_INVALID_LSN) || (t.last_sector== CDIO_INVALID_LSN)) { qWarning("DecoderCDAudio: invalid stard(end) lsn for the track %d.", i); @@ -199,23 +209,23 @@ QList <CDATrack> DecoderCDAudio::generateTrackList(const QString &device) cdtext_t *cdtext = use_cd_text ? cdio_get_cdtext(pcdrom_drive->p_cdio, i) : 0; if (cdtext && cdtext->field[CDTEXT_TITLE]) { - t.info.setMetaData(Qmmp::TITLE, QString::fromLocal8Bit(cdtext->field[CDTEXT_TITLE])); - t.info.setMetaData(Qmmp::ARTIST, QString::fromLocal8Bit(cdtext->field[CDTEXT_PERFORMER])); - t.info.setMetaData(Qmmp::GENRE, QString::fromLocal8Bit(cdtext->field[CDTEXT_GENRE])); + t.info.setValue(Qmmp::TITLE, QString::fromLocal8Bit(cdtext->field[CDTEXT_TITLE])); + t.info.setValue(Qmmp::ARTIST, QString::fromLocal8Bit(cdtext->field[CDTEXT_PERFORMER])); + t.info.setValue(Qmmp::GENRE, QString::fromLocal8Bit(cdtext->field[CDTEXT_GENRE])); use_cddb = false; } #else cdtext_t *cdtext = use_cd_text ? cdio_get_cdtext(pcdrom_drive->p_cdio) : 0; if (cdtext) { - t.info.setMetaData(Qmmp::TITLE, QString::fromUtf8(cdtext_get_const(cdtext,CDTEXT_FIELD_TITLE,i))); - t.info.setMetaData(Qmmp::ARTIST, QString::fromUtf8(cdtext_get_const(cdtext,CDTEXT_FIELD_PERFORMER,i))); - t.info.setMetaData(Qmmp::GENRE, QString::fromUtf8(cdtext_get_const(cdtext,CDTEXT_FIELD_GENRE,i))); + t.info.setValue(Qmmp::TITLE, QString::fromUtf8(cdtext_get_const(cdtext,CDTEXT_FIELD_TITLE,i))); + t.info.setValue(Qmmp::ARTIST, QString::fromUtf8(cdtext_get_const(cdtext,CDTEXT_FIELD_PERFORMER,i))); + t.info.setValue(Qmmp::GENRE, QString::fromUtf8(cdtext_get_const(cdtext,CDTEXT_FIELD_GENRE,i))); use_cddb = false; } #endif else - t.info.setMetaData(Qmmp::TITLE, QString("CDA Track %1").arg(i, 2, 10, QChar('0'))); + t.info.setValue(Qmmp::TITLE, QString("CDA Track %1").arg(i, 2, 10, QChar('0'))); tracks << t; } qDebug("DecoderCDAudio: found %d audio tracks", tracks.size()); @@ -293,14 +303,14 @@ QList <CDATrack> DecoderCDAudio::generateTrackList(const QString &device) { cddb_track_t *cddb_track = cddb_disc_get_track (cddb_disc, i - 1); int t = i - first_track_number; - tracks[t].info.setMetaData(Qmmp::ARTIST, - QString::fromUtf8(cddb_track_get_artist(cddb_track))); - tracks[t].info.setMetaData(Qmmp::TITLE, - QString::fromUtf8(cddb_track_get_title(cddb_track))); - tracks[t].info.setMetaData(Qmmp::GENRE, - QString::fromUtf8(cddb_disc_get_genre(cddb_disc))); - tracks[t].info.setMetaData(Qmmp::ALBUM, - QString::fromUtf8(cddb_disc_get_title(cddb_disc))); + tracks[t].info.setValue(Qmmp::ARTIST, + QString::fromUtf8(cddb_track_get_artist(cddb_track))); + tracks[t].info.setValue(Qmmp::TITLE, + QString::fromUtf8(cddb_track_get_title(cddb_track))); + tracks[t].info.setValue(Qmmp::GENRE, + QString::fromUtf8(cddb_disc_get_genre(cddb_disc))); + tracks[t].info.setValue(Qmmp::ALBUM, + QString::fromUtf8(cddb_disc_get_title(cddb_disc))); } saveToCache(tracks, id); } @@ -357,10 +367,10 @@ bool DecoderCDAudio::readFromCache(QList <CDATrack> *tracks, uint disc_id) return false; for(int i = 0; i < count; ++i) { - (*tracks)[i].info.setMetaData(Qmmp::ARTIST, settings.value(QString("artist%1").arg(i)).toString()); - (*tracks)[i].info.setMetaData(Qmmp::TITLE, settings.value(QString("title%1").arg(i)).toString()); - (*tracks)[i].info.setMetaData(Qmmp::GENRE, settings.value(QString("genre%1").arg(i)).toString()); - (*tracks)[i].info.setMetaData(Qmmp::ALBUM, settings.value(QString("album%1").arg(i)).toString()); + (*tracks)[i].info.setValue(Qmmp::ARTIST, settings.value(QString("artist%1").arg(i)).toString()); + (*tracks)[i].info.setValue(Qmmp::TITLE, settings.value(QString("title%1").arg(i)).toString()); + (*tracks)[i].info.setValue(Qmmp::GENRE, settings.value(QString("genre%1").arg(i)).toString()); + (*tracks)[i].info.setValue(Qmmp::ALBUM, settings.value(QString("album%1").arg(i)).toString()); } return true; } @@ -395,7 +405,7 @@ bool DecoderCDAudio::initialize() //find track by number int track_at = -1; for (int i = 0; i < tracks.size(); ++i) - if (tracks[i].info.metaData(Qmmp::TRACK).toInt() == track_number) + if (tracks[i].info.value(Qmmp::TRACK).toInt() == track_number) { track_at = i; break; @@ -447,7 +457,7 @@ bool DecoderCDAudio::initialize() } configure(44100, 2, Qmmp::PCM_S16LE); m_bitrate = 1411; - m_totalTime = tracks[track_at].info.length() * 1000; + m_totalTime = tracks[track_at].info.duration(); m_first_sector = tracks[track_at].first_sector; m_current_sector = tracks[track_at].first_sector; m_last_sector = tracks[track_at].last_sector; diff --git a/src/plugins/Input/cdaudio/decoder_cdaudio.h b/src/plugins/Input/cdaudio/decoder_cdaudio.h index bcad1add4..84eb37cce 100644 --- a/src/plugins/Input/cdaudio/decoder_cdaudio.h +++ b/src/plugins/Input/cdaudio/decoder_cdaudio.h @@ -25,6 +25,7 @@ #include <cdio/cdio.h> #include <QMultiHash> #include <qmmp/decoder.h> +#include <qmmp/trackinfo.h> class CDATrack { @@ -35,7 +36,7 @@ public: last_sector = 0; } - FileInfo info; + TrackInfo info; lsn_t first_sector; lsn_t last_sector; }; @@ -46,7 +47,7 @@ public: DecoderCDAudio(const QString &url); virtual ~DecoderCDAudio(); - static QList <CDATrack> generateTrackList(const QString &device); + static QList <CDATrack> generateTrackList(const QString &device, TrackInfo::Parts parts = TrackInfo::AllParts); static qint64 calculateTrackLength(lsn_t startlsn, lsn_t endlsn); static void clearTrackCache(); diff --git a/src/plugins/Input/cdaudio/decodercdaudiofactory.cpp b/src/plugins/Input/cdaudio/decodercdaudiofactory.cpp index cf83733a6..0bf7f742a 100644 --- a/src/plugins/Input/cdaudio/decodercdaudiofactory.cpp +++ b/src/plugins/Input/cdaudio/decodercdaudiofactory.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2015 by Ilya Kotov * + * Copyright (C) 2009-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -53,17 +53,16 @@ Decoder *DecoderCDAudioFactory::create(const QString &url, QIODevice *input) return new DecoderCDAudio(url); } -QList<FileInfo *> DecoderCDAudioFactory::createPlayList(const QString &url, bool useMetaData, QStringList *) +QList<TrackInfo *> DecoderCDAudioFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *) { - Q_UNUSED(useMetaData); - QList <FileInfo*> list; - QString device_path = url; + QList<TrackInfo*> list; + QString device_path = path; device_path.remove("cdda://"); device_path.remove(QRegExp("#\\d+$")); - QList <CDATrack> tracks = DecoderCDAudio::generateTrackList(device_path); + QList <CDATrack> tracks = DecoderCDAudio::generateTrackList(device_path, parts); foreach(CDATrack t, tracks) { - list << new FileInfo(t.info); + list << new TrackInfo(t.info); } return list; } diff --git a/src/plugins/Input/cdaudio/decodercdaudiofactory.h b/src/plugins/Input/cdaudio/decodercdaudiofactory.h index 04a7f2b16..a117a5995 100644 --- a/src/plugins/Input/cdaudio/decodercdaudiofactory.h +++ b/src/plugins/Input/cdaudio/decodercdaudiofactory.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2016 by Ilya Kotov * + * Copyright (C) 2009-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -20,14 +20,8 @@ #ifndef DECODERCDAUDIOFACTORY_H #define DECODERCDAUDIOFACTORY_H -#include <QObject> -#include <QString> -#include <QIODevice> -#include <QWidget> -#include <qmmp/decoder.h> -#include <qmmp/output.h> + #include <qmmp/decoderfactory.h> -#include <qmmp/fileinfo.h> class DecoderCDAudioFactory : public QObject, DecoderFactory { @@ -38,7 +32,7 @@ public: bool canDecode(QIODevice *input) const; const DecoderProperties properties() const; Decoder *create(const QString &, QIODevice *); - QList<FileInfo *> createPlayList(const QString &url, bool useMetaData, QStringList *); + QList<TrackInfo *> createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *); MetaDataModel* createMetaDataModel(const QString &path, QObject *parent = 0); void showSettings(QWidget *parent); void showAbout(QWidget *parent); |
