changeset 155:2b61e0cb6847 structure

Make path retrieval available directly in pipeline; some ctor/operator= fixes (hopefully to become obsolete later)
author Chris Cannam
date Fri, 23 Jan 2015 17:33:37 +0000
parents 4159f6b71942
children d6cdbd814c8c
files src/Finder.cpp src/MatchFeatureFeeder.cpp src/MatchFeatureFeeder.h src/MatchPipeline.cpp src/MatchPipeline.h src/MatchVampPlugin.cpp
diffstat 6 files changed, 45 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/Finder.cpp	Fri Jan 23 14:55:19 2015 +0000
+++ b/src/Finder.cpp	Fri Jan 23 17:33:37 2015 +0000
@@ -40,6 +40,7 @@
 void
 Finder::setMatcher(Matcher *pm)
 {
+    cerr << "Finder::setMatcher: finder " << this << ", matcher " << pm << endl;
     m_m = pm;
 }
 
@@ -56,6 +57,7 @@
 bool
 Finder::getBestRowCost(int row, int &bestCol, double &min)
 {
+    cerr << "Finder " << this << "::getBestRowCost(" << row << ")" << endl;
     if (!m_m->isRowAvailable(row)) {
         cerr << "row not available: " << row << endl;
         return false;
@@ -147,6 +149,8 @@
     int bestCol = col;
     double bestCost = -1;
 
+//    cerr << "Finder " << this << "::getExpandDirection: ";
+    
     getBestEdgeCost(row, col, bestRow, bestCol, bestCost);
 
 //    cerr << "at [" << row << "," << col << "] (cost " << m_m->getPathCost(row, col) << ") blocksize = " << m_m->getBlockSize() << " best is [" << bestRow << "," << bestCol << "] (cost " << bestCost << ")" << endl;
--- a/src/MatchFeatureFeeder.cpp	Fri Jan 23 14:55:19 2015 +0000
+++ b/src/MatchFeatureFeeder.cpp	Fri Jan 23 17:33:37 2015 +0000
@@ -29,6 +29,22 @@
     delete m_finder;
 }
 
+MatchFeatureFeeder::MatchFeatureFeeder(const MatchFeatureFeeder &other) :
+    m_pm1(other.m_pm1), m_pm2(other.m_pm2)
+{
+    //!!! This is gross. Finder should probably not be heap allocated at all
+    m_finder = new Finder(*other.m_finder);
+}
+
+MatchFeatureFeeder &
+MatchFeatureFeeder::operator=(const MatchFeatureFeeder &other)
+{
+    m_pm1 = other.m_pm1;
+    m_pm2 = other.m_pm2;
+    m_finder = new Finder(*other.m_finder);
+    return *this;
+}
+
 void
 MatchFeatureFeeder::setMatchers(Matcher *m1, Matcher *m2)
 {
--- a/src/MatchFeatureFeeder.h	Fri Jan 23 14:55:19 2015 +0000
+++ b/src/MatchFeatureFeeder.h	Fri Jan 23 17:33:37 2015 +0000
@@ -28,6 +28,9 @@
     MatchFeatureFeeder(Matcher *m1, Matcher *m2);
     ~MatchFeatureFeeder();
 
+    MatchFeatureFeeder(const MatchFeatureFeeder &other);
+    MatchFeatureFeeder &operator=(const MatchFeatureFeeder &other);
+    
     void setMatchers(Matcher *m1, Matcher *m2);
     
     /**
--- a/src/MatchPipeline.cpp	Fri Jan 23 14:55:19 2015 +0000
+++ b/src/MatchPipeline.cpp	Fri Jan 23 17:33:37 2015 +0000
@@ -131,21 +131,19 @@
 MatchPipeline::finish()
 {
     m_feeder.finish();
-    getFinder()->setDurations(m_lastFrameIn1, m_lastFrameIn2);
+    m_feeder.getFinder()->setDurations(m_lastFrameIn1, m_lastFrameIn2);
 }
 
-MatchFeatureFeeder *
-MatchPipeline::getFeeder()
+int
+MatchPipeline::retrievePath(bool smooth, std::vector<int> &pathx, std::vector<int> &pathy)
 {
-    return &m_feeder;
+    return m_feeder.getFinder()->retrievePath(smooth, pathx, pathy);
 }
 
-Finder *
-MatchPipeline::getFinder()
-{
-    return m_feeder.getFinder();
+void
+MatchPipeline::retrieveForwardPath(std::vector<int> &pathx, std::vector<int> &pathy) {
+    return m_feeder.retrieveForwardPath(pathx, pathy);
 }
 
 
 
-
--- a/src/MatchPipeline.h	Fri Jan 23 14:55:19 2015 +0000
+++ b/src/MatchPipeline.h	Fri Jan 23 17:33:37 2015 +0000
@@ -89,8 +89,20 @@
      */
     void finish();
 
-    MatchFeatureFeeder *getFeeder();
-    Finder *getFinder();
+    /**
+     * Retrieve the final path. Only valid once all the features have
+     * been supplied and finish() has been called.
+     *
+     * See Finder::retrievePath for more details.
+     */
+    int retrievePath(bool smooth, std::vector<int> &pathx, std::vector<int> &pathy);
+
+    /**
+     * Retrieve the forward path resulting from the online search.
+     *
+     * See MatchFeatureFeeder::retrieveForwardPath for more details.
+     */
+    void retrieveForwardPath(std::vector<int> &pathx, std::vector<int> &pathy);
     
 private:
     FeatureExtractor m_fe1;
--- a/src/MatchVampPlugin.cpp	Fri Jan 23 14:55:19 2015 +0000
+++ b/src/MatchVampPlugin.cpp	Fri Jan 23 17:33:37 2015 +0000
@@ -587,10 +587,9 @@
 
     FeatureSet returnFeatures;
     
-    Finder *finder = m_pipeline->getFinder();
     std::vector<int> pathx;
     std::vector<int> pathy;
-    int len = finder->retrievePath(m_smooth, pathx, pathy);
+    int len = m_pipeline->retrievePath(m_smooth, pathx, pathy);
 
     int prevx = 0;
     int prevy = 0;