New Kids On The Function Block¶
During its main entry point function, each AEIO plug-in must fill in an AEIO_FunctionBlock, providing pointers to the functions After Effects will call for different file-related tasks.
The table below shows which functions are needed for input, and which ones are needed for output. For a bare-bones implementation, start with the functions that are noted as "Required" in the right column. You can often invoke "best-case" behavior by having After Effects handle the call for you (by returning AEIO_Err_USE_DFLT_CALLBACK
).
For a barebones AEIO for video input only, implement the following functions: AEIO_InitInSpecFromFile
or AEIO_InitInSpecInteractive
(depending on whether the source is a file or interactively generated), AEIO_DisposeInSpec
, AEIO_GetInSpecInfo
, AEIO_DrawSparseFrame
, AEIO_CloseSourceFiles
, and AEIO_InqNextFrameTime
(using AEIO_Err_USE_DFLT_CALLBACK
is fine).
Starting from the IO sample, it is best to leave the other functions defined too, and fill them in further as needed.
AEIO_FunctionBlock4¶
Function | Response | I or O? | Required? |
---|---|---|---|
AEIO_InitInSpecFromFile |
Given a file path, describe its contents to After Effects in the provided AEIO_InSpecH .Use all appropriate "set" calls from the AEGP_IOInSuite) to do so; if there is image data, set its depth, dimensions, and alpha interpretation. If there is audio, describe its channels and sample rate. The file path is a NULL-terminated UTF-16 string with platform separators. AEIO_InitInSpecFromFile( |
Input | Yes, for file-based media |
AEIO_InitInSpecInteractive |
Using some form of user interaction (and not a file path provided by After Effects), describe the audio and video your generated AEIO_InSpecH contains. AEIO_InitInSpecInteractive( |
Input | Yes, for interactiv ely generated media |
AEIO_DisposeInSpec |
Free an AEIO_InSpecH .AEIO_DisposeInSpec( |
Input | Yes |
AEIO_FlattenOptions |
For the given AEIO_InSpecH , return a flattened version of the data contained in its options handle.Obtain the unflattened options handle using AEGP_GetInSpecOptionsHandle .AEIO_FlattenOptions( |
Input | No |
AEIO_InflateOptions |
For the given AEIO_InSpecH , create (using AEGP_SetInSpecOptionsHandle )an unflattened version of its flattened option data. AEIO_InflateOptions( |
Input | No |
AEIO_SynchInSpec |
AEIO_Err_USE_DFLT_CALLBACK allowed.Inspect the AEIO_InSpecH , update its options if necessary), and indicate whether or not you made changes.AEIO_SynchInSpec( |
Input | No |
AEIO_GetActiveExtent |
AEIO_Err_USE_DFLT_CALLBACK allowed.Populate the provided A_LRect with the active extent of the file's pixels at the given time.AEIO_GetActiveExtent( |
Input | Yes |
AEIO_GetInSpecInfo |
Provide a few strings in AEIO_Verbiage to describe the file, which will appear in the Project panel.This includes the strings used to describe the file type and subtype (the codec). AEIO_GetInSpecInfo( This function gets called OFTEN; every time we refresh the project panel. Keep allocations to a minimum. In the AEIOs that ship with After Effects, we check for a valid optionsH (using AEGP_GetInSpecOptionsHandle );if we find one, we use the information from within it. If not, we do nothing. This is important; if your AEIO handles still images, this function *will* get called for the folder containing the stills. Hopefully, there won't be an optionsH associated with it (unless you're writing a truly bizarre AEIO). |
Input | Yes |
AEIO_DrawSparseFrame |
Draw a frame from the AEIO_InSpecH .The PF_EffectWorld* contains the width and height to use, but make sure you take the required_region0 into account, if it's not NULL.AEIO_DrawSparseFrame( NOTE: return data as linear light (1.0), and After Effects will perform any necessary transformations to bring the footage into the working colorspace. |
Input | Yes |
AEIO_GetDimensions |
AEIO_Err_USE_DFLT_CALLBACK allowed. Provide the dimensions (and, if necessary, scaling factor) of the video in the AEIO_InSpecH.AEIO_GetDimensions( |
Input | No |
AEIO_GetDuration |
AEIO_Err_USE_DFLT_CALLBACK allowed. Provide the duration of an AEIO_InSpecH , in seconds.AEIO_GetDuration( |
Input | No |
AEIO_GetTime |
AEIO_Err_USE_DFLT_CALLBACK allowed. Provide the timebase of an AEIO_InSpecH .AEIO_GetTime( Here are the values we use internally for common timebases: 29.97 fps: scale = 100; value= 2997; 59.94 fps: scale = 50; value = 2997; 23.976 fps: scale = 125; value = 2997; 30 fps: scale = 1; value = 30; 25 fps: scale = 1; value = 25; |
Input | No |
AEIO_GetSound |
AEIO_Err_USE_DFLT_CALLBACK allowed. Provide sound from an AEIO_InSpecH , at the quality described.AEIO_GetSound( AEIO_SndQuality may be:
|
Input | No |
AEIO_InqNextFrameTime |
AEIO_Err_USE_DFLT_CALLBACK allowed.Provide the time of the next frame (in the source footage's timebase) within the AEIO_InSpecH .AEIO_InqNextFrameTime( |
Input | Yes |
AEIO_InitOutputSpec |
AEIO_Err_USE_DFLT_CALLBACK allowed.Perform any initialization necessary for a new AEIO_OutSpecH , and indicate whether you made changes.AEIO_InitOutputSpec( NOTE: The first time your AEIO is used, After Effects caches the last-known-good optionsH in its preferences. When testing this function, delete your preferences often. |
Output | Yes |
AEIO_GetFlatOutputOptions |
Describe (in an AEIO_Handle ) the output options for an AEIO_OutSpecH ,in a disk-safe flat data structure (one that does not reference external memory). Note that your output options must be cross-platform, so pay attention to byte ordering issues. AEIO_GetFlatOutputOptions( |
Output | Yes |
AEIO_DisposeOutputOptions |
AEIO_Err_USE_DFLT_CALLBACK allowed. Free the memory for the output options passed in.AEIO_DisposeOutputOptions( |
Output | No |
AEIO_UserOptionsDialog |
Display an output settings dialog (select TIFF output within After Effects to see when this dialog will occur). Store this information in an options handle using AEGP_SetInSpecOptionsHandle .AEIO_UserOptionsDialog( |
Output | No |
AEIO_GetOutputInfo |
Describe (in text) the output options in an AEIO_OutSpecH .AEIO_GetOutputInfo( |
||
AEIO_OutputInfoChanged |
Update the AEIO_OutSpecH based on the current settings (using the various Get functions to obtain them).AEIO_OutputInfoChanged( |
Output | No |
AEIO_SetOutputFile |
AEIO_Err_USE_DFLT_CALLBACK allowed. Set the file path for output of an AEIO_OutSpecH .Return AEIO_Err_USE_DEFAULT_CALLBACK unless you've changed the path.The file path is a NULL-terminated UTF-16 string with platform separators. AEIO_SetOutputFile( |
Output | Yes |
AEIO_StartAdding |
Prepare to add frames to the output file. This is a good time to create the ouput file(s) on disk, and to write any header information to such files. This is also your first opportunity to allocate pixel buffers based on valid output spec values. AEIO_StartAdding( |
Output | Yes, for writing formats that support multiple frames |
AEIO_AddFrame |
Add frame(s) to output file. You may pass a pointer to a function you want called if the user interrupts the render.AEIO_AddFrame( |
Output | Yes, for writing formats that support multiple frames |
AEIO_EndAdding |
Perform any clean-up associated with adding frames.AEIO_EndAdding( |
Output | Yes, for writing formats that support multiple frames |
AEIO_OutputFrame |
Output a single frame.AEIO_OutputFrame( |
Output | Yes, for writing formats that support a single frame |
AEIO_WriteLabels |
AEIO_Err_USE_DFLT_CALLBACK allowed. Set alpha interpretation and field usage information for the AEIO_OutSpecH .Indicate in AEIO_LabelFlags which flags you wrote.AEIO_WriteLabels( |
Output | Yes |
AEIO_GetSizes |
AEIO_Err_USE_DFLT_CALLBACK allowed. Provide information about file size and remaining free space on output volume.AEIO_GetSizes( |
Output | Yes |
AEIO_Flush |
Destroy any options or user data associated with the OutSpecH .AEIO_Flush( |
||
AEIO_AddSoundChunk |
Add the given sound to the output file.AEIO_AddSoundChunk( |
Output | Yes, for writing formats with audio |
AEIO_Idle |
Optional. Do something with idle time. AEIO_Err_USE_DFLT_CALLBACK is not supported.AEIO_Idle( |
Output | No |
AEIO_GetDepths |
Set AEIO_OptionsFlags to indicate which pixel and color depths are valid for your output format.See the discussion on Export Bit-Depth. AEIO_GetDepths( |
Output | Yes |
AEIO_GetOutputSuffix |
AEIO_Err_USE_DFLT_CALLBACK allowed. Describe the three character extension for the output file.AEIO_GetOutputSuffix( |
Output | Yes |
AEIO_SeqOptionsDlg |
Display a footage options dialog, and indicate whether the user made any changes.AEIO_SeqOptionsDlg( |
Input | No |
AEIO_GetNumAuxChannels |
Enumerate the auxiliary (beyond red, green, blue and alpha) channels of data contained in an AEIO_InSpecH .AEIO_GetNumAuxChannels( |
Input | No |
AEIO_GetAuxChannelDesc |
Describe the data type, name, channel, and dimensionality of an auxiliary data channel.AEIO_GetAuxChannelDesc( |
Input | No |
AEIO_DrawAuxChannel |
Draw the auxiliary channel(s) from an AEIO_InSpecH .AEIO_DrawAuxChannel( |
||
AEIO_FreeAuxChannel |
Free data associated with an auxiliary channel.AEIO_FreeAuxChannel( |
Input | No |
AEIO_Num AuxFiles |
Enumerate the files needed to render the given AEIO_InSpecH .This function and AEIO_GetNthAuxFileSpec will be called when the user chooses File > Dependencies > Collect Files... Here your AEIO tells AE what the associated files are. AEIO_NumAuxFiles( |
Input | No |
AEIO_GetNthAuxFileSpec |
Retrieve data from the nth auxiliary file, for the specified frame. The path is a handle to a NULL-terminated A_UTF16Char string, and must be disposed with AEGP_FreeMemHandle .AEIO_GetNthAuxFileSpec( |
Input | No, if no aux files |
AEIO_CloseSourceFiles |
Close (or open, depending upon closeB) the source files for an AEIO_InSpecH .When the user Collects Files, the AEIO will first be asked to close its source files, then re-open them. AEIO_CloseSourceFiles( TRUE for close, FALSE for open. |
Input | Yes |
AEIO_CountUserData |
Enumerate the units of user data associated with the AEIO_InSpecH .AEIO_CountUserData( |
||
AEIO_SetUserData |
Set user data (of the given index and type) for the given AEIO_OutSpecH .AEIO_SetUserData( |
Output | No |
AEIO_GetUserData |
Describe the user data (at the index and of the type given) associated with the AEIO_InSpecH .AEIO_GetUserData( |
Input | No |
AEIO_AddMarker |
Associate a marker of the specified type, at the specified frame, with the AEIO_OutSpecH .You may provide an interrupt function to handle user cancellation of this action. AEIO_AddMarker( |
Output | No |
AEIO_VerifyFileImportable |
Indicate (by setting importablePB) whether or not the plug-in can import the file. Note that After Effects has already done basic extension checking; you may wish to open the file and determine whether or not it's valid. This can be a time-consuming process; most AEIOs that ship with After Effects simply return TRUE, and deal with bad files during AEIO_InitInSpecFromFile .The file path is a NULL-terminated UTF-16 string with platform separators. AEIO_VerifyFileImportable( |
Input | No |
AEIO_UserAudioOptionsDialog |
Display an audio options dialog.AEIO_UserAudioOptionsDialog( |
Output | No |
AEIO_AddMarker3 |
Add a marker, with a flag specifying whether or not this is a composition marker.AEIO_AddMarker3( |
Output | No |
AEIO_GetMimeType |
Describe the output mime type. This is used for XMP support.AEIO_GetMimeType( |
Output | No |
What Goes In¶
These functions manage an input specification, After Effects' internal representation of data gathered from any source.
Any image or audio data in After Effects (except solids) is obtained from an input specification handle, or AEIO_InSpecH
.
AEGP_IOInSuite5¶
Function | Purpose |
---|---|
AEGP_GetInSpecOptionsHandle |
Retrieves the options data (created by your AEIO) for the given AEIO_InSpecH .AEGP_GetInSpecOptionsHandle( |
AEGP_SetInSpecOptionsHandle |
Sets the options data for the given AEIO_InSpecH .Must be allocated using the Memory Suite. AEGP_SetInSpecOptionsHandle( |
AEGP_GetInSpecFilePath |
Retrieves the file path for the AEIO_InSpecH .The file path is a handle to a NULL-terminated A_UTF16Char string, and must be disposed with AEGP_FreeMemHandle .AEGP_GetInSpecFilePath( |
AEGP_GetInSpecNativeFPS |
Retrieves the frame rate of the AEIO_InSpecH .AEGP_GetInSpecNativeFPS( |
AEGP_SetInSpecNativeFPS |
Sets the frame rate of the AEIO_InSpecH .AEGP_SetInSpecNativeFPS( |
AEGP_GetInSpecDepth |
Retrieves the bit depth of the image data in the AEIO_InSpecH .AEGP_GetInSpecDepth( |
AEGP_SetInSpecDepth |
Indicates to After Effects the bit depth of the image data in the AEIO_InSpecH .AEGP_SetInSpecDepth( |
AEGP_GetInSpecSize |
Retrieves the size (in bytes) of the data referenced by the AEIO_InSpecH .AEGP_GetInSpecSize( |
AEGP_SetInSpecSize |
Indicates to After Effects the size (in bytes) of the data referenced by the AEIO_InSpecH .AEGP_SetInSpecSize( |
AEGP_GetInSpecInterlaceLabel |
Retrieves field information for the AEIO_InSpecH .AEGP_GetInSpecInterlaceLabel( |
AEGP_SetInSpecInterlaceLabel |
Specifies field information for the AEIO_InSpecH .AEGP_SetInSpecInterlaceLabel( |
AEGP_GetInSpecAlphaLabel |
Retrieves alpha channel interpretation information for the AEIO_InSpecH .AEGP_GetInSpecAlphaLabel( |
AEGP_SetInSpecAlphaLabel |
Sets alpha channel interpretation information for the AEIO_InSpecH .AEGP_SetInSpecAlphaLabel( |
AEGP_GetInSpecDuration |
Retrieves the duration of the AEIO_InSpecH .AEGP_GetInSpecDuration( |
AEGP_SetInSpecDuration |
Sets the duration of the AEIO_InSpecH .NOTE: As of 5.5, this must be called, even for frame-based file formats. If you don't set the A_Time.scale to something other than zero, your file(s) will not import.This will be fixed in future versions. AEGP_SetInSpecDuration( |
AEGP_GetInSpecDimensions |
Retrieves the width and height of the image data in the AEIO_InSpecH .AEGP_GetInSpecDimensions( |
AEGP_SetInSpecDimensions |
Indicates to After Effects the width and height of the image data in the AEIO_InSpecH .AEGP_SetInSpecDimensions( |
AEGP_InSpecGetRational Dimensions |
Retrieves the width, height, bounding rect, and scaling factor applied to an AEIO_InSpecH .AEGP_InSpecGetRationalDimensions( |
AEGP_GetInSpecHSF |
Retrieves the horizontal scaling factor applied to an AEIO_InSpecH .AEGP_GetInSpecHSF( |
AEGP_SetInSpecHSF |
Sets the horizontal scaling factor of an AEIO_InSpecH .AEGP_SetInSpecHSF( |
AEGP_GetInSpecSoundRate |
Obtains the sampling rate (in samples per second) for the audio data referenced by the AEIO_InSpecH .AEGP_GetInSpecSoundRate( |
AEGP_SetInSpecSoundRate |
Sets the sampling rate (in samples per second) for the audio data referenced by the AEIO_InSpecH .AEGP_SetInSpecSoundRate( |
AEGP_GetInSpecSoundEncoding |
Obtains the encoding method (signed PCM, unsigned PCM, or floating point) from an AEIO_InSpecH.AEGP_GetInSpecSoundEncoding( |
AEGP_SetInSpecSoundEncoding |
Sets the encoding method of an AEIO_InSpecH.AEGP_SetInSpecSoundEncoding( |
AEGP_GetInSpecSoundSampleSize |
Retrieves the bytes-per-sample (1,2, or 4) from an AEIO_InSpecH .AEGP_GetInSpecSoundSampleSize( |
AEGP_SetInSpecSoundSampleSize |
Set the bytes per sample of an AEIO_InSpecH .AEGP_SetInSpecSoundSampleSize( |
AEGP_GetInSpecSoundChannels |
Determines whether the audio in the AEIO_SndChannels is mono or stereo.AEGP_GetInSpecSoundChannels( |
AEGP_SetInSpecSoundChannels |
Sets the audio in an AEIO_SndChannels to mono or stereo.AEGP_SetInSpecSoundChannels( |
AEGP_AddAuxExtMap |
If your file format has auxiliary files which you want to prevent users from opening directly, pass it's extension, file type and creator to this function to keep it from appearing in input dialogs. AEGP_AddAuxExtMap( |
AEGP_SetInSpecEmbeddedColorProfile |
In case of RGB data, if there is an embedded icc profile, build an AEGP_ColorProfile out ofthis icc profile using AEGP_GetNewColorProfileFromICCProfile from AEGP_ColorSettingsSuite5and set the profile description set to NULL. In case of non-RGB data, if there is an embedded non-RGB icc profile or you know the color space the data is in, set the color profile set to NULL, and provide the description as a NULL-terminated unicode string. Doing this disables color management UI that allows user to affect profile choice in the application UI. If you are unpacking non-RGB data directly into working space (to get working space use AEGP_GetNewWorkingSpaceColorProfile ), you are done.If you are unpacking non-RGB data into specific RGB color space, you must pass the profile describing this space to AEGP_SetInSpecAssignedColorProfile below.Otherwise, your RGB data will be incorrectly interpreted as being in working space. Either color profile or profile description should be NULL in this function. You cannot use both. AEGP_SetInSpecEmbeddedColorProfile( |
AEGP_SetInSpecAssignedColorProfile |
Assign a valid RGB color profile to the footage.AEGP_SetInSpecAssignedColorProfile( |
AEGP_GetInSpecNativeStartTime |
New in CC. Retrieves the native start time of the footage.AEGP_GetInSpecNativeStartTime( |
AEGP_SetInSpecNativeStartTime |
New in CC. Assign a native start time to the footage.AEGP_SetInSpecNativeStartTime( |
AEGP_ClearInSpecNativeStartTime |
New in CC. Clear the native start time of the footage. Setting the native start time to 0 using AEGP_SetInSpecNativeStartTime doesn't do this.It still means there is a special native start time provided. AEGP_ClearInSpecNativeStartTime( |
AEGP_GetInSpecNativeDisplayDropFrame |
New in CC. Retrieve the drop-frame setting of the footage.AEGP_GetInSpecNativeDisplayDropFrame( |
AEGP_SetInSpecNativeDisplayDropFrame |
New in CC. Assign the drop-frame setting of the footage.AEGP_SetInSpecNativeDisplayDropFrame( |
What Goes Out¶
These functions manage all interactions with an output specification in After Effects' render queue.
AEGPIOOutSuite4¶
Function | Purpose |
---|---|
AEGP_GetOutSpecOptionsHandle |
Retrieves the Options for the AEIO_OutSpecH .AEGP_GetOutSpecOptionsHandle( |
AEGP_SetOutSpecOptionsHandle |
Sets the Options for the AEIO_OutSpecH .AEGP_SetOutSpecOptionsHandle( |
AEGP_GetOutSpecFilePath |
Obtains the path for the AEIO_OutSpecH .The file path is a handle to a NULL-terminated A_UTF16Char string, and must be disposed with AEGP_FreeMemHandle .If file_rsrvdPB returns TRUE , the plug-in should not overwrite it(After Effects has already created an empty file); doing so can cause network renders to fail. AEGP_GetOutSpecFilePath( |
AEGP_GetOutSpecFPS |
Obtains the frames per second of the AEIO_OutSpecH .AEGP_GetOutSpecFPS( |
AEGP_SetOutSpecNativeFPS |
Sets the frames per second of the AEIO_OutSpecH .AEGP_SetOutSpecNativeFPS( |
AEGP_GetOutSpecDepth |
Obtains the pixel bit depth of the AEIO_OutSpecH .AEGP_GetOutSpecDepth( |
AEGP_SetOutSpecDepth |
Sets the pixel bit depth of the AEIO_OutSpecH .AEGP_SetOutSpecDepth( |
AEGP_GetOutSpecInterlaceLabel |
Obtains field information for the AEIO_OutSpecH .AEGP_GetOutSpecInterlaceLabel( |
AEGP_SetOutSpecInterlaceLabel |
Set the field information for the AEIO_OutSpecH .AEGP_SetOutSpecInterlaceLabel( |
AEGP_GetOutSpecAlphaLabel |
Obtains alpha interpretation information for the AEIO_OutSpecH .AEGP_GetOutSpecAlphaLabel( |
AEGP_SetOutSpecAlphaLabel |
Sets the alpha interpretation for the AEIO_OutSpecH .AEGP_SetOutSpecAlphaLabel( |
AEGP_GetOutSpecDuration |
Obtains the duration of the AEIO_OutSpecH .AEGP_GetOutSpecDuration( |
AEGP_SetOutSpecDuration |
Sets the duration of the AEIO_OutSpecH .AEGP_SetOutSpecDuration( |
AEGP_GetOutSpecDimensions |
Obtains the dimensions of the AEIO_OutSpecH .AEGP_GetOutSpecDimensions( |
AEGP_GetOutSpecHSF |
Obtains the horizontal scaling factor of the AEIO_OutSpecH .AEGP_GetOutSpecHSF( |
AEGP_SetOutSpecHSF |
Sets the horizontal scaling factor of the AEIO_OutSpecH .AEGP_SetOutSpecHSF( |
AEGP_GetOutSpecSoundRate |
Obtains the sampling rate for the AEIO_OutSpecH .AEGP_GetOutSpecSoundRate( |
AEGP_SetOutSpecSoundRate |
Sets the sampling rate for the AEIO_OutSpecH .AEGP_SetOutSpecSoundRate( |
AEGP_GetOutSpecSoundEncoding |
Obtains the sound encoding format of the AEIO_OutSpecH .AEGP_GetOutSpecSoundEncoding( |
AEGP_SetOutSpecSoundEncoding |
Sets the sound encoding format of the AEIO_OutSpecH .AEGP_SetOutSpecSoundEncoding( |
AEGP_GetOutSpecSoundSampleSize |
Obtains the bytes-per-sample of the AEIO_OutSpecH .AEGP_GetOutSpecSoundSampleSize( |
AEGP_SetOutSpecSoundSampleSize |
Sets the bytes-per-sample of the AEIO_OutSpecH .AEGP_SetOutSpecSoundSampleSize( |
AEGP_GetOutSpecSoundChannels |
Obtains the number of sounds channels in the AEIO_OutSpecH .AEGP_GetOutSpecSoundChannels( |
AEGP_SetOutSpecSoundChannels |
Sets the number of sounds channels in the AEIO_OutSpecH .AEGP_SetOutSpecSoundChannels( |
AEGP_GetOutSpecIsStill |
Determines whether the AEIO_OutSpecH is a still.AEGP_GetOutSpecIsStill( |
AEGP_GetOutSpecPosterTime |
Obtains the time of the AEIO_OutSpecH's poster frame.AEGP_GetOutSpecPosterTime( |
AEGP_GetOutSpecStartFrame |
Obtains the time of the first frame in the AEIO_OutSpecH .AEGP_GetOutSpecStartFrame( |
AEGP_GetOutSpecPullDown |
Obtains the pulldown phase of the AEIO_OutSpecH .AEGP_GetOutSpecPullDown( |
AEGP_GetOutSpecIsMissing |
Passes back TRUE if there is no AEIO_OutSpecH .AEGP_GetOutSpecIsMissing( |
AEGP_GetOutSpecShouldEmbedICCProfile |
Returns TRUE if the AEIO should embed a color profile in the output.AEGP_GetOutSpecShouldEmbedICCProfile( |
AEGP_GetNewOutSpecColorProfile |
Returns an (opaque) ICC color profile for embedding in the AEIO's output. Must be disposed with AEGP_DisposeColorProfile .AEGP_GetNewOutSpecColorProfile( |
AEGP_GetOutSpecOutputModule |
Returns the AEGP_RQItemRefH and AEGP_OutputModuleRefH associated with the given AEIO_OutSpecH .Fails if the render queue item is not found, or if AEIO_OutSpecH is not a confirmed outH and is a copy,i.e. if the Output Module settings dialog is open and the user hasn't hit OK. AEGP_GetOutSpecOutputModule( |