// forward declarations static OfxStatus render(OfxImageEffectHandle instance, OfxPropertySetHandle inArgs, OfxPropertySetHandle outArgs); static OfxStatus describe(OfxImageEffectHandle effect); static OfxStatus onLoad(void); static OfxStatus describeInContext( OfxImageEffectHandle effect, OfxPropertySetHandle inArgs) // The main entry point function static OfxStatus pluginMain(const char *action, const void *handle, OfxPropertySetHandle inArgs, OfxPropertySetHandle outArgs) { // cast to appropriate type OfxImageEffectHandle effect = (OfxImageEffectHandle) handle; // called as the very first action before any other if(strcmp(action, kOfxActionLoad) == 0) { return onLoad(); } // called to describe the plug-in else if(strcmp(action, kOfxActionDescribe) == 0) { return describe(effect); } // called to describe the plug-in in a given context else if(strcmp(action, kOfxImageEffectActionDescribeInContext) == 0) { return describeInContext(effect, inArgs); } // called to render a frame else if(strcmp(action, kOfxImageEffectActionRender) == 0) { return render(effect, inArgs, outArgs); } // all other actions return the default value return kOfxStatReplyDefault; }
The
pluginMain
was passed to the host int the
OfxPlugin
struct returned by
OfxGetPlugin
. This function is where the host tells the plug-in what it needs to do. You will note that the
actions
passed to the plug-in are encoded as strings. This makes actions easily extensible whilst minimising the chances of name clashing.
The function also takes a "handle" argument. This handle is the thing the action must be performed on. In this case, as we are an image effect, the handle must be cast to an OfxImageEffectHandle , which is simply a blind pointer to some host data representing an image effect.
The last two parameters
inArgs
and
outArgs
are used to pass in arguments for the specific action. These are encapsulated via blind property sets. The
inArgs
are extra arguments the action will need to do its job, whilst
outArgs
are for things the plug-in will need to set to do its action.
Our main entry only traps four of the many possible actions. The actual actions will be described below.