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