diff vamp-hostsdk/PluginInputDomainAdapter.h @ 288:283e15f6e548

* The beginnings of making the shift-timestamp or shift-data behaviour of PluginInputDomainAdapter into an option
author cannam
date Tue, 15 Sep 2009 16:24:53 +0000
parents 4454843ff384
children c97e70ed5abc
line wrap: on
line diff
--- a/vamp-hostsdk/PluginInputDomainAdapter.h	Thu Sep 10 15:21:34 2009 +0000
+++ b/vamp-hostsdk/PluginInputDomainAdapter.h	Tue Sep 15 16:24:53 2009 +0000
@@ -91,6 +91,7 @@
     virtual ~PluginInputDomainAdapter();
     
     bool initialise(size_t channels, size_t stepSize, size_t blockSize);
+    void reset();
 
     InputDomain getInputDomain() const;
 
@@ -100,6 +101,48 @@
     FeatureSet process(const float *const *inputBuffers, RealTime timestamp);
 
     /**
+     * ProcessTimestampMethod determines how the
+     * PluginInputDomainAdapter handles timestamps for the data passed
+     * to the process() function of the plugin it wraps, in the case
+     * where the plugin is expecting frequency-domain data.
+     *
+     *
+     * The Vamp API mandates that the timestamp passed to the plugin
+     * for time-domain input should be the time of the first sample in
+     * the block, but the timestamp passed for frequency-domain input
+     * should be the timestamp of the centre of the block.
+     *
+     * Since we claim to permit the code that uses this plugin wrapper
+     * not to care whether the plugin itself has time or frequency
+     * domain input, that means that we need to ensure this timestamp
+     * is correctly adjusted ourselves, and the way we handle this is
+     * controlled by the ProcessTimestampMethod.
+     *
+     * If ProcessTimestampMethod is ShiftTimestamp (the default), then
+     * the data passed to the wrapped plugin will be calculated from
+     * the same input data block as passed to the wrapper, but the
+     * timestamp passed to the plugin will be advanced by half of the
+     * window size.
+     * 
+     * If ProcessTimestampMethod is ShiftData, then the timestamp
+     * passed to the wrapped plugin will be the same as that passed to
+     * the process call of the wrapper, but the data block used to
+     * calculate the input will be shifted back (earlier) by half of
+     * the window size, with half a block of padding at the start of
+     * the first process call.
+     *
+     * This function must be called before the first call to
+     * process().
+     */
+    enum ProcessTimestampMethod {
+        ShiftTimestamp,
+        ShiftData
+    };
+
+    void setProcessTimestampMethod(ProcessTimestampMethod);
+    ProcessTimestampMethod getProcessTimestampMethod() const;
+
+    /**
      * Return the amount by which the timestamps supplied to process()
      * are being incremented when they are passed to the plugin's own
      * process() implementation.
@@ -116,9 +159,13 @@
      * timestamps) the host may need to be aware that this adjustment
      * is taking place.
      *
-     * If the plugin requires time-domain input, this function will
-     * return zero.  The result of calling this function before
-     * initialise() has been called is undefined.
+     * If the plugin requires time-domain input or the
+     * PluginInputDomainAdapter is configured with its
+     * ProcessTimestampMethod set to ShiftData instead of
+     * ShiftTimestamp, then this function will return zero.
+     *
+     * The result of calling this function before initialise() has
+     * been called is undefined.
      */
     RealTime getTimestampAdjustment() const;