Quantcast
Channel: Adobe Community : Popular Discussions - After Effects SDK
Viewing all 73444 articles
Browse latest View live

plugin for AE

$
0
0

Hi, I'll work like that project( 3M GTG Rotation Screen - YouTube ). What I need and where will be start like that project.( which IDE, which language, which library ) I need that information basiclly.

 

Thanks for reading.


Best way to store all pixels from src layer?

$
0
0

I'm trying to create an image filter plugin for AE. The template project from the SDK ("Skeleton project")  uses :

 

suites.Iterate8Suite1()->iterate( in_data,

       0, // progress base

       linesL, // progress final

       &params[SKELETON_INPUT]->u.ld, // src

       NULL, // area - null for all pixels

       (void*)&tInfo, // refcon - your custom data pointer

       drawTriangles8, // pixel function pointer

       output));

 

 

But I want to run my image filter algorithm on an int array      int[ ] data_array     which holds all of the rgba values  (0 - 255) for each pixel.

 

I'm doing this because I have already written the filter for Java and would prefer not to completely change my implementation.

 

So this already part of an API or is there a common way of doing this?  

 

Here is my current solution in the Render function:

 

 

 

 

static  PF_Err Render(..){

 

          //...

    for(int i = 0; i < tInfo->width; i++){

       

        for(int j = 0; j < tInfo->height; j++){

           

            PF_Pixel currentPixel = *getXY(*tInfo->input, i, j);

           

            int alpha = currentPixel.alpha;

            int red = currentPixel.red;

            int green = currentPixel.green;

            int blue = currentPixel.blue;

           

            p.push_back(red);

            p.push_back(green);

            p.push_back(blue);

            p.push_back(alpha);

           

           

        }

    }

staticPF_Pixel

*getXY(PF_EffectWorld&def, int x , int y){

    return (PF_Pixel*)((char*)def.data +

                       (y * def.rowbytes) +

                       (x * sizeof(PF_Pixel)));

   

}

Also while I'm here, what is the best way to debug the plugin using Xcode? I set the executable path to AE but I'm not sure how to go about using the debug mode along with AE. I appreciate any help anyone can give me.

Querying floating point colour picker value

$
0
0

I've managed to hack my way through to a functional 32bit plugin but have hit a stumbling block.

 

I need to query a colour picker parameter and apply its values to a 3d point parameter. However the value always returns as 16pbc (0-255 range).

In After Effects the colour is being stored correctly, it's obviously just reading back as 16pbc in my code.

 

 

Here's how I'm approaching it currently (inside UserChangedParam()):

 

if (which_hitP->param_index == MATTE_PICKER){

  params[MATTE_POINT]->u.point3d_d.x_value = params[MATTE_PICKER]->u.cd.value.red;

  params[MATTE_POINT]->u.point3d_d.y_value = params[MATTE_PICKER]->u.cd.value.green;

  params[MATTE_POINT]->u.point3d_d.z_value = params[MATTE_PICKER]->u.cd.value.blue;

  params[MATTE_POINT]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE;

  }

 

 

In this thread (Re: CCU Render Example 16bit / 32bit) I saw reference to PF_GetFloatingPointColorFromColorDef(), however I can't seem to find any documentation on that particular function.

 

Any help would be amazing.

Thanks.

Dialogue function running constantly

$
0
0

Hey guys,

So I've added a PF_Cmd_DO_DIALOGUE to my plugin thusly:

 

case PF_Cmd_DO_DIALOG:

  err = Register(in_data, out_data);

  break;

 

The problem is that the Register() command runs constantly instead of only when clicking the "Register" button.

It opens a dialogue box and that box, when closed, will reopen when clicking anywhere at all in the After Effects window.

 

Anyone else had this issue?

When is it OK to run a java script using AEGP_ExecuteScript.

$
0
0

Hello, I am writing a plugin using the c++ SDK which takes the fonts names of the current selected composition.

Get the font name is done by executing a java script and this code is a part of the idle hook.

My problem is that when a model window of after effects is open, i get popup messages telling me that it is not allowed to execute a script while a model window is open.

Also, when i try to edit a text i get a strange message saying: "need to focus on ourselves".

 

Is there any way to ask after effect if it is OK to run a script?

 

Thanks!

CreateNewFolder: Mismatch between SDK function and documentation

$
0
0

Hi,

 

There is a mismatch between SDK documentation and actual API function.

 

SDK Documentation:

Creates a new folder in the project. The newly created

folder is allocated and owned by After Effects. Passing

NULL for parent_folderH0 creates the folder at the

project’s root.

AEGP_CreateNewFolder( 

          const A_UTF16Char *nameZ, 

          AEGP_ProjectH  projH), 

          AEGP_ItemH  parentH0), 

          AEGP_ItemH  *new_folderPH);


On the other side, the callback declaration looks slightly different:

SPAPI A_Err (*AEGP_CreateNewFolder)(

const A_UTF16Char        *nameZ,                                /* >> null terminated UTF16 */

AEGP_ItemH                        parent_folderH0,                /* >> */

AEGP_ItemH                        *new_folderPH);                        /* << allocated and owned by AE */



So the question is: what's teh parent_FolderH0 and how do I get it?


Best regards,

Yuri

 

         


AE SDK memory management

$
0
0

hi,everyone!

      I'm now face a problem about memory management. what I want to do is extract feature points between video frames, I use OpenCV api,and get error message "Crash in progress. Last logged message was <6476><DynamicLink><5> Adobe Premiere Pro.exe". the following is my code

 

static PF_Err
Render(
PF_InData *in_data,
PF_OutData *out_data,
PF_ParamDef *params[],
PF_LayerDef *output)
{  PF_Err err = PF_Err_NONE,  err2 = PF_Err_NONE;  int32_t num_channelsL = 0;  PF_ParamDef checkout;  MyData *mystable = NULL;  AEFX_CLR_STRUCT(checkout);  AEGP_SuiteHandler suites(in_data->pica_basicP);  // set the checked-out rect to be the top half of the layer  long frame_num = in_data->total_time / in_data->time_step;  vector<cv::Mat> image;  image.resize(0);  for (long i = 0; i < frame_num; i++)  {  PF_ParamDef checkout;  AEFX_CLR_STRUCT(checkout);  ERR(PF_CHECKOUT_PARAM(in_data,  CHECK_LAYER,  (in_data->current_time + i * in_data->time_step),  in_data->time_step,  in_data->time_scale,  &checkout));  cv::Mat I = EffectWorld2cvMat(&(checkout.u.ld), 640, 360);  image.push_back(I);  ERR2(PF_CHECKIN_PARAM(in_data, &checkout)); // ALWAYS check in,  // even if invalid param.  }  if (!out_data->sequence_data) {  PF_STRCPY(out_data->return_msg, "no data");  out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE;  err = PF_Err_INTERNAL_STRUCT_DAMAGED;  }  if (!err){  mystable = *(MyData **)out_data->sequence_data;  mystable->s->m_frames = image;  double hessianThreshold(4000.0);  vector<cv::KeyPoint> keypoints1;  vector<cv::KeyPoint> keypoints2;  cv::SurfFeatureDetector SURF(hessianThreshold);  cv::SurfDescriptorExtractor surfDesc;  cv::Mat descriptors1;  cv::Mat descriptors2;  cv::BruteForceMatcher<cv::L2<float>> matcher;  cv::vector<Point2f> feature1;  cv::vector<Point2f> feature2;  cv::Mat I1_gray(360,640,CV_8UC1,Scalar::all(0));  cv::Mat I2_gray(360, 640, CV_8UC1, Scalar::all(0));  for (int i(0); i <frame_num-1; ++i)  {  cvtColor(image[i], I1_gray, CV_BGR2GRAY);  cvtColor(image[i + 1], I2_gray, CV_BGR2GRAY);  //detect surf features  SURF.detect(I1_gray, keypoints1);  SURF.detect(I2_gray, keypoints2);  //describe surf features  surfDesc.compute(I1_gray, keypoints1, descriptors1);  surfDesc.compute(I2_gray, keypoints2, descriptors2);  std::vector<cv::DMatch> matches;  matcher.match(descriptors1, descriptors2, matches);  matches2points(keypoints1, keypoints2, matches, feature1, feature2);

//the programe run to here,all things work well, and if I continue run the following code,i will get error message
  vector<uchar>inliers(feature1.size(), 0);  cv::findHomography(cv::Mat(feature1),  cv::Mat(feature2),  inliers,  CV_RANSAC);  mystable->s->m_FList.push_back(H_prev);  }  }  return err;
}

 

myData structure is

 typedef struct
{  A_Boolean flatB;  Stabilizer* s;  AEGP_MemHandle sH;
} MyData;


Stabilizer

《 command selectors》

$
0
0

For effects plug-ins, After Effects sends command selectors (and relevant information) to the plug-in entry point function designated in the effects’ PiPL resource.


what is "selector "


set the size of the layer using resizer

$
0
0

Hi All,

     I try to understand the sample project resizer, and I have some problem.

     when I apply the effect "resizer" ,I find that I can only get a canvas which size is customer defined, but the layer size didn't change at all?

     So how can I change the size of layer or composition size?

   捕获.PNG

      Thanks & Regards,

Create Puppet Pin programmatically

$
0
0

Hi all,

 

I'd like to ask whether is it possible to create puppet pins programmatically...

 

I have tried to copy stream structure ("ADBE FreePin3", "ADBE FreePin3 Mesh", "ADBE FreePin3 PosPin Position", ...) of manually created pins with

corresponding values, but when I create streams this way they are disabled (AEGP_DynStreamFlag_DISABLED - and greyed out in UI).

 

I suppose that the vertex index "ADBE FreePin3 PosPin Vtx Index" is just an index to the array stored internally as arbitrary data so the mesh and pins must be created somehow before setting these values.

 

I've found this thread where they try to do the same thing using scripting (also without success  )Create Puppet Pin on existing mesh via scripting

 

I have some ideas about how this could be done using SDK, but all of them involve diving in very dark waters..

- call the EffectSuite::AEGP_EffectCallGeneric method with fake mouse click events (PF_Cmd_EVENT) or some direct PF_Cmd_COMPLETELY_GENERAL commands if the FreePin effect supports it

- use "FreePin Suite" - which is not a part of public SDK but can be aquired using AquireSuite... - but as it's not public I suppose it operates with memory which is not so safe to touch even if I managed to get/create proper header file for this suite

 

Maybe there is a simple elegant way of creating these pins which I completely overlooked, so I would be really thankful for any suggestions

 

Thanks a lot!

 

Martin

Can a plugin access AE Preferences ?

$
0
0

Hi !

I wonder if an AEGP plugin can read and/or modify AE Preferences.

Not a self-plugin-preference like described in the Persisto example, but let's say i would like to modify a property which is in Adobe After Effects 13.5 Prefs-indep-general.txt

 

(the property is not in Prefs.txt, it's really in Prefs-indep-general.txt)

After Effects and OpenCV

$
0
0

Hi,

 

I have been trying for days to get OpenCV to work with After Effects.

The code compiles, but this simple line of code (or any other line of OpenCV code) makes the program crash straight away :

 

cv::Mat(rows, cols, CV_8UC4, data);

 

(where rows and cols are integers and data is a void*)

 

The code is in a function and I'm not even calling that function yet.

 

This is the full function:

 

cv::Mat GetMat(int rows, int cols, void * data)

{

     return cv::Mat(rows, cols, CV_8UC4, data);

}

 

Has anyone got an idea?

 

Thanks.

Custom ECW UI in Premiere Elements

$
0
0

Hi,

We have an After Effects plugin (filter) with a custom ECW UI (arbitrary, PF_PUI_CONTROL | PF_PUI_DONT_ERASE_CONTROL UI flags). All works fine in After Effects and Premiere Pro, but in Premiere Elements 10 the plugin not get any PF_Cmd_EVENT calls. Any ideas what is wrong? Does the PE 10 (11) support custom ECW UI? Is there any PE specifics not described in SDK?

 

Thanks in advance.

Put a picture(like .png)into Composition Window .

$
0
0

Hi,everybody!

Firstly,i have to admit that I did a 'stupid' thing...I am trying to do a simple plugin for 'play'...

Now,i am getting in the trouble.  So i come here for some help.

I want to konw how i can let my plugin put a picture(i have edited) into composition window.(like the plugin'Optical Flares', but i just let my plugin put one picture.)

And i can do some simple adjustment(such as width,height,center).

I am puzzled about the code.If someone can provide an example or way,it will be very helpful.

(I am a CS5 user)

 

Thank You!

PF_ABORT and PF_Cmd_USER_CHANGED_PARAM

$
0
0

Hi,

 

I'm baking some keyframes during PF_Cmd_USER_CHANGED_PARAM.

When the workArea duration is long, the process can take a while, and I'd like the user to be able to abort the process.

 

I've tried with PF_ABORT and/or PF_PROGRESS, but didn't get any result...

 

here's the bake function:

 

static PF_Err

Bake (

  PF_InData *in_data,

  PF_OutData *out_data,

  PF_ParamDef *params[],

  bool localKey,

  int vIndex)

{

      //BAKE my keys

     return err;

}

 

and how I call it during PF_Cmd_USER_CHANGED_PARAM:

 

err = Bake( in_data, out_data, params, true, vIndex); // I also tried this way ERR(Bake( in_data, out_data, params, true, vIndex));

 

Any idea will be welcome!

 

Cheers,

François


could not locate entrypoint, plug-in developement

$
0
0

Hello,

 

I just started to develop plug-ins for after effects because of a big project in my company, and I experience an issue when I try to use the plug-in I developped whith Visual Studio 2012 and the AE CS6 SDK. AE can't find the entrypoint of the plug-in. Here is the code of my project, if it can help:

 

Warbler.cpp

#include "Warbler.h"

 

 

static PF_Err About (

          PF_InData                    *in_data,

          PF_OutData                    *out_data,

          PF_ParamDef                    *params[],

          PF_LayerDef                    *output )

{

 

 

          PF_SPRINTF(out_data->return_msg, "%s,v%d.%d\r%s",

                    NAME, MAJOR_VERSION, MINOR_VERSION, DESCRIPTION);

 

          return PF_Err_NONE;

}

 

 

static PF_Err GlobalSetup (

          PF_InData                    *in_data,

          PF_OutData                    *out_data,

          PF_ParamDef                    *params[],

          PF_LayerDef                    *output )

{

          PF_Err          err = PF_Err_NONE;

 

 

          // We need to let AE know what version we are:

 

          out_data->my_version =

                    PF_VERSION(MAJOR_VERSION,

                                                                      MINOR_VERSION,

                                                                      BUG_VERSION,

                                                                      STAGE_VERSION,

                                                                      BUILD_VERSION);

 

 

          // We are going to iterate over the output extent,

          // so we need to specify that flag...

 

          out_data->out_flags |=

                    PF_OutFlag_USE_OUTPUT_EXTENT;

 

 

          return err;

}

 

 

static PF_Err ParamsSetup (

          PF_InData                    *in_data,

          PF_OutData                    *out_data,

          PF_ParamDef          *params[],

          PF_LayerDef          *output)

{

          PF_Err                                        err = PF_Err_NONE;

          PF_ParamDef          def;

 

 

          // Always clear out the PF_ParamDef

          // before adding your parameters.

          AEFX_CLR_STRUCT(def);

 

 

          // Create the LAYER parameter...

          def.param_type = PF_Param_LAYER;

          PF_STRCPY(def.name, "Displacement Layer:");

          def.u.ld.dephault = PF_LayerDefault_NONE;

          if (err = PF_ADD_PARAM(in_data, -1, &def))

                    return err;

 

          // Create the ANGLE parameter...

          def.param_type = PF_Param_ANGLE;

          PF_STRCPY(def.name, "Angle of Displacement");

          def.flags = 0;

          def.u.fd.value_str[0] =

                    def.u.fd.value_desc[0] = '\0';

          def.u.fd.value = def.u.fd.dephault = 0;

          def.u.fd.valid_min =

                    def.u.fd.slider_min = ANGLE_MIN;

          def.u.fd.valid_max =

                    def.u.fd.slider_max = ANGLE_MAX;

          def.u.fd.precision = 0;

          def.u.fd.display_flags = 0;

          if (err = PF_ADD_PARAM(in_data, -1, &def))

                     return err;

 

          // Create the DISPLACEMENT SLIDER...

          def.param_type = PF_Param_FIX_SLIDER;

          PF_STRCPY(def.name, "Amount of Displacement");

          def.flags = 0;

          def.u.fd.value_str[0] =

                    def.u.fd.value_desc[0] = '\0';

          def.u.fd.value =

                    def.u.fd.dephault = SHIFT_BLEND_DFLT;

          def.u.fd.valid_min =

                    def.u.fd.slider_min = SHIFT_BLEND_MIN;

          def.u.fd.valid_max =

                    def.u.fd.slider_max = SHIFT_BLEND_MAX;

          def.u.fd.precision = 1;

          def.u.fd.display_flags = 1;          // display as percent

          if (err = PF_ADD_PARAM(in_data, -1, &def))

                    return err;

 

 

          // GAMMA slider...

          AEFX_CLR_STRUCT(def);

          def.param_type = PF_Param_FIX_SLIDER;

          PF_STRCPY(def.name, "Source Gamma");

          def.u.fd.value_str[0] =

                    def.u.fd.value_desc[0] = '\0';

          def.u.fd.value =

                    def.u.fd.dephault = BIAS_DFLT;

          def.u.fd.valid_min =

                    def.u.fd.slider_min = BIAS_MIN;

          def.u.fd.slider_max = BIAS_MAX;

          def.u.fd.valid_max = BIAS_BIG_MAX;

          def.u.fd.precision = 1;

          def.u.fd.display_flags = 0;

          if (err = PF_ADD_PARAM(in_data, -1, &def))

                    return err;

 

 

          // Create the FIXED SLIDER parameter...

          def.param_type = PF_Param_FIX_SLIDER;

          PF_STRCPY(def.name, "Blend With Original");

          def.flags = 0;

          def.u.fd.value_str[0] =

                    def.u.fd.value_desc[0] = '\0';

          def.u.fd.value =

                    def.u.fd.dephault = SHIFT_BLEND_DFLT;

          def.u.fd.valid_min =

                    def.u.fd.slider_min = SHIFT_BLEND_MIN;

          def.u.fd.valid_max =

                    def.u.fd.slider_max = SHIFT_BLEND_MAX;

          def.u.fd.precision = 1;

          def.u.fd.display_flags = 1;          // display as percent

          if (err = PF_ADD_PARAM(in_data, -1, &def))

                    return err;

 

 

          // Set number of parameters...

          out_data->num_params = SHIFT_NUM_PARAMS;

 

 

          return err;

}

 

 

static PF_Err GlobalSetdown (

          PF_InData                    *in_data,

          PF_OutData                    *out_data,

          PF_ParamDef          *params[],

          PF_LayerDef          *output )

{

          return PF_Err_NONE;

}

 

 

static PF_Err Render (

          PF_InData                    *in_data,

          PF_OutData                    *out_data,

          PF_ParamDef                    *params[],

          PF_LayerDef                    *output )

{

          PF_Err                                        err = PF_Err_NONE;

          return err;

}

 

 

 

 

 

 

PF_Err EntryPointFunc (

          PF_Cmd                                        cmd,

          PF_InData                    *in_data,

          PF_OutData                    *out_data,

          PF_ParamDef          *params[],

          PF_LayerDef          *output,

          void                                                  *extra )

{

          PF_Err                    err = PF_Err_NONE;

 

          switch (cmd) {

          case PF_Cmd_ABOUT:

                    err = About(in_data,out_data,params,output);

                    break;

          case PF_Cmd_GLOBAL_SETUP:

                    err = GlobalSetup(in_data,out_data,params,output);

                    break;

          case PF_Cmd_PARAMS_SETUP:

                    err = ParamsSetup(in_data,out_data,params,output);

                    break;

          case PF_Cmd_GLOBAL_SETDOWN:

                    err = GlobalSetdown(in_data,out_data,params,output);

                    break;

          case PF_Cmd_RENDER:

                    err = Render(in_data,out_data,params,output);

                    break;

          default:

                    break;

          }

 

 

          return err;

}

 

 

 

Warbler.h

// INCLUDES

#include "AE_EffectCB.h"

#include "AE_Macros.h"

#include "entry.h"

 

// DEFINES

#define          NAME          "Warbler"

#define          MAJOR_VERSION                    1

#define          MINOR_VERSION                    0

#define          BUG_VERSION                              0

#define          STAGE_VERSION                    PF_Stage_RELEASE

#define          BUILD_VERSION                    1

 

 

#define LONG2FIX(x) (((long)x)<<16)

#define LUMA(p) \

          (double)(p->red + 2*p->green + p->blue)/(255. * 4.)

#define bias(a,b) \

          PF_POW( (a), PF_LOG(b) / PF_LOG(0.5) )

 

#define ANGLE_MIN                    (-180L << 16)

#define ANGLE_MAX                    ( 180L << 16)

#define          BIAS_MIN                    (655)          // 0.01 Fixed

#define          BIAS_MAX                    (1L << 16)

#define          BIAS_BIG_MAX          (10L << 16)

#define          BIAS_DFLT                    (6553*5) // about 0.5 Fixed

#define          SHIFT_BLEND_MIN          0L

#define          SHIFT_BLEND_MAX          (1L << 16)

#define          SHIFT_BLEND_DFLT 0L

 

 

// PARAMETER DEFINITION CONSTANTS

enum {

          BASE=0,

          DISP_LAYER,

          DISP_ANGLE,

          SHIFT_DISPLACE_AMT,

          SHIFT_GAMMA,

          SHIFT_BLEND,

          SHIFT_NUM_PARAMS

};

 

 

#define DESCRIPTION          \

"Displacement mapping based on luminance."

 

 

PF_Err EntryPointFunc (

          PF_Cmd                                        cmd,

          PF_InData                    *in_data,

          PF_OutData                    *out_data,

          PF_ParamDef          *params[],

          PF_LayerDef          *output,

          void                                                  *extra );

 

 

 

WarblerPiPL.r

#include "AEConfig.h"

#include "AE_EffectVers.h"

 

 

#ifndef AE_OS_WIN

          #include <AE_General.r>

#endif

 

resource 'PiPL' (16000) {

          {          /* array properties: 12 elements */

                    /* [1] */

                    Kind {

                              AEEffect

                    },

                    /* [2] */

                    Name {

                              "Warbler"

                    },

                    /* [3] */

                    Category {

                              "Sample Plug-ins"

                    },

#ifdef AE_OS_WIN

          #ifdef AE_PROC_INTELx64

                    CodeWin64X86 {"EntryPointFunc"},

          #else

                    CodeWin32X86 {"EntryPointFunc"},

          #endif

#else

          #ifdef AE_OS_MAC

                    CodeMachOPowerPC {"EntryPointFunc"},

                    CodeMacIntel32 {"EntryPointFunc"},

                    CodeMacIntel64 {"EntryPointFunc"},

          #endif

#endif

                    /* [6] */

                    AE_PiPL_Version {

                              2,

                              0

                    },

                    /* [7] */

                    AE_Effect_Spec_Version {

                              PF_PLUG_IN_VERSION,

                              PF_PLUG_IN_SUBVERS

                    },

                    /* [8] */

                    AE_Effect_Version {

                              524289          /* 1.0 */

                    },

                    /* [9] */

                    AE_Effect_Info_Flags {

                              0

                    },

                    /* [10] */

                    AE_Effect_Global_OutFlags {

                    0x02000000 //50332160

 

 

                    },

                    AE_Effect_Global_OutFlags_2 {

                    0x00000000

                    },

                    /* [11] */

                    AE_Effect_Match_Name {

                              "ADBE Warbler"

                    },

                    /* [12] */

                    AE_Reserved_Info {

                              0

                    }

          }

};

 

 

 

This plug-in is made by following the tutorial of Kas Thomas.

http://www.mactech.com/articles/mactech/Vol.15/15.09/AfterEffectsPlugins/index.html

 

Any idea of where can be the problem? I tried to find some doc on the PiPLs but so far, nothing really interesting...

Troubleshooting Plug-ins

$
0
0

I have created a plug-in and tested it sucessfully on my computers, both Mac and PC, 32 and 64-bit, and everything has worked fine. However, when I put the plug-in my website for download, one user has told me they got an error:

 

AFter Effects error: plug-in \"C:\\Program Files\\Adobe\\Adobe After Effects CS5\\Support Files\\Plug-ins\\BatchFrame\\

De_Compose\" could not be loaded (126).
(48::46)

I am not sure how to go about troubleshooting this error. I am new to creating plug-ins and I don't know what steps I should take. I have not heard of any problems from any others who have downloaded this plug-in, however, only a small number of people have downloaded the plug-in, so I may not be hearing about problems that may occur.

What should I do to make sure that users do not recieve errors? If it helps, my plug-in can be downloaded here: http://www.batchframe.com/extras/download/de_compose.zip

Thanks for any help,

Jesse Toula

Calculations that work in After Effects but not in Premiere Pro

$
0
0

I'm developing another Premiere Pro plugin based on AE effects SDK.

 

The plugin manipulates pixels in a very simple way - based on lift/gamma/gain controls it changes the values as such:

 

colorRGB->blue = PF_POW( colorRGB->blue , gamma) * gain + lift

 

And so on for the red, and green. All in floating point, PF_FpShort. I even tried doing calculations in PF_FpLong, but the results were the same.

 

Later the values can be clipped using MAX and MIN macros.

 

In After Effects everything works perfectly. In Premiere Pro, once certain gamma treshold (less than about 0.5, more than about 1.4) is reached, I start getting weird artifacts. Either green pixels or black squares in random patterns, usually, but not always, corresponding to the darker parts of the image.

 

I have no idea why, and how to correct it.

 

Please help.

 

EDIT: Actually any gamma that is different than 1 results in these weird artifacts, and only in the BGRA_32f mode. BGRA_8u works fine.

Maybe a Subpixel-Rendering problem ?

$
0
0

Hallo there,

 

i’ve managed successfully to programm a Lens-Distortion Plugin, using the Skeleton Template as a base.
So far, every function from this Plugin is functioning like it should be. The single problem that I have, is that the Image is like “Pixelated“ on the edges maybe a Subpixel-rendering or antialiasing problem.
This can be seen at example foto down here. 1 is the original image and the 2 foto is the distorted image with my plugin. The subpixeling is really on each corner of the box.

I thought first, that i was rounding the variables, but i’ve checked my algorithmus and am using doubles for the parameters, so it can’t be round.

subsample.jpg
Do you have any Idea, what i am missing ?

 

Thanks in advanced,
Boban

 

 

 

The main function looks like this:

 

static PF_Err

MySimpleGainFunc16(

void    *refcon,

A_long    xL,

A_long    yL,

PF_Pixel16  *inP,

PF_Pixel16  *outP)

{

  PF_Err        err = PF_Err_NONE;

  DistInfo      *giP = reinterpret_cast<DistInfo*>(refcon);

  AEGP_SuiteHandler  suites(giP->in_data.pica_basicP);

  PF_FpLong      tempF = 0;

  PFBarrelCommon    *barrel = NULL;

  PF_Fixed      new_xFi = 0, new_yFi = 0;

  double        offset_x_ = 0, offset_y_ = 0;

 

  double        //GUI PARAMETERN

    c3_ = giP->low,    // Low Order par

    c5_ = giP->high,  // High Order par

    xp_ = (double)((giP->centerX)),  // Lens center X

    yp_ = (double)((giP->centerY)),  // Lens center Y

    in_width_ = giP->orig_width,      // Undistored x giP->footage_width;

    in_height_ = giP->orig_height,      // Undistored y giP->footage_height;

    orig_width_ = giP->orig_width + giP->footage_width,      // Undistored x giP->footage_width;

    orig_height_ = giP->orig_height + giP->footage_height,

    squeeze_ = giP->anaS,  // Ana... Squezze

    invSqueeze_ = 1 / squeeze_,

    f1 = orig_width_ / in_width_,

    f2 = orig_height_ / in_height_;

 

  Point2

    DistortPoint = Point2(1, 1),

    UnDistortPoint = Point2(1, 1),

    C3C5_ = Point2(c3_, c5_),

    outputAbsCent = barrel->calcAbsCent((float)xp_, (int)orig_width_, (float)yp_, (int)orig_height_),

    absCent_ = barrel->calcAbsCent((float)xp_, (int)in_width_, (float)yp_, (int)in_height_);

 

    offset_x_ = absCent_.x - outputAbsCent.x,

    offset_y_ = absCent_.y - outputAbsCent.y;

 

  Point2

    pt_ = Point2(((double)xL_*f1 + offset_x_), ((double)yL_*f2 + offset_y_)),

    norm_ = barrel->calcNorm((int)in_width_, (int)in_height_);

 

      switch (giP->distortion_mode)

        {

        case DM_DISTORT:

          DistortPoint = barrel->PFBarrelCommon::solveDistort(C3C5_, absCent_, squeeze_, invSqueeze_, norm_, pt_);

          break;

        case DM_UNDISTORT:

          DistortPoint = barrel->PFBarrelCommon::solveUndistort(C3C5_, absCent_, squeeze_, invSqueeze_, norm_, pt_);

          break;

        default:

          break;

      }

  new_xFi = (A_long)(DistortPoint.x) << 16;

  new_yFi = (A_long)(DistortPoint.y) << 16;

 

  ERR(suites.Sampling16Suite1()->subpixel_sample16(giP->in_data.effect_ref,

    new_xFi,

    new_yFi,

    &giP->samp_pb,

    outP));

  return err;


Vertex Array Object deleted after full screen RAM preview

$
0
0

Hi,

 

I'm writing a plugin where I use OpenGL VAOs. Everything works fine, also RAM preview, but when I cancel full screen RAM preview and render a new frame the VAO is somehow deleted. I called glGenVertexArrays for testing and the handle it returns is 1, which was previously the handle of my valid VAO.

Has anyone had this problem?  It only happens when using full screen RAM preview. I also tested this in the GLator sample by generating dummy VAOs and it's exactly the same.

Viewing all 73444 articles
Browse latest View live


Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>