comparison MatchVampPlugin.cpp @ 30:7784b0a0dd4d

Put the retrievePath logic in Finder (was in the plugin itself)
author Chris Cannam
date Fri, 31 Oct 2014 15:42:40 +0000
parents 9f60d097f0b2
children 1ff9ae1dcb50
comparison
equal deleted inserted replaced
29:cd0ffe6b1e68 30:7784b0a0dd4d
482 } 482 }
483 483
484 MatchVampPlugin::FeatureSet 484 MatchVampPlugin::FeatureSet
485 MatchVampPlugin::getRemainingFeatures() 485 MatchVampPlugin::getRemainingFeatures()
486 { 486 {
487 int x = pm2->getFrameCount() - 1;
488 int y = pm1->getFrameCount() - 1;
489
490 Finder *finder = feeder->getFinder(); 487 Finder *finder = feeder->getFinder();
491
492 std::vector<int> pathx; 488 std::vector<int> pathx;
493 std::vector<int> pathy; 489 std::vector<int> pathy;
494 490 int len = finder->retrievePath(pathx, pathy);
495 // std::cerr << "initial x,y = " << x << std::endl; 491
496
497 while (finder->find(y, x) && ((x > 0) || (y > 0))) {
498
499 pathx.push_back(x);
500 pathy.push_back(y);
501
502 // std::cerr << pathx.size() << ": (" << x << "," << y << ")" << std::endl;
503
504 switch (finder->getDistance() & ADVANCE_BOTH) {
505 case ADVANCE_THIS: y--; break;
506 case ADVANCE_OTHER: x--; break;
507 case ADVANCE_BOTH: x--; y--; break;
508 default: // this would indicate a bug, but we wouldn't want to hang
509 std::cerr << "WARNING: MatchVampPlugin::getRemainingFeatures: Neither matcher advanced in path backtrack at (" << x << "," << y << ")" << std::endl;
510 if (x > y) x--; else y--; break;
511 }
512 }
513
514 std::reverse(pathx.begin(), pathx.end());
515 std::reverse(pathy.begin(), pathy.end());
516
517 int smoothedLen = Path().smooth(pathx, pathy, pathx.size());
518
519 FeatureSet returnFeatures; 492 FeatureSet returnFeatures;
520 493
521 int prevx = 0; 494 int prevx = 0;
522 int prevy = 0; 495 int prevy = 0;
523 496
524 for (int i = 0; i < smoothedLen; ++i) { 497 for (int i = 0; i < len; ++i) {
525 498
526 int x = pathx[i]; 499 int x = pathx[i];
527 int y = pathy[i]; 500 int y = pathy[i];
528 501
529 Vamp::RealTime xt = Vamp::RealTime::frame2RealTime 502 Vamp::RealTime xt = Vamp::RealTime::frame2RealTime
597 570
598 return returnFeatures; 571 return returnFeatures;
599 572
600 573
601 /* 574 /*
602 for (int i = 0; i < smoothedLen; ++i) { 575 for (int i = 0; i < len; ++i) {
603 std::cerr << i << ": [" << pathx[i] << "," << pathy[i] << "]" << std::endl; 576 std::cerr << i << ": [" << pathx[i] << "," << pathy[i] << "]" << std::endl;
604 } 577 }
605 578
606 std::cerr << std::endl; 579 std::cerr << std::endl;
607 std::cerr << "File: A" << std::endl; 580 std::cerr << "File: A" << std::endl;
615 std::cerr << "Marks: 0" << std::endl; 588 std::cerr << "Marks: 0" << std::endl;
616 std::cerr << "FixedPoints: true 0" << std::endl; 589 std::cerr << "FixedPoints: true 0" << std::endl;
617 std::cerr << "0.02" << std::endl; 590 std::cerr << "0.02" << std::endl;
618 std::cerr << "0.02" << std::endl; 591 std::cerr << "0.02" << std::endl;
619 592
620 std::cerr << smoothedLen << std::endl; 593 std::cerr << len << std::endl;
621 for (int i = 0; i < smoothedLen; ++i) { 594 for (int i = 0; i < len; ++i) {
622 std::cerr << pathx[i] << std::endl; 595 std::cerr << pathx[i] << std::endl;
623 } 596 }
624 597
625 std::cerr << smoothedLen << std::endl; 598 std::cerr << len << std::endl;
626 for (int i = 0; i < smoothedLen; ++i) { 599 for (int i = 0; i < len; ++i) {
627 std::cerr << pathy[i] << std::endl; 600 std::cerr << pathy[i] << std::endl;
628 } 601 }
629 */ 602 */
630 } 603 }
631 604