FxPlug SDK Version History

This chapter lists the changes for each version of the FxPlug SDK from version 1.0 through 3.1. For the best possible backward compatibility, and to make your plug-in work with any version of a host application, have the plug-in first check for the availability of a host API for an SDK feature, and then only use that feature if the API is available. If a particular host API is not available, your plug-in needs to fall back to an alternative behavior.

FxPlug 3.X SDK

FxPlug 3.1 SDK

The FxPlug 3.1 SDK includes the following new features:

  • New FxTime data type can use frame numbers or rational time.

  • Media inputs can be scheduled ahead of time for increased speed.

The release makes various bug fixes and improvements, including:

  • Default values for all FxPlug parameters are now saved in the document.

  • When an FxPlug plug-in is archived, it no longer creates a symlink in the archive.

What’s New in Motion 5.2.2 and Final Cut Pro 10.2.2:

  • Automatically restarts XPC process in FxPlug 3 effects.

  • FxTimingAPI methods return correct float values for effects inside Final Cut Pro X storylines.

  • FxTimingAPI properly calculates position of Motion effects in Final Cut Pro X.

  • Fixes the calculation of durations in the FxTimingAPI.

  • Fixes the timing of FxPlug effects within published Motion projects.

FxPlug 3.0.1 SDK

The FxPlug 3.0.1 SDK includes these changes:

  • The FxPlug SDK is now ARC compatible.

  • It resolves issues that could lead to broken symlinks when archiving FxPlug plug-ins in Xcode 5.

  • It fixes a missing protocol issues in SDK sample code.

  • It improves the accuracy of included Xcode templates.

FxPlug 3.0 SDK

The biggest change in FxPlug 3.0 SDK is the support for application sandboxing. This new support required changes to the FxPlug structure, including how it’s packaged, loaded, and used.

  • Entitlements—With the introduction of application sandboxing, applications must list all the ways it can access system resources. These are called entitlements. For security reasons each of our host applications provides only a minimal amount of entitlements, which in most cases may not be sufficient for the needs of third-party developers.

  • New application structure—FxPlug plug-ins are transitioning from a filter bundle to an application bundle which contains two internal bundles, called the Embedded Principal and Service Principal components. This requires changes to your Xcode project structure.Embedded Principal and Service Principal components. This requires changes to your Xcode project structure.

  • New controls—Three new controls are available:

    • Push Buttons—Allow a plug-in to display a push button in the inspector or HUD and perform an action, such as opening a settings window, when it’s displayed.

    • Help Buttons—Allow a plug-in to take some action to display help content to the user.

    • Font Menu—Allows a plug-in to display the list of installed fonts from which the user can choose one.

  • Custom UI support for Final Cut Pro Effects containing FxPlug 3–based plug-ins.

  • Multi-GPU support—A new kFxPropertyKey_IsThreadSafe key has been added to allow plug-ins to build and render multiple frames simultaneously.

    This new key can be added to the dictionary returned by a plug-in’s -properties method with a BOOL value of YES to indicate to the host application that it’s safe to call the plug-in to render on multiple threads at the same time. This key is extremely useful when running on machines with multiple GPUs, because they can render one frame per GPU at the same time, decreasing rendering times significantly. When this flag is set, a plug-in’s -getOutputWidth:height:::, -frameSetup:::, -frameCleanup, and -renderOutput::: methods are assumed to all be thread-safe. Plug-ins must take care to ensure that they follow the rules of thread safety when they set this flag, because data corruption or crashes can occur if two threads access the same data at the same time.

    For more information on concurrent OpenGL, refer to OpenGL Programming Guide for Mac.

FxPlug 2.X SDK

FxPlug 2.4 SDK

FxPlug 2.4 SDK provides several important bug fixes that developers should be aware of.

Motion 5.0.5 updates

  • Parameter state can now be set correctly and will be saved and restored correctly for Motion Templates created with Motion 5.0.5 or later. Older templates will load the same as before to ensure backward compatibility with older Final Cut Pro X projects.

  • The FxTemporalImageAPI and FxParameterRetrievalAPI now allow access to all frames and fields of footage.

  • Accessing images at non-render time through the FxTemporalImageAPI or FxParameterRetrievalAPI should now be more robust.

  • Pixel transforms should now be correct and invertible for images returned by the FxTemporalImageAPI and FxParameterRetrievalAPI.

  • The FxKeyframeAPI should now work as expected in a Motion Template running inside Final Cut Pro.

FxPlug SDK updates

FxPlug 2.2 SDK

FxPlug 2.2 SDK provides several important bug fixes that developers should be aware of.

Motion 5.0.3 updates

  • Fixed a case of significant blurriness when adding a Final Cut Pro Effect to an interlaced clip.

  • Fixed a rare stability issue when a filter didn't set the output width and height in -getOutputWidth:height:withImage:withInfo:.

  • Fixed an issue with incorrect Pixel transforms when rendering in screen space.

  • Fixed a stability issue with calls to set parameters when running in Final Cut Pro causing a hang in -parameterChanged:.

FxPlug SDK updates

  • Updated the DirectionalBlur example to use OpenGL Frame buffers for multipass rendering instead of PBuffers which are now deprecated.

  • Updated the SimplePaint example to work properly on all video cards, with non-square pixels and at proxy resolution.

  • Updated BoxTest to work properly with non-square pixels and at proxy resolution.

  • Fixed calls to getBitmap:::atTime and getTexture:::atTime: so they now return images from the proper time, dimensions and scaling information.

  • Fixed an issue where images returned from Final Cut Pro are marked with the correct origin.

FxPlug 2.1 SDK

FxPlug 2.1 SDK provides several important bug fixes that developers should be aware of.

Motion 5.0.2 updates

The FxTemporalAPI should work more consistently outside of render time.

FxPlug SDK updates

  • Image sizes should now be correct when getting images from the parameter or temporal APIs regardless of rendering resolution.

  • FxPlug plug-ins in Motion Effect templates now receive correct frame rate information.

  • FxPlug Timing API now returns correct information if an Image well doesn’t contain footage.

  • The Scrolling Rich Text and Options Dialog examples now build and load correctly.

FxPlug 2.0 SDK

The most obvious change in release 2.0 of FxPlug SDK is the addition of several new APIs. There are also a number of changes required for updating to 64-bit and working with the latest Final Cut Pro and Motion applications.

The FxPlug 2.0 SDK includes these components:

  • The FxPlugSDK installer, which installs the FxPlug header files in the FxPlug framework. It also installs several FxPlug examples in /Developer/Examples. Included is an About FxPlug Examples file that provides details about the examples.

Motion Effects and Final Cut Pro

The biggest change is that all FxPlug plug-ins now run either directly in Motion or as part of a Motion Effect running inside of Final Cut Pro.

This makes most of the differences between hosts from previous versions disappear, making it easier for developers to write and maintain plug-ins.

For your plug-ins to run in Final Cut Pro, you must create a Motion Effect for each one.

64-Bit

All FxPlug plug-ins must now be compiled 64-bit to run in Motion 5 or later. This will require a recompile of all existing plug-ins, because you must link against the 64-bit versions of the FxPlug and PluginManager frameworks.

Along with this change, several of the pieces required to build plug-ins have moved.

Because Motion and Final Cut Pro are now available as self-contained applications on the Mac App Store, the FxPlug.framework and PluginManager.framework, which are loaded at runtime, are stored inside each application's bundle.

The developer versions of these frameworks, which contain the headers used to build your plug-ins, are now stored in /Developer/Examples/FxPlug/, along with several new developer examples showcasing the new APIs.

New Classes and Protocols

FxPlug 2.0 includes new classes and protocols. The following lists those additions and their features.

Dynamic Parameter API

The dynamic parameter API allows you to add and remove parameters at runtime rather than simply showing and hiding them. See FxDynamicParameterAPI Protocol Reference for more information.

Keyframe API

The keyframe API allows you to retrieve keyframe times and values as well as create new keyframes. See FxKeyframeAPI Protocol Reference for more information.

Custom Window API

The custom window API gives you a window to draw into which looks like other windows in the application, and tells you when the application is finished with the window. See FxWindowAPI Protocol Reference and FxWindowHost Protocol Reference for more information.

Re-Render API

The re-rendering API allows your plug-in to inform the host that needs to re-render your plug-in content. See FxRenderNotificationAPI Protocol Reference for more information.

Path API

The path API gives you access to polygonal, bezier, and x-spline curve data created by users. See FxPathAPI Protocol Reference for more information.

Host Resource Management API

The host application can now create and track resources that your plug-in requests such as memory, OpenGL textures and buffers. It also gives plug-ins the ability to tell the host to execute a method on several threads at once so plug-ins can use multiple processors. See FxHostResourcesAPI Protocol Reference and FxHostResourcesClient Protocol Reference for more information.

Undo API

The undo API helps plug-ins to coalesce events in custom user interface and onscreen controls so they can be undone and redone as a single event. See FxUndoAPI Protocol Reference for more information.

Lighting API

The lighting API allows the retrieval of information about lights the user has placed in a 3D scene. See FxLightingAPI Protocol Reference for more information.

Interpolatable Custom Parameters

The parameter APIs have been updated to support interpolation in custom parameters. See FxCustomParameterInterpolation Protocol Reference for more information.

General Cleanup

Several aspects of the FxPlug SDK have been cleaned up. Several methods have been deprecated that were either confusingly named or that worked poorly. New methods have been added, where appropriate, to achieve the same results more cleanly and clearly.

FxPlug 1.X SDK

FxPlug 1.2.5 SDK

Version 1.2.5 of the FxPlug SDK is functionally unchanged from version 1.2.4 and features no bug fixes.

FxPlug 1.2.4 SDK

Version 1.2.4 of the FxPlug SDK is released with Final Cut Pro 7.0 and Motion 4.0. The FxPlug 1.2.4 SDK Framework is functionally unchanged from the FxPlug 1.2.3 SDK Framework, however the applications now take advantage of more of the features.

Final Cut Pro 7.0 Changes

  • The FxVersioningAPI now works correctly during -addParameters.

  • FxPlug generators produce gamma 1.8 or gamma 2.2 images, depending on the display 
settings.

  • FxParameterRetrievalAPI:getBitmap is now reliable during UI time.

  • If one parameter group is nested inside another, and the nested group is the last item in the enclosing group, parameters following the outer group are now displayed correctly. Previously they would appear inside the outer group.

  • Setting point parameter values with the FxParameterSettingAPI_v2 now works correctly. Previously, it wouldn't work if the new value contained a changed X value but the same Y value.

  • Final Cut Pro no longer crashes if a plug-in doesn't specify a group name.

  • Fixed a problem that could occur if a plug-in added new parameters above custom UI parameters and a project created with the previous version of the plug-in was loaded.

  • Images from the FxTemporalAPI are now correctly premultiplied. Previously, they were labelled as premultiplied, but the pixels were not actually premultiplied.

Motion 4.0 Changes

  • Fx3DAPI is now available to generators.

  • Custom controls in generators are now displayed in the HUD.

  • The UI should now properly update when plug-ins hide parameters.

  • The -pixelFormat method of both input and output images now returns the correct value.

  • Plug-ins can now check for the existence of the Fx3DAPI at -addParameters time (but should not use the API at that time).

  • Text parameters now enable and disable appropriately.

  • Generators can now access FxLayerInfoAPI.

  • Motion now prints a message to the console if the data sent to the various methods in FxParameterCreationAPI are invalid. (For example, if the minimum parameter value is greater than the maximum, or the slider min/max values are outside the parameter min/max values.)

  • FxImages are labeled correctly, depending on the display settings.

  • When duplicating an instance of an old plug-in, the new copy now also reports the old version number.

  • A plug-in rendering inside a Motion project within the Final Cut Pro timeline now correctly gets Motion as the host when it asks to identify the host it’s rendering under.

  • Output images from generators now have the correct field information.

  • Previews now render right-side up.

  • -getSourceTexture: and -getSourceBitmap: now work correctly for filters applied to groups.

FxPlug 1.2.3 SDK

Version 1.2.3 of the FxPlug SDK provides minor bug fixes and documentation corrections.

FxPlug 1.2.2 SDK

The FxPlug 1.2.2 Framework

Version 1.2.1 of the FxPlug SDK was released with Final Cut Pro 6.0.1 and Motion 3.0.1.

FxImageColorInfo Enumeration

The new FxImageColorInfo enumerated type identifies some basic color properties of an FxImage. For YUV images, this enumeration tells you whether you should use the Rec. 601 or Rec. 709 color matrix to convert an image to RGB. For RGB images, it describes the gamma level of the image.

Xcode Template Location

FxPlug 1.2.2 SDK installs its Xcode templates in the location expected by Xcode 2.5 and later. Symbolic links are installed into the legacy location, so you can still open the templates using an earlier version of Xcode.

Final Cut Pro 6.0.2 Changes

Parameter Value Retrieval

Plug-ins can now evaluate their parameter values at any time during -parameterChanged, or from within custom UI code. Previously, parameters could be evaluated at any time during -renderOutput, but otherwise only at the current time.

Collapsible Groups

Parameter groups now contain disclosure triangles that allow a group to be collapsed and expanded. The kFxParameterFlag_COLLAPSED flag is also respected; plug-ins can use this flag to create groups that are initially collapsed, or to programmatically collapse or expand groups in response to other parameter changes.

Start Point, End Point and Reverse Transitions

The start point, end point, and reverse controls in the Transition Viewer are now respected when rendering FxPlug transitions. These three controls affect the time fraction passed to the transition's render method; the reverse control also swaps the A and B images. You should not have to change your plug-in to take advantage of these controls.

Undo and Copy/Paste Crashes

Fixed a bug that could result in crashes when undoing the addition of a filter, or when copying and pasting filters.

Nested Groups

Hiding and disabling groups now work correctly with nested groups. However, there is still no visual indication that the groups are nested.

YUV Images

Plug-ins can use the new FxImageColorInfo API to determine if a YUV image is Rec. 601 or Rec. 709. This allows for improved YUV support, or accurate conversion to high-precision RGB within the plug-in.

FxTemporalTransitionImage

Previously, the FxTemporalTransitionImageAPI interpreted the times passed as relative to the requested source clip. Now the times are interpreted as relative to the transition item. This is consistent with all other uses of time in Final Cut Pro.

Multiple Monitors

Fixed a bug where custom UI could appear in the wrong location if the filter viewer was dragged to a second monitor.

Legacy Non-Real-Time Display Path

Fixed a bug where input images in the legacy non-real-time display path were not tagged with the correct aspect ratio.

Transition Input images now have the correct field order

Fixed a bug where input images for transitions were not labeled with the correct field order.

Hidden Groups

Final Cut Pro no longer ignores the kFxParameterFlag_HIDDEN flag when creating groups. However, groups must be disabled after the parameters they contain have been added.

Motion 3.0.2 Changes

Custom Control Saving

Previously, when a user changed a document with a custom control, Motion did not flag the document as changed and could close it without saving the changes. Motion now properly flags the document as changed. It also fixes a crash that could occur during an undo.

Image Well Gamma Shift

When you retrieve a bitmap from an image well parameter, the image now has the proper gamma setting that matches the gamma setting it would have if you had dropped it directly into the timeline.

API Object Refactoring

The various API Objects have been refactored to make them accessible at more times and to reduce the number of thread related problems. Plug-in developers should test to be sure that the APIs all still work as expected.

Interpolation for Up-sampling

Motion now uses interpolation rather than line doubling to up-sample fields to frame size.

FxPlug 1.2.1 SDK

Version 1.2.1 of the FxPlug SDK was released with Final Cut Pro 6.0.1 and Motion 3.0.1. The FxPlug 1.2.1 SDK includes two new protocols, one for managing 3D camera and layer information in Motion, and another that allows plug-ins to manage backward compatibility issues. The host applications Final Cut Pro 6.0.1 and Motion 3.0.1 also contain fixes related to the FxPlug APIs.

The FxPlug 1.2.1 Framework

3D Support

Motion only: Plug-ins can use the new Fx3DAPI protocol to get the 3D transforms for the camera and for the plug-in's layer.

Versioning Support

Plug-ins that include a version key in their Info.plist files can use the new FxVersioningAPI protocol to determine what version of their plug-in was used when a project was created.

Angle Units

For angle parameters, -getFloatValue and -setFloatValue now use degrees in all host applications.

New Examples

In addition to SimpleMatte and SimplePaint, the FxPlug 1.2 SDK provided new example plug-in projects installed in /Developer/Examples/FxPlug:

  • DirectionalBlurExample

  • Options Dialog

  • ScrollingRichText

  • Slow SolidColor

Final Cut Pro 6.0.1 Changes

Correct Duration for Transition Effects

The method [FxTimingAPI durationForEffect] returns the correct duration of FxPlug transition effects.

Correct Start Time and Duration for Untrimmed Media

The methods [FxTimingAPI startTimeOfImageParm] and [FxTimingAPI durationOfImageParm]return the correct start time and duration for image parameters, even if the media in the image wells do not have in and out points set.

Group Parameters Can Be Hidden

The kFxParameterFlag_HIDDEN flag works correctly with group start and end markers.

Parameter List No Longer Scrolls Inappropriately

Hiding or showing a parameter no longer causes the parameter list to scroll to the top.

No Artifacts in Parameter List

Hiding a parameter no longer causes a spurious horizontal line to be drawn in the parameter list.

Correct Channel Order

Previously, the output images for RGB-only generators would be labeled as RGBA, but the results would be interpreted as ARGB in 8-bit. The images are now correctly labeled as ARGB in 8-bit and RGBA in float.

Motion 3.0.1 Changes

No Gamma Shift

Retrieving bitmap images using the temporal image API no longer causes a gamma shift in the retrieved image.

Correct Rendering

Retrieving bitmap images from a group no longer causes the group to render upside down.

Correct Memory Management

Motion now properly releases custom NSViews when a filter is deleted.

Proper Bit Setting

Retrieving bitmap images from 16-bit per channel footage now returns proper 32-bit per channel footage.

Avoid Unnecessary Rendering

Repeated renders are no longer queued up when a custom control calls -startAction and -endAction during its -drawRect: method. This keeps the control and the current frame from constantly re-rendering.

Fix Crash Bug

Motion no longer crashes under certain circumstances when calling -currentTime: in the FxCustomParameterActionAPI protocol.

Parameters Updated Correctly

Parameters are now properly updated in the inspector when their enabled-disabled or hidden-shown state is changed.

FxPlug 1.2 SDK

Version 1.2 of the FxPlug SDK was released with Final Cut Pro 6.0 and Motion 3.0. The focus of FxPlug 1.2 SDK is improved consistency between Motion and Final Cut Pro, and better support for timing information. In addition to the changes in the FxPlug framework itself, there are other FxPlug-related changes in Plug-in Manager 1.7, Final Cut Pro 6, and Motion 3.

The FxPlug 1.2 Framework

Timing information

A FxTimingAPI protocol defines the methods provided by the host that allow a plug-in to query the timing properties of its input image(s), image parameters, effect, timeline, and in/out points. This protocol is the most significant change in FxPlug 1.2 SDK.

Field and Field Order Information

FxImage objects now respond to -field and -fieldOrder accessors. These accessors provide information about fields in interlaced images: the field identifier for an image, and the field order of an image. The incorrectly named field FxRenderInfo.field has been renamed FxRenderInfo.fieldOrder. But you should use the FxImage accessors instead.

Progress and Cancellation

A FxProgressAPI protocol defines methods for plug-ins that render slowly to update a progress bar and support user cancellation.

Image Retiming in Transitions

Final Cut Pro only: The FxTemporalTransitionImageAPI protocol allows a plug-in to retrieve its A or B input images at different times. In FxPlug 1.1, retiming was only enabled for images from filter inputs and image wells, not for transition input images.

Absolute versus Relative Times

An [FxHostCapabilities timeBase] method allows a plug-in to determine whether the host application measures times as frame offsets from the start of the timeline, or from the start of a clip, generator, filter, or transition.

Getting Angle Values

The -getAngle:fromParm:atTime: method is deprecated. Plug-ins should use -getFloatValue: instead.

Plug-in Manager 1.7

Free Access to Host APIs

The Plug-in Manager no longer requires a plug-in Info.plist file to declare which host APIs the plug-in might use. However, for a plug-in to load on a system with an older version of the Plug-in Manager, the plug-in should still list these APIs in the ProPlugProtocolList—as illustrated by the example projects and Xcode templates.

Final Cut Pro 6

Support for Hidden and Disabled Parameters

Final Cut Pro 6 respects kFxParameterFlag_HIDDEN and kFxParameterFlag_DISABLED. A plug-in can specify these flags when it creates parameters, and change them dynamically with the -setParameterFlags: selector of FxParameterSettingAPI .

Support for Non-Animatable Parameters

Final Cut 6 respects the kFxParameterFlag_NOT_ANIMATABLE flag if it’s set when a parameter is created. A plug-in cannot change this flag dynamically once a parameter is created.

Support for Parameter Groups

Final Cut Pro 6 provides some support for parameter groups. Parameter groups are implemented as labels separating the parameters, similar to After Effects plug-ins in Final Cut Pro. The groups cannot be collapsed or nested.

Support for FxParameterSettingAPI

Final Cut Pro 5.1.2 did not implement the FxParameterSettingAPI and a plug-in could not set the values of its parameters after creation. Final Cut Pro 6 supports this API. Plug-ins can now change the values of their parameters dynamically. For example, an effect might want to implement a presets functionality by changing some parameter values when the user makes a choice from a popup menu.

Parameters Sampled at Arbitrary Times 

A plug-in running under Final Cut Pro 5.1.2 could only sample parameters at the current render time. The only exception to this was image parameters. In Final Cut Pro 6, a plug-in can sample any type of parameter at any time. This allows an effect to examine the values of key-framed parameters at multiple times.

Plug-ins Only Instantiated Once at Startup 

At startup, Final Cut Pro 5.1.2 instantiated each installed plug-in multiple times, sometimes sending the plug-in an -initWithAPIManager: message, sometimes sending the plug-in an -init message. At startup, Final Cut Pro 6 instantiates a plug-in once via -initWithAPIManager:, sends the instance the following messages:

  • -addParameters

  • -variesOverTime

  • -properties

and releases the plug-in instance.

Plug-ins No Longer Instantiated Multiple Times 

Final Cut Pro 5.1.2 created two instances of a plug-in when the plug-in was added to a timeline, using one instance for rendering and the other instance for parameter management. Final Cut Pro 6 creates one instance when a plug-in is added to a timeline and uses this single instance for both rendering and parameter management.

Initial Value of Point Controls Respected

Final Cut Pro 5.1.2 always set the initial value of point controls at the center of the image. Final Cut Pro 6 uses the value specified by the plug-in.

Software Rendering Preferred in More Cases

Final Cut Pro 5.1.2 asked a plug-in to render on the GPU unless the plug-in returned canDoHardware = NO from -frameSetup. Final Cut Pro 6 asks a plug-in to render in software if:

  • The plug-in returns canDoSoftware=YES from -frameSetup

  • AND

  • The plug-in specifies kFxPropertyKey_SupportsRowBytes = YES

Otherwise, Final Cut Pro 6 asks the plug-in to render in hardware.

Consistent Parameter Change Notification

Final Cut Pro 5.1.2 sent plug-ins the -parameterChanged: message only if the parameter change caused a render. If the playhead was not on the item with the effect, Final Cut Pro 5.1.2 did not send the message. Final Cut Pro 6 sends a plug-in this message immediately when a parameter changes, whether the change causes a render or not.

Requesting a Nonexistent Parameter

In Final Cut Pro 5.1.2, a plug-in request for the value of a parameter that had not been added created an Objective-C exception and left Final Cut Pro in an inconsistent state. In Final Cut Pro 6, a request for a parameter that does not exist simply returns NO.

Output Pixel Aspect Ratio Reported Correctly

In Final Cut Pro 5.1.2, if an FxPlug effect was rendering in software and did not change the size of the output image, the output image would always have a pixel aspect ratio of 1.0. In Final Cut Pro 6, the pixel aspect ratio is reported correctly.

Remaining Issues in Final Cut Pro 6

No Support for Onscreen Controls

Final Cut Pro 6 does not support onscreen controls.

No Support for Resizing Output Images

Final Cut Pro 6 does not allow a filter to resize its output image. In addition, it no longer calls the -getOutputWidth:height: method.

Some APIs Available Only During Render 

In Final Cut Pro 6, FxTimingAPI and FxTemporalImageAPI only work correctly if called during one of the following selectors:

  • -getOutputWidth: height: 

  • -frameSetup

  • -renderOutput

  • -frameCleanup

As well, sampling key-framed parameters at arbitrary times only works during these selectors.

Motion 3

Now Notifying Parameter Changes

Motion 2.1 did not call -parameterChanged: when the value of a compound parameter (for example, point, color, histogram, gradient) changed. Motion 3 does.

Fixed Pixel Aspect of Textures from Image Wells

Motion 2.1 did not provide the correct pixelAspect value for FxTexture images retrieved from image well parameters. Motion 3 corrects this problem.

Float Images pixelFormat Correction

Motion 2.1 ordered pixel components RGBA in floating-point images, but the -pixelFormat method returned ARGB. Motion 3 corrects this problem. You can determine whether floating-point images are mislabeled by querying [FxHostCapabilities formatsFloatRGBABitmapsAsARGB].

Temporal Image Retrieval for Image Wells

Motion 2.1 had problems retrieving images from image well parameters at arbitrary times. The resulting images were at incorrect times and upside-down. Motion 3 retrieves these images correctly.

Support for Non-Animated Parameters

Motion 3 adds support for the kFxParameterFlag_NOT_ANIMATABLE flag.

Scale Factor and Resizing Reconciled

Motion 3 corrects an issue in Motion 2.1 that produced incorrect results when resizing either via -getOutputWidth:height: or down-sampling for low quality render.

FxPlug 1.0 SDK

FxPlug 1.0 SDK was introduced together with Motion 2.0 in April 2005. A few months later, version 1.0.2 was released with support for Universal Binary plug-ins but no API changes.

Version 1.1 of the FxPlug SDK was the first version that worked with Final Cut Pro 5.1.2. Version 1.1 added a number of new features, including:

  • Transitions.

  • New FxBaseEffect parent protocol for filters, generators, and transitions.

  • String parameters.

  • A new -properties method that returns a dictionary describing plug-in attributes.

  • 8-bit and floating-point YUV ('r408' and 'r4fl') bitmaps.

  • Row bytes support in bitmaps.

  • SMPTE wipe equivalents for transitions.

  • A new FxHostCapabilities class for determining the capabilities of the host application.