
<refentry id="OfxParameterSuiteV1">
  <refmeta>
    <refentrytitle><type>OfxParameterSuiteV1</type></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1</function></refname>
    <refpurpose>The OFX suite used to define and manipulate user visible parameters </refpurpose>
  </refnamediv>
  <refsynopsisdiv>
     <blockquote><programlisting>
#include "ofxParam.h"
typedef struct OfxParameterSuiteV1 {
  OfxStatus (*paramDefine)(OfxParamSetHandle paramSet,
			   const char *paramType,
			   const char *name,
			   OfxPropertySetHandle *propertySet);
  OfxStatus (*paramGetHandle)(OfxParamSetHandle paramSet,
			      const char *name,
			      OfxParamHandle *param,
			      OfxPropertySetHandle *propertySet);
  OfxStatus (*paramSetGetPropertySet)(OfxParamSetHandle paramSet,
				      OfxPropertySetHandle *propHandle);
  OfxStatus (*paramGetPropertySet)(OfxParamHandle param,
				   OfxPropertySetHandle *propHandle);
  OfxStatus (*paramGetValue)(OfxParamHandle  paramHandle,
			     ...);
  OfxStatus (*paramGetValueAtTime)(OfxParamHandle  paramHandle,
				   OfxTime time,
				   ...);
  OfxStatus (*paramGetDerivative)(OfxParamHandle  paramHandle,
				  OfxTime time,
				  ...);
  OfxStatus (*paramGetIntegral)(OfxParamHandle  paramHandle,
				OfxTime time1, OfxTime time2,
				...);
  OfxStatus (*paramSetValue)(OfxParamHandle  paramHandle,
			     ...);
  OfxStatus (*paramSetValueAtTime)(OfxParamHandle  paramHandle,
				   OfxTime time,  // time in frames
				   ...);
  OfxStatus (*paramGetNumKeys)(OfxParamHandle  paramHandle,
			       unsigned int  *numberOfKeys);
  OfxStatus (*paramGetKeyTime)(OfxParamHandle  paramHandle,
			       unsigned int nthKey,
			       OfxTime *time);
  OfxStatus (*paramGetKeyIndex)(OfxParamHandle  paramHandle,
				OfxTime time,
				int     direction,
				int    *index);
  OfxStatus (*paramDeleteKey)(OfxParamHandle  paramHandle,
			      OfxTime time);
  OfxStatus (*paramDeleteAllKeys)(OfxParamHandle  paramHandle);
  OfxStatus (*paramCopy)(OfxParamHandle  paramTo, OfxParamHandle  paramFrom, OfxTime dstOffset, const OfxRangeD *frameRange);
  OfxStatus (*paramEditBegin)(OfxParamSetHandle paramSet, const char *name); 
  OfxStatus (*paramEditEnd)(OfxParamSetHandle paramSet);
 } OfxParameterSuiteV1;

</programlisting></blockquote>
     </refsynopsisdiv>
    <refsect1>
      <title>Description</title>    </refsect1>
</refentry>

<refentry id="OfxParameterSuiteV1_paramDefine">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramDefine</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramDefine</function></refname>
       <refpurpose>Defines a new parameter of the given type in a describe action</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramDefine)</function></funcdef>
              <paramdef>OfxParamSetHandle<parameter>paramSet</parameter></paramdef>
              <paramdef>const char *<parameter>paramType</parameter></paramdef>
              <paramdef>const char *<parameter>name</parameter></paramdef>
              <paramdef>OfxPropertySetHandle *<parameter>propertySet</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramSet - handle to the parameter set descriptor that will hold this parameter
</listitem>
<listitem>paramType - type of the parameter to create, one of the kOfxParamType #defines
</listitem>
<listitem>name - unique name of the parameter
</listitem>
<listitem>propertySet - if not null, a pointer to the parameter descriptor's property set will be placed here.
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
This function defines a parameter in a parameter set and returns a property set which is used to describe that parameter.
</para>
<para>
This function does not actually create a parameter, it only says that one should exist in any subsequent instances. To fetch an
parameter instance paramGetHandle must be called on an instance.
</para>
<para>
This function can always be called in one of a plug-in's "describe" functions which defines the parameter sets common to all instances of a plugin.
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>             - the parameter was created correctly</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>   - if the plugin handle was invalid</listitem>
  <listitem><link linkend="kOfxStatErrExists"><code>kOfxStatErrExists</code></link>      - if a parameter of that name exists already in this plugin</listitem>
  <listitem><link linkend="kOfxStatErrUnknown"><code>kOfxStatErrUnknown</code></link>     - if the type is unknown</listitem>
  <listitem><link linkend="kOfxStatErrUnsupported"><code>kOfxStatErrUnsupported</code></link> - if the type is known but unsupported</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramGetHandle">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramGetHandle</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramGetHandle</function></refname>
       <refpurpose>Retrieves the handle for a parameter in a given parameter set</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramGetHandle)</function></funcdef>
              <paramdef>OfxParamSetHandle<parameter>paramSet</parameter></paramdef>
              <paramdef>const char *<parameter>name</parameter></paramdef>
              <paramdef>OfxParamHandle *<parameter>param</parameter></paramdef>
              <paramdef>OfxPropertySetHandle *<parameter>propertySet</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramSet - instance of the plug-in to fetch the property handle from
</listitem>
<listitem>name - parameter to ask about
</listitem>
<listitem>param - pointer to a param handle, the value is returned here
</listitem>
<listitem>propertySet - if not null, a pointer to the parameter's property set will be placed here.
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
Parameter handles retrieved from an instance are always distinct in each instance. The paramter handle is valid for the life-time of the instance. Parameter handles in instances are distinct from paramter handles in plugins. You cannot call this in a plugin's describe function, as it needs an instance to work on.
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - the parameter was found and returned</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the plugin handle was invalid</listitem>
  <listitem><link linkend="kOfxStatErrUnknown"><code>kOfxStatErrUnknown</code></link>    - if the type is unknown</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramSetGetPropertySet">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramSetGetPropertySet</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramSetGetPropertySet</function></refname>
       <refpurpose>Retrieves the property set handle for the given parameter set</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramSetGetPropertySet)</function></funcdef>
              <paramdef>OfxParamSetHandle<parameter>paramSet</parameter></paramdef>
              <paramdef>OfxPropertySetHandle *<parameter>propHandle</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramSet - parameter set to get the property set for
</listitem>
<listitem>propHandle - pointer to a the property set handle, value is returedn her
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
\note The property handle belonging to a parameter set is the same as the property handle belonging to the plugin instance.
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - the property set was found and returned</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the paramter handle was invalid</listitem>
  <listitem><link linkend="kOfxStatErrUnknown"><code>kOfxStatErrUnknown</code></link>    - if the type is unknown</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramGetPropertySet">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramGetPropertySet</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramGetPropertySet</function></refname>
       <refpurpose>Retrieves the property set handle for the given parameter</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramGetPropertySet)</function></funcdef>
              <paramdef>OfxParamHandle<parameter>param</parameter></paramdef>
              <paramdef>OfxPropertySetHandle *<parameter>propHandle</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>param - parameter to get the property set for
</listitem>
<listitem>propHandle - pointer to a the property set handle, value is returedn her
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
The property handle is valid for the lifetime of the parameter, which is the lifetime of the instance that owns the parameter
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - the property set was found and returned</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the paramter handle was invalid</listitem>
  <listitem><link linkend="kOfxStatErrUnknown"><code>kOfxStatErrUnknown</code></link>    - if the type is unknown</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramGetValue">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramGetValue</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramGetValue</function></refname>
       <refpurpose>Gets the current value of a parameter,</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramGetValue)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
              <paramdef><parameter>...</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to fetch value from
</listitem>
<listitem>... - one or more pointers to variables of the relevant type to hold the parameter's value
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
This gets the current value of a parameter. The varargs ... argument needs to be pointer to C variables
of the relevant type for this parameter. Note that params with multiple values (eg Colour) take
multiple args here. For example...
<programlisting>OfxParamHandle myDoubleParam, myColourParam;
ofxHost-&gt;paramGetHandle(instance, "myDoubleParam", &amp;myDoubleParam);
double myDoubleValue;
ofxHost-&gt;paramGetValue(myDoubleParam, &amp;myDoubleValue);
ofxHost-&gt;paramGetHandle(instance, "myColourParam", &amp;myColourParam);
double myR, myG, myB;
ofxHost-&gt;paramGetValue(myColourParam, &amp;myR, &amp;myG, &amp;myB);
</programlisting></para>
<para>
\note paramGetValue should only be called from within a <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> or interact action and never from the render actions (which should always use paramGetValueAtTime).
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramGetValueAtTime">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramGetValueAtTime</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramGetValueAtTime</function></refname>
       <refpurpose>Gets the value of a parameter at a specific time.</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramGetValueAtTime)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
              <paramdef>OfxTime<parameter>time</parameter></paramdef>
              <paramdef><parameter>...</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to fetch value from
</listitem>
<listitem>time - at what point in time to look up the parameter
</listitem>
<listitem>... - one or more pointers to variables of the relevant type to hold the parameter's value
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
This gets the current value of a parameter. The varargs needs to be pointer to C variables
of the relevant type for this parameter. See <link linkend="OfxParameterSuiteV1_paramGetValue"><code>OfxParameterSuiteV1::paramGetValue</code></link> for notes on
the varags list
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramGetDerivative">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramGetDerivative</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramGetDerivative</function></refname>
       <refpurpose>Gets the derivative of a parameter at a specific time.</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramGetDerivative)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
              <paramdef>OfxTime<parameter>time</parameter></paramdef>
              <paramdef><parameter>...</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to fetch value from
</listitem>
<listitem>time - at what point in time to look up the parameter
</listitem>
<listitem>... - one or more pointers to variables of the relevant type to hold the parameter's derivative
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
This gets the derivative of the parameter at the indicated time. 
</para>
<para>
The varargs needs to be pointer to C variables
of the relevant type for this parameter. See <link linkend="OfxParameterSuiteV1_paramGetValue"><code>OfxParameterSuiteV1::paramGetValue</code></link> for notes on
the varags list.
</para>
<para>
Only double and colour params can have their derivatives found.
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramGetIntegral">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramGetIntegral</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramGetIntegral</function></refname>
       <refpurpose>Gets the integral of a parameter over a specific time range,</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramGetIntegral)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
              <paramdef>OfxTime<parameter>time1</parameter></paramdef>
              <paramdef>OfxTime<parameter>time2</parameter></paramdef>
              <paramdef><parameter>...</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to fetch integral from
</listitem>
<listitem>time1 - where to start evaluating the integral
</listitem>
<listitem>time2 - where to stop evaluating the integral
</listitem>
<listitem>... - one or more pointers to variables of the relevant type to hold the parameter's integral
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
This gets the integral of the parameter over the specified time range.
</para>
<para>
The varargs needs to be pointer to C variables
of the relevant type for this parameter. See <link linkend="OfxParameterSuiteV1_paramGetValue"><code>OfxParameterSuiteV1::paramGetValue</code></link> for notes on
the varags list.
</para>
<para>
Only double and colour params can be integrated.
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramSetValue">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramSetValue</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramSetValue</function></refname>
       <refpurpose>Sets the current value of a parameter</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramSetValue)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
              <paramdef><parameter>...</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to set value in
</listitem>
<listitem>... - one or more variables of the relevant type to hold the parameter's value
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
This sets the current value of a parameter. The varargs ... argument needs to be values
of the relevant type for this parameter. Note that params with multiple values (eg Colour) take
multiple args here. For example...
<programlisting>ofxHost-&gt;paramSetValue(instance, "myDoubleParam", double(10));
ofxHost-&gt;paramSetValue(instance, "myColourParam", double(pix.r), double(pix.g), double(pix.b));
</programlisting></para>
<para>
\note paramSetValue should only be called from within a <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> or interact action.
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramSetValueAtTime">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramSetValueAtTime</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramSetValueAtTime</function></refname>
       <refpurpose>Keyframes the value of a parameter at a specific time.</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramSetValueAtTime)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
              <paramdef>OfxTime<parameter>time</parameter></paramdef>
              <paramdef><parameter>...</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to set value in
</listitem>
<listitem>time - at what point in time to set the keyframe
</listitem>
<listitem>... - one or more variables of the relevant type to hold the parameter's value
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
This sets a keyframe in the parameter at the indicated time to have the indicated value.
The varargs ... argument needs to be values of the relevant type for this parameter. See the note on 
<link linkend="OfxParameterSuiteV1_paramSetValue"><code>OfxParameterSuiteV1::paramSetValue</code></link> for more detail
</para>
<para>
\note paramSetValueAtTime should only be called from within a <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> or interact action.
</para>
<para>
V1.3: This function can be called the <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> action and during image effect analysis render passes.
V1.4: This function can be called the <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> action 
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramGetNumKeys">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramGetNumKeys</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramGetNumKeys</function></refname>
       <refpurpose>Returns the number of keyframes in the parameter</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramGetNumKeys)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
              <paramdef>unsigned int  *<parameter>numberOfKeys</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to interogate
</listitem>
<listitem>numberOfKeys - pointer to integer where the return value is placed
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
V1.3: This function can be called the <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> action and during image effect analysis render passes.
V1.4: This function can be called the <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> action 
</para>
<para>
Returns the number of keyframes in the parameter.
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramGetKeyTime">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramGetKeyTime</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramGetKeyTime</function></refname>
       <refpurpose>Returns the time of the nth key</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramGetKeyTime)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
              <paramdef>unsigned int<parameter>nthKey</parameter></paramdef>
              <paramdef>OfxTime *<parameter>time</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to interogate
</listitem>
<listitem>nthKey - which key to ask about (0 to paramGetNumKeys -1), ordered by time
</listitem>
<listitem>time - pointer to OfxTime where the return value is placed
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
  <listitem><link linkend="kOfxStatErrBadIndex"><code>kOfxStatErrBadIndex</code></link>   - the nthKey does not exist</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramGetKeyIndex">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramGetKeyIndex</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramGetKeyIndex</function></refname>
       <refpurpose>Finds the index of a keyframe at/before/after a specified time.</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramGetKeyIndex)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
              <paramdef>OfxTime<parameter>time</parameter></paramdef>
              <paramdef>int    <parameter>direction</parameter></paramdef>
              <paramdef>int    *<parameter>index</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to search
</listitem>
<listitem>time - what time to search from
</listitem>
<listitem>direction - 
<itemizedlist>
  <listitem>== 0 indicates search for a key at the indicated time (some small delta)</listitem>
  <listitem>&gt; 0 indicates search for the next key after the indicated time</listitem>
  <listitem>&lt; 0 indicates search for the previous key before the indicated time</listitem>
</itemizedlist>
</listitem>
<listitem>index - pointer to an integer which in which the index is returned set to -1 if no key was found
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>            - all was OK</listitem>
  <listitem><link linkend="kOfxStatFailed"><code>kOfxStatFailed</code></link>        - if the search failed to find a key</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramDeleteKey">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramDeleteKey</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramDeleteKey</function></refname>
       <refpurpose>Deletes a keyframe if one exists at the given time.</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramDeleteKey)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
              <paramdef>OfxTime<parameter>time</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to delete the key from
</listitem>
<listitem>time - time at which a keyframe is
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
  <listitem><link linkend="kOfxStatErrBadIndex"><code>kOfxStatErrBadIndex</code></link>   - no key at the given time</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramDeleteAllKeys">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramDeleteAllKeys</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramDeleteAllKeys</function></refname>
       <refpurpose>Deletes all keyframes from a parameter.</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramDeleteAllKeys)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramHandle</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramHandle - parameter handle to delete the keys from
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
V1.3: This function can be called the <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> action and during image effect analysis render passes.
V1.4: This function can be called the <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> action 
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>

<refentry id="OfxParameterSuiteV1_paramCopy">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramCopy</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramCopy</function></refname>
       <refpurpose>Copies one parameter to another, including any animation etc...</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramCopy)</function></funcdef>
              <paramdef>OfxParamHandle <parameter>paramTo</parameter></paramdef>
              <paramdef>OfxParamHandle <parameter>paramFrom</parameter></paramdef>
              <paramdef>OfxTime<parameter>dstOffset</parameter></paramdef>
              <paramdef>const OfxRangeD *<parameter>frameRange</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramTo - parameter to set
</listitem>
<listitem>paramFrom - parameter to copy from
</listitem>
<listitem>dstOffset - temporal offset to apply to keys when writing to the paramTo
</listitem>
<listitem>frameRange - if paramFrom has animation, and frameRange is not null, only this range of keys will be copied
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
This copies the value of <emphasis> paramFrom</emphasis> to <emphasis> paramTo</emphasis>, including any animation it may have. All the previous values in <emphasis> paramTo</emphasis> will be lost.
</para>
<para>
To choose all animation in <emphasis> paramFrom</emphasis> set <emphasis> frameRange</emphasis> to [0, 0]
</para>
<para>
V1.3: This function can be called the <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> action and during image effect analysis render passes.
V1.4: This function can be called the <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> action 
</para>
<para>
\pre

<itemizedlist>
  <listitem>Both parameters must be of the same type.</listitem>
</itemizedlist>
</para>
<para>
\return

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the parameter handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>

</refentry>

<refentry id="OfxParameterSuiteV1_paramEditBegin">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramEditBegin</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramEditBegin</function></refname>
       <refpurpose>Used to group any parameter changes for undo/redo purposes</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramEditBegin)</function></funcdef>
              <paramdef>OfxParamSetHandle<parameter>paramSet</parameter></paramdef>
              <paramdef>const char *<parameter>name</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramSet - the parameter set in which this is happening
</listitem>
<listitem>name - label to attach to any undo/redo string UTF8
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
If a plugin calls paramSetValue/paramSetValueAtTime on one or more parameters, either from custom GUI interaction
or some analysis of imagery etc.. this is used to indicate the start of a set of a parameter
changes that should be considered part of a single undo/redo block.
</para>
<para>
\note paramEditBegin should only be called from within a <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> or interact action.
</para>
<para>
See also <link linkend="OfxParameterSuiteV1_paramEditEnd"><code>OfxParameterSuiteV1::paramEditEnd</code></link>
</para>
<para>
\return

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the instance handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>

</refentry>

<refentry id="OfxParameterSuiteV1_paramEditEnd">
  <refmeta>
    <refentrytitle><function>OfxParameterSuiteV1::paramEditEnd</function></refentrytitle>
  </refmeta>
  <refnamediv>
    <refname><function>OfxParameterSuiteV1::paramEditEnd</function></refname>
       <refpurpose>Used to group any parameter changes for undo/redo purposes</refpurpose>
  </refnamediv>
  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include "ofxParam.h" </funcsynopsisinfo>
      <funcprototype>
        <funcdef><typename>OfxStatus</typename><function>(*paramEditEnd)</function></funcdef>
              <paramdef>OfxParamSetHandle<parameter>paramSet</parameter></paramdef>
        </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect2>
   <title>Arguments</title>
   <itemizedlist>

<listitem>paramSet - the parameter set in which this is happening
</listitem>
    </itemizedlist>
  </refsect2>
  <refsect2>
    <title>Description</title>
      <para>
If a plugin calls paramSetValue/paramSetValueAtTime on one or more parameters, either from custom GUI interaction
or some analysis of imagery etc.. this is used to indicate the end of a set of parameter
changes that should be considerred part of a single undo/redo block
</para>
<para>
\note paramEditEnd should only be called from within a <link linkend="kOfxActionInstanceChanged"><code>kOfxActionInstanceChanged</code></link> or interact action.
</para>
<para>
See also <link linkend="OfxParameterSuiteV1_paramEditBegin"><code>OfxParameterSuiteV1::paramEditBegin</code></link>
</para>

  </refsect2>

  <refsect2>
    <title>Returns</title>
      <para>

<itemizedlist>
  <listitem><link linkend="kOfxStatOK"><code>kOfxStatOK</code></link>       - all was OK</listitem>
  <listitem><link linkend="kOfxStatErrBadHandle"><code>kOfxStatErrBadHandle</code></link>  - if the instance handle was invalid</listitem>
</itemizedlist>
</para>

  </refsect2>
</refentry>
