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 plug-in 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 plug-ins 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 plug-ins and startup with the new settings.

NeedsReset

Will be called regularly on the first plug-in 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 plug-ins 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.