aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-05-30 18:12:57 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-05-30 18:12:57 +0000
commitf038e1af639dc9896bbc2a3dfcbb62f53a7853f2 (patch)
tree3e58f6128ae2c7135b72251768de26b9171fdf32
parent6e2d0b2231c3a3537ea6bb2c27874e6f15b2dcda (diff)
downloadqmmp-f038e1af639dc9896bbc2a3dfcbb62f53a7853f2.tar.gz
qmmp-f038e1af639dc9896bbc2a3dfcbb62f53a7853f2.tar.bz2
qmmp-f038e1af639dc9896bbc2a3dfcbb62f53a7853f2.zip
enabled cdaudio plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7977 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/Input/Input.pro2
-rw-r--r--src/plugins/Input/cdaudio/decoder_cdaudio.cpp58
-rw-r--r--src/plugins/Input/cdaudio/decoder_cdaudio.h5
-rw-r--r--src/plugins/Input/cdaudio/decodercdaudiofactory.cpp13
-rw-r--r--src/plugins/Input/cdaudio/decodercdaudiofactory.h12
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);