diff src/vamp-hostsdk/PluginBufferingAdapter.cpp @ 287:f3b1ba71a305

* When calculating timestamps in order to write them into features that previously lacked them, from a buffering adapter, we need to take into account any timestamp adjustment used by other wrappers that are being wrapped by this one (i.e. input domain adapter)
author cannam
date Thu, 10 Sep 2009 15:21:34 +0000
parents e0b7a35ea18e
children c97e70ed5abc
line wrap: on
line diff
--- a/src/vamp-hostsdk/PluginBufferingAdapter.cpp	Thu Sep 10 13:24:26 2009 +0000
+++ b/src/vamp-hostsdk/PluginBufferingAdapter.cpp	Thu Sep 10 15:21:34 2009 +0000
@@ -39,6 +39,7 @@
 #include <map>
 
 #include <vamp-hostsdk/PluginBufferingAdapter.h>
+#include <vamp-hostsdk/PluginInputDomainAdapter.h>
 
 using std::vector;
 using std::map;
@@ -652,6 +653,14 @@
 
     FeatureSet featureSet = m_plugin->process(m_buffers, timestamp);
     
+    PluginWrapper *wrapper = dynamic_cast<PluginWrapper *>(m_plugin);
+    RealTime adjustment;
+    if (wrapper) {
+        PluginInputDomainAdapter *ida =
+            wrapper->getWrapper<PluginInputDomainAdapter>();
+        if (ida) adjustment = ida->getTimestampAdjustment();
+    }
+
     for (FeatureSet::iterator iter = featureSet.begin();
          iter != featureSet.end(); ++iter) {
 
@@ -667,14 +676,14 @@
 
                 case OutputDescriptor::OneSamplePerStep:
                     // use our internal timestamp, always
-                    featureList[i].timestamp = timestamp;
+                    featureList[i].timestamp = timestamp + adjustment;
                     featureList[i].hasTimestamp = true;
                     break;
 
                 case OutputDescriptor::FixedSampleRate:
                     // use our internal timestamp if feature lacks one
                     if (!featureList[i].hasTimestamp) {
-                        featureList[i].timestamp = timestamp;
+                        featureList[i].timestamp = timestamp + adjustment;
                         featureList[i].hasTimestamp = true;
                     }
                     break;