summaryrefslogtreecommitdiffstats
path: root/src/widget
diff options
context:
space:
mode:
authorUwe Klotz <uklotz@mixxx.org>2018-04-18 16:39:07 +0200
committerUwe Klotz <uklotz@mixxx.org>2018-10-30 23:26:56 +0100
commitc236956884e3c7b9a47536f98eb7eb5a126a26e4 (patch)
tree85ea9323501bb2f5176c35679e2307e50eeed49c /src/widget
parentdb7fe92a9a5c63e0d9b6f0fe6f1ad379f2b0b46a (diff)
Fix and enable multi-threaded analysis
Diffstat (limited to 'src/widget')
-rw-r--r--src/widget/woverview.cpp61
-rw-r--r--src/widget/woverview.h18
-rw-r--r--src/widget/woverviewhsv.cpp9
-rw-r--r--src/widget/woverviewhsv.h6
-rw-r--r--src/widget/woverviewlmh.cpp9
-rw-r--r--src/widget/woverviewlmh.h6
-rw-r--r--src/widget/woverviewrgb.cpp9
-rw-r--r--src/widget/woverviewrgb.h6
8 files changed, 75 insertions, 49 deletions
diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp
index 4872d950f0..8f17c3f4a5 100644
--- a/src/widget/woverview.cpp
+++ b/src/widget/woverview.cpp
@@ -26,6 +26,7 @@
#include "wskincolor.h"
#include "widget/controlwidgetconnection.h"
#include "track/track.h"
+#include "analyzer/analyzerprogress.h"
#include "util/math.h"
#include "util/timer.h"
#include "util/dnd.h"
@@ -33,13 +34,17 @@
#include "waveform/waveform.h"
#include "waveform/waveformwidgetfactory.h"
-WOverview::WOverview(const char *pGroup, UserSettingsPointer pConfig, QWidget* parent) :
+WOverview::WOverview(
+ const char* group,
+ PlayerManager* pPlayerManager,
+ UserSettingsPointer pConfig,
+ QWidget* parent) :
WWidget(parent),
m_actualCompletion(0),
m_pixmapDone(false),
m_waveformPeak(-1.0),
m_diffGain(0),
- m_group(pGroup),
+ m_group(group),
m_pConfig(pConfig),
m_endOfTrack(false),
m_bDrag(false),
@@ -47,8 +52,7 @@ WOverview::WOverview(const char *pGroup, UserSettingsPointer pConfig, QWidget* p
m_orientation(Qt::Horizontal),
m_a(1.0),
m_b(0.0),
- m_dAnalyzerProgress(1.0),
- m_bAnalyzerFinalizing(false),
+ m_analyzerProgress(kAnalyzerProgressUnknown),
m_trackLoaded(false),
m_scaleFactor(1.0) {
m_endOfTrackControl = new ControlProxy(
@@ -59,6 +63,9 @@ WOverview::WOverview(const char *pGroup, UserSettingsPointer pConfig, QWidget* p
new ControlProxy(m_group, "track_samples", this);
m_playControl = new ControlProxy(m_group, "play", this);
setAcceptDrops(true);
+
+ connect(pPlayerManager, SIGNAL(trackAnalyzerProgress(TrackId, AnalyzerProgress)),
+ this, SLOT(onTrackAnalyzerProgress(TrackId, AnalyzerProgress)));
}
void WOverview::setup(const QDomNode& node, const SkinContext& context) {
@@ -172,7 +179,7 @@ void WOverview::slotWaveformSummaryUpdated() {
} else {
// Null waveform pointer means waveform was cleared.
m_waveformSourceImage = QImage();
- m_dAnalyzerProgress = 1.0;
+ m_analyzerProgress = kAnalyzerProgressUnknown;
m_actualCompletion = 0;
m_waveformPeak = -1.0;
m_pixmapDone = false;
@@ -181,19 +188,14 @@ void WOverview::slotWaveformSummaryUpdated() {
}
}
-void WOverview::slotAnalyzerProgress(int progress) {
- if (!m_pCurrentTrack) {
+void WOverview::onTrackAnalyzerProgress(TrackId trackId, AnalyzerProgress analyzerProgress) {
+ if (!m_pCurrentTrack || (m_pCurrentTrack->getId() != trackId)) {
return;
}
- double analyzerProgress = progress / 1000.0;
- bool finalizing = progress == 999;
-
bool updateNeeded = drawNextPixmapPart();
- // progress 0 .. 1000
- if (updateNeeded || (m_dAnalyzerProgress != analyzerProgress)) {
- m_dAnalyzerProgress = analyzerProgress;
- m_bAnalyzerFinalizing = finalizing;
+ if (updateNeeded || (m_analyzerProgress != analyzerProgress)) {
+ m_analyzerProgress = analyzerProgress;
update();
}
}
@@ -210,12 +212,10 @@ void WOverview::slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack)
if (m_pCurrentTrack != nullptr) {
disconnect(m_pCurrentTrack.get(), SIGNAL(waveformSummaryUpdated()),
this, SLOT(slotWaveformSummaryUpdated()));
- disconnect(m_pCurrentTrack.get(), SIGNAL(analyzerProgress(int)),
- this, SLOT(slotAnalyzerProgress(int)));
}
m_waveformSourceImage = QImage();
- m_dAnalyzerProgress = 1.0;
+ m_analyzerProgress = kAnalyzerProgressUnknown;
m_actualCompletion = 0;
m_waveformPeak = -1.0;
m_pixmapDone = false;
@@ -228,10 +228,6 @@ void WOverview::slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack)
connect(pNewTrack.get(), SIGNAL(waveformSummaryUpdated()),
this, SLOT(slotWaveformSummaryUpdated()));
- connect(pNewTrack.get(), SIGNAL(analyzerProgress(int)),
- this, SLOT(slotAnalyzerProgress(int)));
-
- slotAnalyzerProgress(pNewTrack->getAnalyzerProgress());
} else {
m_pCurrentTrack.reset();
m_pWaveform.clear();
@@ -350,21 +346,28 @@ void WOverview::paintEvent(QPaintEvent * /*unused*/) {
}
}
- if (m_dAnalyzerProgress < 1.0) {
+ if ((m_analyzerProgress >= kAnalyzerProgressNone) &&
+ (m_analyzerProgress < kAnalyzerProgressDone)) {
// Paint analyzer Progress
painter.setPen(QPen(m_signalColors.getAxesColor(), 3 * m_scaleFactor));
- if (m_dAnalyzerProgress > 0.0) {
+ if (m_analyzerProgress > kAnalyzerProgressNone) {
if (m_orientation == Qt::Horizontal) {
- painter.drawLine(m_dAnalyzerProgress * width(), height() / 2,
- width(), height() / 2);
+ painter.drawLine(
+ width() * m_analyzerProgress,
+ height() / 2,
+ width(),
+ height() / 2);
} else {
- painter.drawLine(width() / 2 , m_dAnalyzerProgress * height(),
- width() / 2, height());
+ painter.drawLine(
+ width() / 2 ,
+ height() * m_analyzerProgress,
+ width() / 2,
+ height());
}
}
- if (m_dAnalyzerProgress <= 0.5) { // remove text after progress by wf is recognizable
+ if (m_analyzerProgress <= kAnalyzerProgressHalf) { // remove text after progress by wf is recognizable
if (m_trackLoaded) {
//: Text on waveform overview when file is playable but no waveform is visible
paintText(tr("Ready to play, analyzing .."), &painter);
@@ -372,7 +375,7 @@ void WOverview::paintEvent(QPaintEvent * /*unused*/) {
//: Text on waveform overview when file is cached from source
paintText(tr("Loading track .."), &painter);
}
- } else if (m_bAnalyzerFinalizing) {
+ } else if (m_analyzerProgress >= kAnalyzerProgressFinalizing) {
//: Text on waveform overview during finalizing of waveform analysis
paintText(tr("Finalizing .."), &painter);
}
diff --git a/src/widget/woverview.h b/src/widget/woverview.h
index 952caf7513..625a5bbf26 100644
--- a/src/widget/woverview.h
+++ b/src/widget/woverview.h
@@ -20,32 +20,36 @@
#include "track/track.h"
#include "widget/wwidget.h"
+#include "analyzer/analyzerprogress.h"
#include "waveform/renderers/waveformsignalcolors.h"
#include "waveform/renderers/waveformmarkset.h"
#include "waveform/renderers/waveformmarkrange.h"
#include "skin/skincontext.h"
-// Waveform overview display
-// @author Tue Haste Andersen
-class Waveform;
+class PlayerManager;
class WOverview : public WWidget {
Q_OBJECT
public:
- WOverview(const char* pGroup, UserSettingsPointer pConfig, QWidget* parent=nullptr);
-
void setup(const QDomNode& node, const SkinContext& context);
public slots:
void onConnectedControlChanged(double dParameter, double dValue) override;
void slotTrackLoaded(TrackPointer pTrack);
void slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack);
+ void onTrackAnalyzerProgress(TrackId trackId, AnalyzerProgress analyzerProgress);
signals:
void trackDropped(QString filename, QString group);
protected:
+ WOverview(
+ const char* group,
+ PlayerManager* pPlayerManager,
+ UserSettingsPointer pConfig,
+ QWidget* parent = nullptr);
+
void mouseMoveEvent(QMouseEvent *e) override;
void mouseReleaseEvent(QMouseEvent *e) override;
void mousePressEvent(QMouseEvent *e) override;
@@ -86,7 +90,6 @@ class WOverview : public WWidget {
void onMarkRangeChange(double v);
void slotWaveformSummaryUpdated();
- void slotAnalyzerProgress(int progress);
private:
// Append the waveform overview pixmap according to available data in waveform
@@ -129,8 +132,7 @@ class WOverview : public WWidget {
double m_a;
double m_b;
- double m_dAnalyzerProgress;
- bool m_bAnalyzerFinalizing;
+ AnalyzerProgress m_analyzerProgress;
bool m_trackLoaded;
double m_scaleFactor;
};
diff --git a/src/widget/woverviewhsv.cpp b/src/widget/woverviewhsv.cpp
index e125737f3c..00e830ceda 100644
--- a/src/widget/woverviewhsv.cpp
+++ b/src/widget/woverviewhsv.cpp
@@ -7,9 +7,12 @@
#include "util/math.h"
#include "waveform/waveform.h"
-WOverviewHSV::WOverviewHSV(const char* pGroup,
- UserSettingsPointer pConfig, QWidget* parent)
- : WOverview(pGroup, pConfig, parent) {
+WOverviewHSV::WOverviewHSV(
+ const char* group,
+ PlayerManager* pPlayerManager,
+ UserSettingsPointer pConfig,
+ QWidget* parent)
+ : WOverview(group, pPlayerManager, pConfig, parent) {
}
bool WOverviewHSV::drawNextPixmapPart() {
diff --git a/src/widget/woverviewhsv.h b/src/widget/woverviewhsv.h
index e6f85d5fd3..7b59639c65 100644
--- a/src/widget/woverviewhsv.h
+++ b/src/widget/woverviewhsv.h
@@ -5,7 +5,11 @@
class WOverviewHSV : public WOverview {
public:
- WOverviewHSV(const char *pGroup, UserSettingsPointer pConfig, QWidget* parent);
+ WOverviewHSV(
+ const char* group,
+ PlayerManager* pPlayerManager,
+ UserSettingsPointer pConfig,
+ QWidget* parent = nullptr);
private:
bool drawNextPixmapPart() override;
diff --git a/src/widget/woverviewlmh.cpp b/src/widget/woverviewlmh.cpp
index bf838f2e33..833b86339c 100644
--- a/src/widget/woverviewlmh.cpp
+++ b/src/widget/woverviewlmh.cpp
@@ -8,9 +8,12 @@
#include "util/math.h"
#include "waveform/waveform.h"
-WOverviewLMH::WOverviewLMH(const char *pGroup,
- UserSettingsPointer pConfig, QWidget * parent)
- : WOverview(pGroup, pConfig, parent) {
+WOverviewLMH::WOverviewLMH(
+ const char* group,
+ PlayerManager* pPlayerManager,
+ UserSettingsPointer pConfig,
+ QWidget* parent)
+ : WOverview(group, pPlayerManager, pConfig, parent) {
}
diff --git a/src/widget/woverviewlmh.h b/src/widget/woverviewlmh.h
index e144f76489..c6ed4cb16f 100644
--- a/src/widget/woverviewlmh.h
+++ b/src/widget/woverviewlmh.h
@@ -5,7 +5,11 @@
class WOverviewLMH : public WOverview {
public:
- WOverviewLMH(const char *pGroup, UserSettingsPointer pConfig, QWidget* parent);
+ WOverviewLMH(
+ const char* group,
+ PlayerManager* pPlayerManager,
+ UserSettingsPointer pConfig,
+ QWidget* parent = nullptr);
private:
bool drawNextPixmapPart() override;
diff --git a/src/widget/woverviewrgb.cpp b/src/widget/woverviewrgb.cpp
index 6a4c348efc..e6519da967 100644
--- a/src/widget/woverviewrgb.cpp
+++ b/src/widget/woverviewrgb.cpp
@@ -6,9 +6,12 @@
#include "util/math.h"
#include "waveform/waveform.h"
-WOverviewRGB::WOverviewRGB(const char* pGroup,
- UserSettingsPointer pConfig, QWidget* parent)
- : WOverview(pGroup, pConfig, parent) {
+WOverviewRGB::WOverviewRGB(
+ const char* group,
+ PlayerManager* pPlayerManager,
+ UserSettingsPointer pConfig,
+ QWidget* parent)
+ : WOverview(group, pPlayerManager, pConfig, parent) {
}
bool WOverviewRGB::drawNextPixmapPart() {
diff --git a/src/widget/woverviewrgb.h b/src/widget/woverviewrgb.h
index 646886e442..3a9382efca 100644
--- a/src/widget/woverviewrgb.h
+++ b/src/widget/woverviewrgb.h
@@ -5,7 +5,11 @@
class WOverviewRGB : public WOverview {
public:
- WOverviewRGB(const char *pGroup, UserSettingsPointer pConfig, QWidget* parent);
+ WOverviewRGB(
+ const char* group,
+ PlayerManager* pPlayerManager,
+ UserSettingsPointer pConfig,
+ QWidget* parent = nullptr);
private:
bool drawNextPixmapPart() override;