tmModule Functions

Fill in 0 for any unsupported calls. Thread safety is defined per-module, only a single thread will enter a module at a time.

Member

Description

Startup










Initialize a transmitter, fill in basic plugin info, allocate memory to hold user settings and other data.

::

tmResult (*Startup)(
tmStdParms* ioStdParms,
tmPluginInfo* outPluginInfo);

tmResult_ContinueIterate may be returned to support multiple transmit plugins within the same module.

ioPrivatePluginData, ioSerializedPluginData & ioSerializedPluginDataSize may be written from Startup.
Shutdown







Terminate a transmitter.

::

tmResult (*Shutdown)(
tmStdParms* ioStdParms);

Dispose of ioPrivatePluginData if previously allocated in Startup.
QueryAudioMode










Describe the audio modes supported by the transmitter, one at a time.

::

tmResult (*QueryAudioMode)(
const tmStdParms* inStdParms,
const tmInstance* inInstance,
csSDK_int32 inQueryIterationIndex,
tmAudioMode* outAudioMode);

Note that currently one audio mode is currently supported. You can convert between audio formats using the Audio Suite.
QueryVideoMode










Describe the video modes supported by the transmitter, one at a time.

::

tmResult (*QueryVideoMode)(
const tmStdParms* inStdParms,
const tmInstance* inInstance,
csSDK_int32 inQueryIterationIndex,
tmVideoMode* outVideoMode);

The video sent later in PushVideo will be one of the formats specified here.
SetupDialog












Display your own modal settings dialog.

::

tmResult (*SetupDialog)(
tmStdParms* ioStdParms,
prParentWnd inParent);

Will only be called if the plugin returned outHasSetup.

Save any settings to ioSerializedPluginData and if needed update ioSerializedPluginDataSize.

NeedsReset will be invoked after this call, to allow your transmitter a chance to reset all open plugins and startup with the new settings.
NeedsReset










Will be called regularly on the first plugin of a module to allow rebuilding on state changes.

::

tmResult (*NeedsReset)(
const tmStdParms* inStdParms,
prBool* outResetModule);

If the passed in settings differ enough from the created settings, or if the settings on the hardware itself have changed, the transmitter should specify a reset is needed.

If outResetModule is set to true, all open plugins will be shutdown and started up again.
CreateInstance












Creates an instance of a transmitter.

::

tmResult (*CreateInstance)(
const tmStdParms* inStdParms,
tmInstance* ioInstance);

inPlayID and inTimelineID may be 0 if not driven by a player.

Multiple instances may be created at the same time.

Allocate ioPrivateInstanceData.
DisposeInstance








Dispose an instance of a transmitter.

::

tmResult (*DisposeInstance)(
const tmStdParms* inStdParms,
tmInstance* ioInstance);

Any ioPrivateInstanceData should be disposed.
ActivateDeactivate













Activate or deactivate a transmitter instance, for example during application suspend or switching between monitors.

::

tmResult (*ActivateDeactivate)(
const tmStdParms* inStdParms,
const tmInstance* inInstance,
PrActivationEvent inActivationEvent,
prBool inAudioActive,
prBool inVideoActive);

Transmitters should manage hardware access with these calls, not Startup/Shutdown, since it is valid for multiple plugins to be simultaneously active for the same device.

Audio and video may be independently activated.
StartPlaybackClock



















Start a clock for playback.

::

tmResult (*StartPlaybackClock)(
const tmStdParms* inStdParms,
const tmInstance* inInstance,
const tmPlaybackClock* inClock);

This will be sent not only when starting playback, but also for scrubbing.

Will only be called if the transmitter returned outHasClock.

The provided callback must be called each time the time changes, for example once for each frame in response to PushVideo.

Start may be called multiple times without a stop in between to update playback parameters, for example if the speed changes during playback.

Invoke the callback immediately during StartPlaybackClock with a negative number for preroll but do not use this to wait for frames.

If video latency is specified, up to the latency’s amount of frame marked as playmode_Playing will be sent before StartPlaybackClock is called.
StopPlaybackClock






Stop a clock for playback.

::

tmResult (*StopPlaybackClock)(
const tmStdParms* inStdParms,
const tmInstance* inInstance);
PushVideo



















Asynchronously pushes a video frame to a transmitter instance.

::

tmResult (*PushVideo)(
const tmStdParms* inStdParms,
const tmInstance* inInstance,
const tmPushVideo* inPushVideo);

Will only be called if the transmitter returned outHasVideo.

The list of video frames passed to the transmitter will be negotiated based on the properties returned from QueryVideoMode.

The transmitter is responsible for disposing of all passed in PPixes.

The instance will be created with the properties of the creating video segments which may differ from the actual frames that will be sent to the transmitter.

For example, if a sequence is being played at 1/2 resolution, the instance will be created with the dimensions of the sequence, but the frames rendered and sent to the transmitter will be at 1/2.

These properties may change by segment, for example if your transmitter supports multiple pixel formats, different segments may render to different pixel formats.
StartPushAudio















Asynchronously pushes audio samples to a transmitter instance.

::

tmResult (*StartPushAudio)(
const tmStdParms* inStdParms,
const tmInstance* inInstance,
PrTime inStartTime,
PrTime inOutTime,
prBool inLoop,
prBool inScrubbing,
csSDK_int32* outSamplesPerFrame);

Initializes the device for subsequent PushAudio() calls. Will only be called if the transmitter returned outPushAudioAvailable.
Device will be enabled for a “secondary” mode where audio from the “primary” or “clock” device, is pushed to a secondary device; very useful for remote devices.
Unlick StartPlaybackClock(), StartPushAudio() is only called once, until StopPushAudio() is called.
PushAudio







Asynchronously pushes audio samples to a transmitter instance. Note: PushAudio() may be called even if another API is called at the same time.

::

tmResult (*PushAudio)(
const tmStdParms* inStdParms,
const tmInstance* inInstance,
const tmPushAudio* inPushAudio);
StopPushAudio






StopPushAudio() is called when playback via PushAudio() ends.

::

tmResult (*StopPushAudio)(
const tmStdParms* inStdParms,
const tmInstance* inInstance);
SetStreamingStateChangedCallback







Set the host callback for notification streaming state changes, i.e. when the plug-in becomes active or inactive due to changes connections or enablement from the host.

::

tmResult (*SetStreamingStateChangedCallback)(
const tmStdParms* inStdParms,
void* inContext,
tmStreamingStateChangedCallback inCallback);
EnableStreaming






Enable/disable streaming to connected clients without loading or unloading the plug-in.

::

tmResult (*EnableStreaming)(
const tmStdParms* inStdParms,
prBool inEnabled);
IsStreamingEnabled






Returns whether streaming is enabled.

::

tmResult (*IsStreamingEnabled)(
const tmStdParms* inStdParms,
prBool* outEnabled);
IsStreamingActive






Returns whether the plug-in is actively streaming, i.e. streaming is enabled and the plug-in has active connections.

::

tmResult (*IsStreamingActive)(
const tmStdParms* inStdParms,
prBool* outActive);