Mercurial > hg > match-vamp
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;