aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/cdaudio/decoder_cdaudio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Input/cdaudio/decoder_cdaudio.cpp')
-rw-r--r--src/plugins/Input/cdaudio/decoder_cdaudio.cpp58
1 files changed, 34 insertions, 24 deletions
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;