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;