跳转到内容

tmModule 结构

tmModule 结构

tmStdParms

此结构传递给所有调用。大部分内容由发射器在启动时分配并填充,并可能在设置对话框期间修改。

typedef struct {
csSDK_int32 inPluginIndex;
PrMemoryPtr ioSerializedPluginData;
csSDK_size_t ioSerializedPluginDataSize;
void* ioPrivatePluginData;
piSuitesPtr piSuites;
} tmStdParms;
成员描述
inPluginIndex如果插件在同一模块中定义了多个发射器,此索引值用于区分它们。
ioSerializedPluginData此数据应包含用户可选择的发射器设置,这些设置将显示在发射器设置对话框中,并且需要持久化以便可以在会话之间保存和恢复。
在启动期间首次分配时,必须使用 NewPtr 分配此数据,以便主机可以在关闭时释放它。
这必须是主机可以序列化的扁平内存,并且在调用启动时如果之前可用,则已经填充。
ioSerializedPluginDataSize上述数据的大小。如果尚未设置,请在启动期间设置此值。
ioPrivatePluginData此数据应包含在发射器调用之间所需的任何内存,除了存储在 ioSerializedPluginData 中的设置数据。
在启动期间分配此数据。与 ioSerializedPluginData 不同,它不需要是扁平的,并且必须在关闭时由插件释放。

tmPluginInfo

此结构由发射器在启动时填充。

typedef struct {
prPluginID outIdentifier;
unsigned int outPriority;
prBool outAudioAvailable;
prBool outAudioDefaultEnabled;
prBool outClockAvailable;
prBool outVideoAvailable;
prBool outVideoDefaultEnabled;
prUTF16Char outDisplayName[256];
prBool outHideInUI;
prBool outHasSetup;
csSDK_int32 outInterfaceVersion;
} tmPluginInfo;
成员描述
outIdentifier持久化插件标识符。
outPriority0 为默认值,优先级越高越优先。
outAudioAvailable如果发射器支持音频,请将此设置为 kPrTrue
outAudioDefaultEnabled如果希望默认启用音频处理,请将此设置为 kPrTrue
outClockAvailable如果提供基于插件的音频,请将此设置为 kPrTrue
目前,即使使用基于主机的音频,发射器也必须提供时钟——如果您希望仅使用基于主机的音频,请告知我们,我们将记录此问题的错误。
outVideoAvailable如果发射器支持视频,请将此设置为 kPrTrue
outVideoDefaultEnabled如果希望默认启用视频处理,请将此设置为 kPrTrue
outDisplayName[256]设置发射器的显示名称,最多 256 个 UTF-16 字符,包括 NULL 终止符。
outHideInUI如果不希望此选项显示为用户可选的发射器选项,请将此设置为 kPrTrue
outHasSetup如果提供设置对话框,请将此设置为 kPrTrue
outInterfaceVersion将此设置为发射器正在编译的 tmInterfaceVersion
outPushAudioAvailable24.0 新增。如果发射器支持推送音频功能,请将此设置为 kPrTrue。设备将启用“次要”模式,其中来自“主要”或“时钟”设备的音频将推送到此设备。
outHasStreaming24.0 新增。如果发射器通过网络流式传输音频或视频,请将此设置为 kPrTrue

设备将启用“次要”模式,其中来自“主要”或“时钟”设备的音频将推送到此设备。这对于远程设备特别有用。PushAudio API 将仅在此“镜像”情况下使用。StartPushAudio() 初始化设备以进行后续的 PushAudio() 调用。与 StartPlaybackClock 不同,StartPushAudio() 仅在调用 StopPushAudio() 之前调用一次。每当所需的缓冲区大小达到时,PushAudio() 将被调用。


tmInstance

此结构包含发射器用于初始化实例的信息。

typedef struct {
csSDK_int32 inInstanceID;
PrTimelineID inTimelineID;
PrPlayID inPlayID;
prBool inHasAudio;
csSDK_uint32 inNumChannels;
PrAudioChannelLabel inChannelLabels[16];
PrAudioSampleType inAudioSampleType;
float inAudioSampleRate;
prBool inHasVideo;
csSDK_int32 inVideoWidth;
csSDK_int32 inVideoHeight;
csSDK_int32 inVideoPARNum;
csSDK_int32 inVideoPARDen;
PrTime inVideoFrameRate;
prFieldType inVideoFieldType;
void* ioPrivateInstanceData;
} tmInstance;
成员描述
inInstanceID实例标识符。
inTimelineIDTimelineID,用于各种套件函数。可能为 0。
inPlayIDPlayID,用于各种套件函数。可能为 0。
inHasAudio如果实例处理带有音频的序列,则为 True。
inNumChannels音频通道数。
inChannelLabels[16]每个音频通道的标识符。
inAudioSampleType音频数据的格式。
inAudioSampleRate音频数据的采样率。
inHasVideo如果实例处理带有视频的序列,则为 True。
inVideoWidth视频分辨率。
inVideoHeight
inVideoPARNum视频像素宽高比的分子和分母。
inVideoPARDen
inVideoFrameRate视频的帧率。
inVideoFieldType视频的场序。
ioPrivateInstanceData可以在 CreateInstance 中由插件写入,并在 DisposeInstance 中释放。不需要由主机序列化。

tmAudioMode

发射器将支持的音频模式的完整描述。

发射器应在 QueryAudioMode 期间填充此信息。

typedef struct {
float outAudioSampleRate;
csSDK_uint32 outMaxBufferSize;
csSDK_uint32 outNumChannels;
PrAudioChannelLabel outChannelLabels[16];
PrTime outLatency;
PrSDKString outAudioOutputNames[16]
} tmAudioMode;
成员描述
outAudioSampleRate首选音频采样率。
outMaxBufferSize如果发射器使用基于插件的音频通过 Playmod Audio Suite 请求音频缓冲区,则需要的最大音频缓冲区大小。
outNumChannels支持的最大音频通道数。
outChannelLabels[16]使用适当的标识符为每个音频通道设置输出硬件的音频通道配置。
outLatency此值仅用于播放,而不是在擦洗时使用。
它指定在音频播放开始时提前发送帧的时间,以及在 StartPlaybackClock 调用之前将发送多少帧。使用此值可以使源/程序监视器与外部硬件输出之间的播放同步。
所有模式必须具有相同的延迟。
注意不要将此值设置得过高,因为播放开始将延迟此时间。建议使用相当于 5 个视频帧或更少的值。
outAudioOutputNames[16]CS6.0.2 新增。这些必须是物理音频输出的可显示名称,如“XYZ HD Speaker 1”
tmAudioMode 中的音频输出名称应由插件使用 String Suite 分配,并且不由插件释放。主机将负责释放这些字符串。

tmVideoMode

发射器将支持的视频模式的完整描述。

发射器应在 QueryVideoMode 期间填充此信息。

typedef struct {
csSDK_int32 outWidth;
csSDK_int32 outHeight;
csSDK_int32 outPARNum;
csSDK_int32 outPARDen;
prFieldType outFieldType;
PrPixelFormat outPixelFormat;
PrSDKString outStreamLabel;
PrTime outLatency;
ColorSpaceRec outColorSpaceRec;
} tmVideoMode;
成员描述
outWidth首选视频分辨率。
如果支持任何分辨率,则设置为 0。
outHeight
outPARNum首选视频像素宽高比。
如果支持任何像素宽高比,则设置为 0。
outPARDen
outFieldType支持的视频场序。
如果支持任何场序,则设置为 prFieldsAny。
outPixelFormat首选视频像素格式。
如果任何格式都可接受,则设置为 PrPixelFormat_Any
如果您的发射器可以从 GPU 上的帧中受益,请告知我们。
outStreamLabel暂时将此保留为 0。发射器尚不支持流标签(错误组 BG127571)
outLatency此值仅用于播放,而不是在擦洗时使用。
它指定在播放开始时提前发送帧的时间,以及在 StartPlaybackClock 调用之前将发送多少帧。使用此值可以使源/程序监视器与外部硬件输出之间的播放同步。
所有模式必须具有相同的延迟。
注意不要将此值设置得过高,因为播放开始将延迟此时间。建议使用相当于 5 帧或更少的值。
outColorSpaceRec14.x 新增。使用的色彩空间定义;默认为 BT 709 全范围 32f。
发射器可以请求主机应用程序以特定色彩空间发送帧。有关详细描述,请参阅 ColorSpaceRec

tmPlaybackClock

此结构由主机填充并发送给发射器,以描述由发射器管理的播放时钟。

发射器使用此处的回调定期更新主机。

typedef struct {
tmClockCallback inClockCallback;
void* inCallbackContext;
PrTime inStartTime;
pmPlayMode inPlayMode;
float inSpeed;
PrTime inInTime;
PrTime inOutTime;
prBool inLoop;
tmDroppedFrameCallback inDroppedFrameCallback;
} tmPlaybackClock;
成员描述
tmClockCallback指向具有以下签名的调用:
void (*tmClockCallback)(
void* inContext,
PrTime inRelativeTimeAdjustment);
当时间发生变化时调用此函数,并使用非速度调整量来递增时钟。
可以在每次 PushVideo 响应中每帧调用一次。
使用负时间应仅用于等待设备,而不是用于实现同步。
发射器在使用负时间时将不会接收任何帧。
在第一次正值的时钟回调后,时间将为 StartTime + inRelativeTimeAdjustment * inSpeed
inCallbackContext将此传递给上述时钟回调。
inStartTime在此时间启动时钟。
inPlayMode指定 StartPlaybackClock 是否设置为播放或擦洗。
inSpeed1.0 为正常速度,-2.0 为双倍速度倒放。
仅用于信息。
这对于内置的 DV 发射器很有用,它仅在以正常速度播放时写入 DV 字幕。
inInTime仅用于信息,将由主机处理。
inOutTime
inLoop
inDroppedFrameCallback指向具有以下签名的调用:
void (*tmDroppedFrameCallback)(
void* inContext,
csSDK_int64 inNewDroppedFrames);
使用此调用报告推送到发射器插件但未传递到设备的帧。
如果推送到发射器的每一帧都按时发送到硬件,则永远不需要调用此函数,因为主机将计算未推送到插件的帧。
inNewDroppedFrames 应为自上次调用 tmDroppedFrameCall 以来新增的丢帧数。

tmPushVideo

描述要传输的视频帧。

typedef struct {
PrTime inTime;
pmPlayMode inPlayMode;
PrRenderQuality inQuality;
const tmLabeledFrame* inFrames;
csSDK_size_t inFrameCount;
} tmPushVideo;
成员描述
inTime描述正在传递的视频帧。
负值表示应立即显示该帧。
使用此值确定正在推送的帧的对应时间码。
inPlayMode将此传递给上述时钟回调。
inQuality渲染的质量。
inFrames要传输的帧或帧集。从 CS6 开始,这将始终是单帧。
tmLabeledFrame 定义为:
typedef struct {
PPixHand inFrame;
PrSDKStreamLabel inStreamLabel;
} tmLabeledFrame;
帧必须由发射器在使用完毕后释放。
inFrameCountinFrames 中的帧数。

tmPushAudio

描述要传输的音频样本。

typedef struct {
PrTime inTime;
float** inBuffers;
csSDK_uint32 inNumSamples;
csSDK_uint32 inNumChannels;
} tmPushAudio;
成员描述
inTime描述正在传递的视频帧。
负值表示应立即显示该帧。
使用此值确定正在推送的帧的对应时间码。
inBuffers要传输的音频数据。
inNumSamples要处理的样本数。
inNumChannels要输出的通道数。

tmStopPushAudio

在通过 PushAudio() 结束播放时发送。

typedef struct {
PrTime inTime;
float** inBuffers;
csSDK_uint32 inNumSamples;
csSDK_uint32 inNumChannels;
} tmPushAudio;
成员描述
inTime描述正在传递的视频帧。
负值表示应立即显示该帧。
使用此值确定正在推送的帧的对应时间码。
inBuffers要传输的音频数据。
inNumSamples要处理的样本数。
inNumChannels要输出的通道数。