Mercurial > hg > match-vamp
changeset 66:61c7d11ba86d refactors_no_float
Fix handling of path lookup in case where the expected end point (end of silence in both files) is not available
author | Chris Cannam |
---|---|
date | Tue, 18 Nov 2014 10:31:37 +0000 |
parents | a540137d393b |
children | a3efb15e7faf 7aa1ab3db7c9 |
files | src/Finder.cpp |
diffstat | 1 files changed, 19 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/Finder.cpp Tue Nov 18 10:03:36 2014 +0000 +++ b/src/Finder.cpp Tue Nov 18 10:31:37 2014 +0000 @@ -258,8 +258,13 @@ int Finder::retrievePath(bool smooth, vector<int> &pathx, vector<int> &pathy) { - int x = pm2->getFrameCount() - 1; - int y = pm1->getFrameCount() - 1; + int ex = pm2->getFrameCount() - 1; + int ey = pm1->getFrameCount() - 1; + + int x = ex; + int y = ey; + +// cerr << "before: x = " << x << ", y = " << y << endl; if (duration2 > 0 && duration2 < pm2->getFrameCount()) { x = duration2 - 1; @@ -268,11 +273,23 @@ y = duration1 - 1; } + if (!find(y, x)) { + // Path did not pass through the expected end point -- + // probably means the pieces are substantially different in + // the later bits. Reset the expected end point to the end of + // both files including any trailing silence. + cerr << "NOTE: Path did not pass through expected end point, inputs are probably significantly different" << endl; + x = ex; + y = ey; + } + recalculatePathCostMatrix(0, 0, y, x); pathx.clear(); pathy.clear(); +// cerr << "start: x = " << x << ", y = " << y << endl; + while (find(y, x) && ((x > 0) || (y > 0))) { // cerr << "x = " << x << ", y = " << y;