Hello everyone,
I am working on an effect plugin.
I just wonder if it is possible to check the current layer index where the plugin is applied.
So the plugin knows it is applied to layer # xx.
Thanks.
Hello everyone,
I am working on an effect plugin.
I just wonder if it is possible to check the current layer index where the plugin is applied.
So the plugin knows it is applied to layer # xx.
Thanks.
Hi,
I am creating a small utility plug-in for After Effect, which has to launch some other applications like Photoshop, notepad etc.
For doing this, i would like to add menu like File, Edit etc. but it seems like that After Effect doesn't allow adding root menus, it allows only adding menus to some predefined locations (like AEGP_Menu_APPLE, AEGP_Menu_FILE, AEGP_Menu_EDIT ....). I am able to add menus to File menu or any other menu using AEGP_InsertMenuCommand(...). But, I am not able to find a way to add a menu and then submenu's to that menu.
I want to create a menu like this:
File Edit .....
New
.....
.....
My_launcher_Menu --> Photoshop
Notepad
One Note
Can any one tell me, how to add menu and submenu to that menu, or inserting root menus like File edit view etc....
Hi,
I'm wondering if there's something like a special developer license for AE and PS to develop with. I don't want to screw with the pc in production, nor with the other pc that my account is associated with. I'd like to develop inside a VM, as that will ensure I can screw around without damaging the production machine(s). Do any of you have experience with that?
Thanks in advance,
Bart
Hello,
Basically I'm looping through all of the footage project items and trying to get the footage path from them. Here's the code I have inside of the loop.
AEGP_ItemType itemType = NULL;
ERR(suites.ItemSuite6()->AEGP_GetNextProjItem(projH, itemH, &itemH));
if (itemH == NULL) {
break;
}
ERR(suites.ItemSuite6()->AEGP_GetItemType(itemH, &itemType));
if (itemType == AEGP_ItemType_FOOTAGE) {
numFootage++;
AEGP_FootageH footageH;
ERR(suites.FootageSuite5()->AEGP_GetMainFootageFromItem(itemH, &footageH));
A_char newItemName[AEGP_MAX_ITEM_NAME_SIZE] = {""};
wchar_t footagePath[AEGP_MAX_PATH_SIZE];
ERR(suites.ItemSuite6()->AEGP_GetItemName(itemH, newItemName));
AEGP_MemHandle pathH = NULL;
ERR(suites.FootageSuite5()->AEGP_GetFootagePath(footageH, 0, AEGP_FOOTAGE_MAIN_FILE_INDEX, &pathH));
ERR(suites.MemorySuite1()->AEGP_LockMemHandle(pathH, reinterpret_cast<void**>(&footagePath)));
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
const std::string utf8_string = converter.to_bytes(footagePath);
std::ofstream tempFile;
tempFile.open ("C:\\temp\\log1.txt");
tempFile << utf8_string;
tempFile.close();
ERR(suites.MemorySuite1()->AEGP_UnlockMemHandle(pathH));
ERR(suites.MemorySuite1()->AEGP_FreeMemHandle(pathH));
}
I'm getting the footagePath
I then convert the UTF-16 (wchar_t) pointer to a UTF-8 string
Then I write that UTF-8 string to a temp file and it always outputs the following.
펐㛻
Can I please have some guidance on this? Thanks!
In AE cc 2017wecanseethe variety of video formats like, AVI, Mp3,Mov etc etc.,while rendering the projects.But where it installed these codecs in my Hard Disk, can I brows in my filemanager to see where it installed?
Hi,
I'm trying to bring a plugin that we have working on AE CS4 over to PPro CS4. I can't seem to get a layer handle in the latest PPro - though I'm fairly sure this code worked in PPro 2.0
if (! in_data->pica_basicP ) return;
AEGP_PFInterfaceSuite1* i_pf_interface_suiteP = 0;
if ( 0 != in_data->pica_basicP->AcquireSuite(kAEGPPFInterfaceSuite, kAEGPPFInterfaceSuiteVersion1, (const void**)&i_pf_interface_suiteP) ) return;
AEGP_LayerH layerH = {0}; A_Err err;
if ( (err = i_pf_interface_suiteP->AEGP_GetEffectLayer(in_data->effect_ref, &layerH )) == 0 ) {
//... do stuff...
}
The call to AEGP_GetEffectLayer is giving back an error of 515. I can't look up the code using AEGP_GetLastErrorMessage as PPro doesn't seem to provide a AEGP_UtilitySuite, and I can't find this error code in the SDK headers (I'm using the AE CS3 SDK).
Can anyone help?
thanks,
Hugh
Hi guys,
I m in a AE plugin development cycle recently.
I m trying to write my first aegp plugin, apllying one of my effect on multiple layers.
I need to specify one color before the processing, so i was wondering how to to that in my aegp.
So i have 3 questions.
1- how to get a UI dialog to pop up when my aegp menu item is clicked
2- can in get a way to pick up a color from my composition and transmit it to my aegp through the ui
3- is there a way to create a top menu category for aegp, then add to this menu our own item, or can we only add it in the pre-defined places (effects, layer, import etc...)
thank you in advance for you help.
Regards.
The After Effects CS5 SDK Guide makes the following claim:
"On Mac OS, the 32-bit and 64-bit plug-ins can be combined into a fat binary, using the Mac OS tool ‘lipo’."
In practice it doesn't seem to be possible to create a single Mac plugin bundle that would be compatible with both 32-bit CS4 and 64-bit CS5.
Combining the binaries using lipo does work, but the problem is that there's a single resource file, and CS4 and CS5 require different values for "AE_Effect_Spec_Version" in the PiPL.
Changing the required spec version value for CS4 compatibility causes a crash in CS5, and vice versa.
Hey guys,
I'm trying to execute a script from withing the panelor example from sdk6.
PanelatorUI_Plat.cpp
...
case WM_COMMAND:
if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == BtnID){
i_numClicks++;
AEGP_ExecuteScript(NULL, "alert('X');", FALSE, NULL, NULL);
InvalidateAll();
handledB = true;
}
It won't compile => 'AEGP_ExecuteScript': identifier not found..
no idea what I'm doing really
thanks !
I'm trying to use AEGP_OpenProjectFromPath to open a manualy specificed .aep
I've tried this with error:
const A_UTF16Char *pathZ = reinterpret_cast<const A_UTF16Char *>(L"/transfer_test.aep"); suites.ProjSuite6()->AEGP_OpenProjectFromPath(pathZ, &my_projH);
After Effects error: Can't import file "var": unsupported filetype or extension. ( 0 :: 1 )
There are no examples that use AEGP_ProjSuite6's IO functions.
Any help would be great. Thanks.
Hi,
I'm trying to load a plugin, which is not located in the plugin-paths of After Effects from another plugin. It seems to load the aex(dll) and execute the main function fine, but afterwards it crashes immediately and I have no idea why.
This is how my pluginLoader-PlugIn looks like:
1. I created a commandHook to be able to trigger the pluginLoad from the Edit Menu
2. for the actual load of the dll I use the following commands:
AEGP_SuiteHandler suites(basic_suite); std::string dllName = "C:/PATH/TO/plugin.aex"; // defining type and order of the arguments of the entry function typedef A_Err (*args_type)(SPBasicSuite *pica_basicP, A_long major_versionL, A_long minor_versionL, A_long aegp_plugin_id, AEGP_GlobalRefcon *global_refconP); args_type pluginEntryMethod = NULL; // loading the dll(aex) and the entry function # ifdef _WIN32 HMODULE hDLL = LoadLibrary(dllName.c_str()); if (hDLL != NULL) { pluginEntryMethod = (args_type) GetProcAddress(hDLL, "EntryPointFunc"); } else { return err; } # else void *pLib = ::dlopen(szMyLib, RTLD_LAZY); if (pLib != NULL) { pluginEntryMethod = (args_type)::dlsym(pLib, "EntryPointFunc"); } else { return err; } # endif if (pluginEntryMethod != NULL) { // hardcoding the plugin version A_long mavL = 0L; A_long mivL = 1L; AEGP_PluginID plId; // to get a valid plugin-id I use this command suites.UtilitySuite3()->AEGP_RegisterWithAEGP(*globalRefcon, "nameOfPlugin", &plId); // I create copy of the refcon and the suite AEGP_GlobalRefcon newRefcon(*globalRefcon); SPBasicSuite newSuite(*basic_suite); pluginEntryMethod(&newSuite, mavL, mivL, plId, &newRefcon); } # ifdef _WIN32 FreeLibrary(hDLL); # else dlclose(pLib); # endif
If I run After Effects with the debugger, the EntryFunction of the new plugin runs through without errors. But Then it crashes and stops at random positions: sometimes in the IdleHook of the newly loaded Plugin, sometimes in the MenuHook.
Does anyone have an idea, what I am doing wrong?
btw: when I copy the second plugin in the default Afx-Plugin-Folder it loads fine and seems to work correct.
Thanks for your help!
Martin
hi,all:
the layer has only one video file,is there a way to get the file's full path?i have read the AE's SDK file,but i cann't find the way to get the file path of the layer file.the ITEMSUITE8 has AEGP_GetTypeName/AEGP_GetItemName/AEGP_GetItemComment,but doesn't have AEGP_GetItemFilePath.any suggestion will be thankful!
Hi,
I'm trying to extract the frame displayed to the user in both After Effects and Premiere Pro.
Both support the AE Effect API, however that seems to be insufficient, as the PF_Cmd_RENDER event is only called when these products call it, and there is no way to know if the current frame requested is what the user is currently seeing.
The AE SDK provides the Grabba sample which does the trick on AE. There is no event for time ruler repositioning, but that can be worked around by hooking into the idle event.
I have not found a way to do this in Premiere PRO however, either in the samples on in the documentation.
Does anyone know of a way to get the currently displayed frame (and only that) from Premiere Pro?
Or alternatively a way to filter the incoming frames in the AE Effect API?
Hello
I have a problem using script from sdk.
When in script editor I run this code, my project load with any problem
function openProject(filename) {
if (app.project != NULL)
app.project.close(CloseOptions.DO_NOT_SAVE_CHANGES);
var myFile = File(filename);
if (myFile.exists)
app.open(myFile);
else
writeLn("no such file or directory!");
}
openProject("C:\\MonDossier\\bandeau défilant.aep");
But when my plugin call, this function, After Effect crash "an strange error with ae.blitpipe"
/* some includes here! */
#include <AEGP_SuiteHandler.h>
#include <AE_GeneralPlug.h>
#define OPEN_PROJECT "function openProject(filename) { \
if (app.project != NULL) \
app.project.close(CloseOptions.DO_NOT_SAVE_CHANGES); \
var myFile = File(filename); \
if (myFile.exists) \
app.open(myFile); \
else \
writeLn(\"no such file or directory!\"); \
} \
openProject(\"%s\");"
std::string Do(SPBasicSuite* sp, AEGP_PluginID id)
{
std::string lReturnedValue;
try
{
A_Err err = A_Err_NONE;
AEGP_SuiteHandler(sp);
AEGP_MemHandle resultMemH = NULL, errorMemH = NULL;
A_char *resultAC = NULL, *errorAC = NULL;
A_char scriptAC[AEGP_MAX_MARKER_URL_SIZE] = {'\0'};
A_bool encodingB = TRUE; // my file to load may have non ascii char
sprintf(scriptAC, OPEN_PROJECT, "C:\\\\MonDossier\\\\bandeau d\u00E9filant.aep");
ERR(suites.UtilitySuite5()->AEGP_ExecuteScript(id, scriptAC, encodingB, &resultMemH, &errorMemH));
bool lAnErrorOccured = (err == A_Err_NONE);
ERR(suites.MemorySuite1()->AEGP_LockMemHandle(resultMemH, reinterpret_cast<void**>(&resultAC)));
ERR(suites.MemorySuite1()->AEGP_LockMemHandle(errorMemH, reinterpret_cast<void**>(&errorAC)));
lReturnedValue.assign(resultAC, strlen(resultAC));
if (lAnErrorOccured)
{
lReturnedValue.append("ERROR: ");
lReturnedValue.append(errorAC, strlen(errorAC));
}
ERR(suites.MemorySuite1()->AEGP_FreeMemHandle(resultMemH));
ERR(suites.MemorySuite1()->AEGP_FreeMemHandle(errorMemH));
}
catch(...)
{
/* Do something here! */
}
return lReturnedValue;
}
Hi All,
I'm running a script form AEGP using AEGP_ExecuteScript(). I want the value(in my case a string) which is returned from the script.
AEGP_ExecuteScript ( AEGP_PluginID inPlugin_id,
const A_char* inScriptZ,
const A_Boolean platform_encodingB,
AEGP_MemHandle *outResultPH0,
AEGP_MemHandle *outErrStringPH0);
I tried passing a MemHandle to outResultPH0, but the values returned are junk.
Is it possible to get the return value from the script?
Thanks,
Dheeraj
AE5.0のプラグインの試用版をダウンロード、インストールしましたが、particularなどの機能を使用しようとすると
エラーが発生します。
After Effects: effect cannot change non-dynamic flag bits during PF_Cmd_QUERY_DYNAMIC_FLAGS( 25 、 228 )
色々と調べましたが、ほとんど情報がありませんでした。
また、マニュアルらしきものから以下の記述を発見しました。
解決法が分かる方いらっしゃいますでしょうか。
よろしくお願いします。
Table 6: PF_OutFlags2
Flag |
Indicates |
PF_OutFlag2_SUPPORTS_QUERY_DYNA MIC_FLAGS |
The effect responds to PF_Cmd_QUERY_DYNAMIC_FLAGS. Must be set in the PiPL and during PF_Cmd_GLOBAL_SETUP. |
PiPLs
Plug-In Property Lists, or PiPLs, are resources which indicate the behavior of a plug-in. These resources are a legacy originated by Adobe Photoshop, and
have been largely supplanted within After Effects by PF_Cmd_GLOBAL_SETUP. However, the behaviors indicated during global setup must agree with those in the PiPL.
For MacOS development, you can use Mathemaesthetic’s Resorcerer (and the PiPL resource template provided in the SDK) to edit PiPLs; ResEdit cannot visually edit a PiPL resource. Use DeRez to make a .r file from your PiPL resource to use the same .r file for both MacOS and Windows (as the SDK does). The PiPL format is defined in AE_General.r; use this as your prefix file in your CodeWarrior project’s Settings > Rez dialog.