跳转到内容

旧版回调套件

这些回调适用于所有插件,尽管其中许多回调仅适用于特定类型的插件。

typedef struct {
int piInterfaceVer;
PlugMemoryFuncsPtr memFuncs;
PlugWindowFuncsPtr windFuncs;
PlugppixFuncsPtr ppixFuncs;
PlugUtilFuncsPtr utilFuncs;
PlugTimelineFuncsPtr timelineFuncs;
} piSuites, *piSuitesPtr;
成员描述
piInterfaceVerAPI 版本
- Premiere Pro CS4 - PR_PISUITES_VERSION_9
- Premiere Pro CS3 - PR_PISUITES_VERSION_8
- Premiere Pro 2.0 - PR_PISUITES_VERSION_7
- Premiere Pro 1.5.1 - PR_PISUITES_VERSION_6
- Premiere Pro 1.5 - PR_PISUITES_VERSION_5
- Premiere Pro 1.0 - PR_PISUITES_VERSION_4
- Premiere 6.x - PR_PISUITES_VERSION_3
- Premiere 5.1 - PR_PISUITES_VERSION_2
- Premiere 5.0 - PR_PISUITES_VERSION_1
memfuncs指向内存函数的指针
windFuncs指向窗口函数的指针
ppixFuncs指向 PPix 函数的指针
utilFuncs指向实用函数的指针。
在 utilFuncs 中,getSPBasicSuite 回调提供了对 SweetPea 套件 的访问,这些套件用于大多数新功能。
timelineFuncs指向时间轴函数的指针

内存和句柄分配。如果可能,请使用 PPix 创建器套件 进行 PPix 特定的分配。

在 API 结构中传递给 Premiere 和从 Premiere 传递的字符串始终是以 null 结尾的 C 字符串。

函数描述
newPtr分配一块内存,返回指向新块的指针。
char* newPtr (csSDK_uint32 size);
newPtrClear等同于 newPtr,但将内存初始化为 0。
char* newPtrClear (csSDK_uint32 size);
setPtrSize调整已分配内存块的大小。
void setPtrSize (
PrMemoryPtr *ptr,
csSDK_uint32 newsize);
getPtrSize返回已分配内存块的大小(以字节为单位)。
csSDK_int32 getPtrSize (char *ptr);
disposePtr释放已分配的内存块。
void disposePtr (char *ptr);
newHandle分配一块内存,返回其句柄。
char** newHandle (csSDK_uint32 size);
newHandleClear等同于 newHandle,但将内存初始化为 0。
char** newHandleClear (csSDK_uint32 size);
setHandleSize调整已分配内存句柄的大小。
csSDK_int16 setHandleSize (
char **PrMemoryHandle,
csSDK_uint32 newsize);
getHandleSize返回已分配块的大小(以字节为单位)。
csSDK_int32 getHandleSize ( char **PrMemoryHandle);
disposeHandle释放先前分配的句柄。
void disposeHandle (char **PrMemoryHandle);
lockHandle unlockHandle这些旧版函数已弃用,不应再使用。

窗口管理例程。已被 窗口套件 取代。

函数描述
updateAllWindows更新所有窗口。仅适用于 Windows,不适用于 Mac OS。
void updateAllWindows (void);
getMainWnd返回主应用程序的 HWND。
void getMainWnd (void);

用于操作 PPix。已被 PPix 创建器套件 取代用于 PPix 分配,并被 PPix 套件 取代用于一般 PPix 函数。

函数描述
ppixGetPixels返回 PPix 中包含的像素数组的指针。
char* ppixGetPixels (PPixHand pix);
ppixGetBounds返回 PPix 的边界。
void ppixGetBounds (
PPixHand pix;
prRect *bounds);
ppixGetRowbytes返回 PPix 的行字节数,以便正确解析由 ppixGetPixels 返回的像素。
int ppixGetRowbytes (PPixHand pix);
ppixNew分配并返回一个新的 PPix 的句柄,具有指定的边界。
由于这是一个较旧的调用,像素格式硬编码为 BGRA_4444_8u。
PPixHandle ppixNew (prRect *bounds);
ppixDispose释放 PPixHand。
void ppixDispose (PPixHand pix);
ppixLockPixels ppixUnlockPixels这些旧版函数已弃用,不应再使用。
ppixGetPixelAspectRatio传递回 PPixHand 的像素宽高比。
Premiere 使用 PAR 分子和分母填充 longs。
int ppixGetPixelAspectRatio (
PPixHand pix,
csSDK_uint32 *num,
csSDK_uint32 *den)
ppixGetAlphaBounds传递回 PPixHand 的 alpha 边界。
void ppixGetAlphaBounds (
PPixHand pix,
prRect *alphaBounds)
函数描述
getSerialNumber传递回 Premiere 的序列号。
void getSerialNumber (char* buffer);
- buffer: 必须至少为 40 个字符长。
getFileTimebase传递回文件的时基,使用 TDB_TimeRecord(由插件分配)。
如果文件已经在序列中,最好使用 视频片段套件 获取文件的时基,以获取 kVideoSegmentProperty_Media_StreamFrameRate
注意:了解你的格式。不要向仅音频格式请求视频,否则可能会得到意外的结果。
csSDK_int32 getFileTimebase (
prFileSpec *filespec,
csSDK_int32 audioOnly,
TDB_TimeRecord *result);
- filespec: 文件的描述,使用 getFileVideo 之前
- audioOnly: 如果非零,返回音频时基。如果为零,返回视频时基。
- result: 返回的时基
getFileVideo从文件中获取一帧视频(在指定时间)。
如果文件已经在序列中,最好使用 剪辑渲染套件 获取文件的视频。
csSDK_int32 getFileVideo (
prFileSpec *filespec,
csSDK_int32 frame,
PPixHand thePort,
prRect *bounds,
csSDK_int32 flags);
- filespec: 文件的描述
- frame: 要检索的帧
- thePort: 帧将传递到的位置,调用前分配
- bounds: 端口的边界
- flags: 未使用
getFileVideoBounds传递回文件的边界。
如果文件已经在序列中,最好使用 剪辑渲染套件 获取文件的视频边界。
csSDK_int32 getFileVideoBounds (
prFileSpec *filespec,
prRect *bounds);
getSPBasicSuite这个非常重要的调用返回 SweetPea 套件,允许插件获取和释放所有其他 SweetPea 套件
SPBasicSuite* getSPBasicSuite();
getFileExtString传递回给定媒体类别的有效扩展名/过滤器字符串列表(见下面的文件类型常量)。
csSDK_int32 (*plugGetFileExtStringFunc)(
csSDK_uint32 fileTypes,
char *inBuffer,
csSDK_uint32 inBufferSize);
- kFileTypes_Still: 静态媒体
- kFileTypes_AudioOnly: 仅音频媒体
- kFileTypes_AudioVideo: 音频和视频媒体
- kFileTypes_AllNoIntrinsics: 所有可通过导入插件导入的媒体类型(不包括 prproj、txt 等)
函数描述
getClipVideo已被Clip Render Suite取代,后者提供异步导入功能。
Video Segment Suite返回的片段树中获取剪辑帧。
可用于检索和存储静态帧(如标题)以供播放。
!!! 警告
此调用开销较大,请谨慎使用。
csSDK_int32 getClipVideo (
csSDK_int32 帧号,
PPixHand 端口,
prRect *边界,
csSDK_int32 标志,
PrClipID 剪辑数据);
- frame: 请求的帧号
- thePort: 调用前使用PPix Creator Suite分配
- bounds: 要返回的视频边界
- flags: 使用kGCVFlag_UseFilePixelAspectRatio或0。设为kGCVFlag_UseFilePixelAspectRatio将返回带有文件PAR标记的PPix。设为0将返回调整为项目PAR的PPix并相应标记。它会缩放但不会拉伸PPix以适应传入的目标PPix。
- clipData: prtFileRec中的clipData句柄
getWorkArea返回当前工作区的开始和结束位置(只读)。
将timelineData设置为当前序列的timelineData。
csSDK_int32 getWorkArea (
PrTimelineID 时间线数据,
csSDK_int32 *工作区开始,
csSDK_int32 *工作区结束);
getCurrentTimebase返回时间线的当前时基(scale + sampleSize)。
void getCurrentTimebase(
PrTimelineID 时间线数据,
csSDK_uint32 *比例,
csSDK_int32 *采样大小);
- timelineData: 当前序列的时间线数据
- scale: 序列比例
- sampleSize: 序列采样大小
getCurrentPos返回当前时间指示器的位置(用户设置的位置条)。
如果返回-1,表示时间线中不存在位置条。
csSDK_int32 getCurrentPos(
PrTimelineID 时间线数据);
- timelineData: 当前序列的时间线数据
getPreviewFrameEx从时间线获取完全渲染的帧(所有层)。
用于视频滤镜和转场在模态设置对话框中的预览。
如果返回值为-1表示出错,0表示回调安全返回。
最终影片渲染导出器不应使用此回调。
csSDK_int32 getPreviewFrameEx(
PrTimelineID 时间线数据,
csSDK_int32 输入帧,
PPixHand* 输出渲染帧,
const prRect* 输入帧矩形,
PrPixelFormat* 请求的像素格式数组,
csSDK_int32 请求的像素格式数组计数,
csSDK_uint32 像素宽高比分子,
csSDK_uint32 像素宽高比分母,
bool 始终渲染);
getClipVideoBounds返回序列中剪辑的尺寸。对于滚动/爬行标题,请改用Roll/Crawl Suite获取尺寸。
csSDK_int32 getClipVideoBounds (
PrClipID 输入剪辑数据,
prRect *输出边界,
csSDK_uint32 *输出像素宽高比分子,
csSDK_uint32 *输出像素宽高比分母);
getClipVideoEx已被Clip Render Suite取代,后者提供异步导入功能。
Video Segment Suite返回的片段树中获取剪辑帧。
可用于检索和存储静态帧(如标题)以供播放。
!!! 警告
此调用开销较大,请谨慎使用。
csSDK_int32 getClipVideoEx (
csSDK_int32 输入帧,
PPixHand *输出渲染帧,
const prRect *输入帧矩形,
const PrPixelFormat *请求的像素格式数组,
csSDK_int32 请求的像素格式数组计数,
csSDK_uint32 像素宽高比分子,
csSDK_uint32 像素宽高比分母,
PrClipID 输入剪辑数据);

传统瓶颈函数指针仅传递给转场和视频滤镜。

这些函数不向其他插件类型公开。

这些函数不支持不同像素格式,仅用于8位BGRA处理。

示例用法:

((*theData)->bottleNecks->StretchBits) (*srcpix,
*dstpix,
&srcbox,
&srcbox,
0,
NULL);
函数描述
StretchBits拉伸并复制图像(包括alpha通道)。
当目标大于源时,执行双线性插值以实现平滑缩放。
void StretchBits (
PPixHand 源PPix,
PPixHand 目标PPix,
prRect 源矩形,
prRect 目标矩形,
int 模式,
prRgn 区域);
仅适用于8位PPix。
srcRect是要复制的源PPix区域;dstRect用于缩放副本。
有效模式:cbBlendcbInterpcbMaskHdl
DistortPolygon将源矩形映射到目标中的四点多边形。
void DistortPolygon (
PPixHand 源,
PPixHand 目标,
prRect *源框,
prPoint *目标点);
MapPolygon将四点源多边形映射到四点目标多边形。
如果源多边形是矩形,则等同于DistortPolygon
void MapPolygon (
PPixHand 源,
PPixHand 目标,
prPoint *源点,
prPoint *目标点);
DistortFixed使用定点坐标的DistortPolygon等效函数。
void DistortFixed (
PPixHand 源,
PPixHand 目标,
prRect *源框,
LongPoint *目标点);
FixedToFixed使用定点坐标的MapPolygon等效函数。
void FixedToFixed (
PPixHand 源,
PPixHand 目标,
LongPoint *源点,
LongPoint *目标点);
DoIndexMap图像映射函数。
void DoIndexMap (
char *源,
char *目标,
short 行,
short, 像素宽度,
short, 高度,
char *查找表1,
char *查找表2,
char *查找表3);
DoConvolve卷积函数。
void DoConvolve (
unsigned char *源,
unsigned char *目标,
short *矩阵,
short, 行字节数,
short, 宽度,
short, 高度);