Standard version: 1.5
Stereo motion pictures are now common, and various visual effects applications have been updated to include a stereo work flow. Typically this is done by embedding multiple views within an image stream.
The Foundry has implemented an unpublished extension to the OFX API in its Nuke compositing application to deal with multiple views within a clip. We are proposing cleaned up versions of these extensions to the OFX 2.0 Committee for adoption in the Image Effect API. It should work along side the Deep Images proposal.
An extra concept needs to be added to the API, which is a view, this a set of planes, for example the left view and the right view.
The basic idea behind this extension is orthogonal to the plane being fetched, as well as time. So when an effect fetches image data from the host it would specify the frame time, the view and the image plane to fetch, eg: the source clip's the colour plane of frame 10 of the left view.
The extensions will need supporting machinery, so that plug-ins advertise what views they process and need to render an output and so on.
The multi-view API would be an optional extension for host applications that support stereo streams.
An image stream in our proposed scheme is a fat hierarchical bundle of image data. Each clip has multiple frames, at each frame we have a set of views each of which consists of a set of image planes. The set of planes on each view are identical.
Not all effects need to be view aware, for example a simple blur plugin does not need to know which view is it being asked to process, it simply fetches the planes it is blurring, some parameter values and renders its outputs. View aware hosts have a straight forward problem to support such plugin.
View aware plug-ins are those that explicitly use images from more than one view to produce an output image. To enable such plug-ins to work, we need to extend the image effect API in a fairly straight forward manner,
All clips are considered to have all enumerated views, so that a plugin can fetch any view from any clip. A host may only have a single view available on that clip, in which case it should return the same image for either view. Unless a plugin sets itself to be view invariant it is expected that multiple calls to render will occur for each view.
A new, optional suite, OfxImageEffectViewSuite, will be needed to support this.
Views are passed around as indices, from 0 to nViews-1. The number and name of views can be recovered via functions on the view suite.
The one dimensional integer property kOfxImageEffectPropView is often used to identify a single view on various property sets.
A plugin and host advertise their view awareness via the descriptor property, kOfxImageEffectPropViewAware. This is a one dimensional integer property, set to zero if not view aware, or one if it is.
If this property does not exist on a descriptor (indicated by any of the property manipulation functions returning kOfxStatErrUnknown) then the corresponding host should not be considered view aware.