aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General/rgscan
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/General/rgscan')
-rw-r--r--src/plugins/General/rgscan/rgscandialog.cpp4
-rw-r--r--src/plugins/General/rgscan/rgscaner.cpp13
-rw-r--r--src/plugins/General/rgscan/rgscaner.h4
3 files changed, 19 insertions, 2 deletions
diff --git a/src/plugins/General/rgscan/rgscandialog.cpp b/src/plugins/General/rgscan/rgscandialog.cpp
index a55d4882b..46f36a39a 100644
--- a/src/plugins/General/rgscan/rgscandialog.cpp
+++ b/src/plugins/General/rgscan/rgscandialog.cpp
@@ -83,6 +83,7 @@ void RGScanDialog::onScanFinished(QString url)
if(url != m_ui.tableWidget->item(i, 0)->data(Qt::UserRole).toString())
continue;
m_ui.tableWidget->setItem(i, 2, new QTableWidgetItem(QString::number(m_scaners.at(i)->gain())));
+ m_ui.tableWidget->setItem(i, 4, new QTableWidgetItem(QString::number(m_scaners.at(i)->peak())));
}
bool stopped = true;
@@ -98,12 +99,14 @@ void RGScanDialog::onScanFinished(QString url)
qDebug("RGScanDialog: all threads finished");
QThreadPool::globalInstance()->waitForDone();
+ double album_peak = 0.;
GainHandle_t **a = (GainHandle_t **) malloc(m_scaners.count()*sizeof(GainHandle_t *));
for(int i = 0; i < m_scaners.count(); ++i)
{
a[i] = m_scaners.at(i)->handle();
+ album_peak = qMax(m_scaners.at(i)->peak(), album_peak);
}
double album_gain = GetAlbumGain(a, m_scaners.count());
@@ -112,6 +115,7 @@ void RGScanDialog::onScanFinished(QString url)
for(int i = 0; i < m_ui.tableWidget->rowCount(); ++i)
{
m_ui.tableWidget->setItem(i, 3, new QTableWidgetItem(QString::number(album_gain)));
+ m_ui.tableWidget->setItem(i, 5, new QTableWidgetItem(QString::number(album_peak)));
}
qDeleteAll(m_scaners);
diff --git a/src/plugins/General/rgscan/rgscaner.cpp b/src/plugins/General/rgscan/rgscaner.cpp
index fc46142e9..069a4e0da 100644
--- a/src/plugins/General/rgscan/rgscaner.cpp
+++ b/src/plugins/General/rgscan/rgscaner.cpp
@@ -29,6 +29,7 @@
RGScaner::RGScaner()
{
m_gain = 0.;
+ m_peak = 0.;
m_user_stop = false;
m_is_running = false;
m_handle = 0;
@@ -118,11 +119,16 @@ bool RGScaner::isRunning()
return m_is_running;
}
-double RGScaner::gain()
+double RGScaner::gain() const
{
return m_gain;
}
+double RGScaner::peak() const
+{
+ return m_peak;
+}
+
GainHandle_t *RGScaner::handle()
{
return m_handle;
@@ -142,6 +148,7 @@ void RGScaner::run()
qint64 total = 0;
qint64 len = 0;
qint64 totalSize = m_decoder->totalTime() * ap.sampleRate() * ap.channels() * ap.sampleSize() / 1000;
+ qint32 max = 0;
double out_left[buf_size/4];
double out_right[buf_size/4];
@@ -169,6 +176,8 @@ void RGScaner::run()
{
out_left[i] = ((short *) output_buf)[i*2];
out_right[i] = ((short *) output_buf)[i*2+1];
+ max = qMax(abs(out_left[i]), max);
+ max = qMax(abs(out_right[i]), max);
}
AnalyzeSamples(m_handle, out_left, out_right, len/4, 2);
@@ -187,6 +196,8 @@ void RGScaner::run()
}
m_gain = GetTitleGain(m_handle);
+ m_peak = max / 32768.0;
+ qDebug("peak = %f", m_peak);
qDebug("RGScaner: thread %ld finished", QThread::currentThreadId());
m_is_running = false;
emit progress(100);
diff --git a/src/plugins/General/rgscan/rgscaner.h b/src/plugins/General/rgscan/rgscaner.h
index b08794097..79c2b058e 100644
--- a/src/plugins/General/rgscan/rgscaner.h
+++ b/src/plugins/General/rgscan/rgscaner.h
@@ -44,7 +44,8 @@ public:
bool prepare(const QString &url);
void stop();
bool isRunning();
- double gain();
+ double gain() const;
+ double peak() const;
GainHandle_t *handle();
signals:
@@ -60,6 +61,7 @@ private:
bool m_is_running;
QString m_url;
double m_gain;
+ double m_peak;
GainHandle_t *m_handle;
};