Copy link to clipboard
Copied
Hi. I am using the PF_OutFlag2_SUPPORTS_SMART_RENDER flag. I can checkout the params in the current time. I have also checked out the input and output buffers in the PreRender ().
However, I cannot figure out how to checkout the layer from the previous frame. This does not work in Smart Render
ERR(PF_CHECKOUT_PARAM(in_data, Sierpinski_INPUT, max(0, in_data->current_time - in_data->time_step),in_data->time_step, in_data->time_scale, &temp_param));
And the cb->checkout method does not specify the time.
ERR((extra->cb->checkout_layer_pixels(in_data->effect_ref, Sierpinski_INPUT, &input_worldP)));
So how does one checkout the previous frame input layer in Smart render?
Call extraP->cb->checkout_layer() in PF_Cmd_SMART_PRE_RENDER for that specific layer, you can enter the time you want there. Check SDK_Noise or a lot of the other samples in the SDK.
Here is the syntax for that function, it does support the time parameters:
PF_Err (*checkout_layer)( PF_ProgPtr effect_ref, // reference from in_data PF_ParamIndex index, // 0 = input, 1..n = param A_long checkout_idL, // chosen by effect, must be >=0 and unique const PF_RenderRequest *req, A...
Copy link to clipboard
Copied
Call extraP->cb->checkout_layer() in PF_Cmd_SMART_PRE_RENDER for that specific layer, you can enter the time you want there. Check SDK_Noise or a lot of the other samples in the SDK.
Here is the syntax for that function, it does support the time parameters:
PF_Err (*checkout_layer)( PF_ProgPtr effect_ref, // reference from in_data PF_ParamIndex index, // 0 = input, 1..n = param A_long checkout_idL, // chosen by effect, must be >=0 and unique const PF_RenderRequest *req, A_long what_time, A_long time_step, A_u_long time_scale, PF_CheckoutResult *checkout_result); // out
Copy link to clipboard
Copied
thanks Toby. The part which was tricky is checkout_idL
It has to be outside and did not work if I defined it inside the enums. So I marked it with a
#define IDL NUM_PARAMS+1
After that it worked well.
Copy link to clipboard
Copied
Just set checkout_idL to the same value as index, like in the samples from Adobe.
Copy link to clipboard
Copied
That did not work for me, to use the same value as index - for example I have a param SAMPLE_INPUT and I use it to check out the frame in current_time. It clashes if I use it for the previous frame.
So I defined a new ID outside the range of current IDs. You have it mentioned there - its unique. I just didnt catch on while using it.
Copy link to clipboard
Copied
If you want to check out the one input layer at several points in time at once, it is best practice to declare several layer parameters, set their default value to PF_LayerDefault_MYSELF and make them hidden (except for the first one). That way you'll have unique IDs and properly registered parameters and can adjust the sample time for each of them. I assume defining an ID outside of the parameter range might produce unexpected results when sequence data is cloned/effects are copied.
Copy link to clipboard
Copied
Hi AnmolM;
I know I am resurrecting this thread but I am stuck trying to do the exact same thing. Only in my case, I need to check out not just the previous frame, but every frame back to 0.
Anyway, I have tried what you did but unsuccessfully. I gues I may be doing it wrong. Could you share any other info on how to do this?
Thanks,
-Richard