1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use crate::*;
use ae_sys::*;
define_suite!(
/// # Source Settings = Effect + Importer
/// Source Settings for clips can now be implemented using effects that are tied to importers.
/// This has the advantage of providing settings in the Effect Controls panel, rather than in a modal dialog.
/// Editors can adjust Source Settings for multiple clips this way. These effects are used for the DPX source settings, CinemaDNG, etc.
///
/// To implement this, an importer should set ``imImportInfoRec.hasSourceSettingsEffect`` to true.
/// Then in imFileInfoRec8, it should set sourceSettingsMatchName to the match name of the effect to be used for the Source Settings.
///
/// On the effects side, a new PF Source Settings Suite has been added to PrSDKAESupport.h, for effects using the After Effects API.
/// This is how an effect registers a function to handle the Source Settings command.
///
/// A source settings effect is used primarily for the parameter UI and management.
/// A source settings effect doesn't provide the actual frames.
/// In fact, the effect isn't even called with *PF_Cmd_RENDER*.
/// The frames come directly from the importer, which provides frames based on the settings as passed to the importer via prefs data.
///
/// When a clip is first imported, the effect is called with *PF_Cmd_SEQUENCE_SETUP*.
/// It should call PerformSourceSettingsCommand() in the Source Settings Suite, to initialize the prefs.
/// This causes the importer to get called with *imPerformSourceSettingsCommand*, where it can read the file and set the default prefs.
/// param1 of that function is imFileAccessRec8*, and param2 is imSourceSettingsCommandRec*.
///
/// When the source settings effect parameters are changed, the effect gets called with *PF_Cmd_TRANSLATE_PARAMS_TO_PREFS*. The function signature is:
///
/// ```ignore
/// PF_Err TranslateParamsToPrefs(
/// PF_InData* in_data,
/// PF_OutData* out_data,
/// PF_ParamDef* params[],
/// PF_TranslateParamsToPrefsExtra *extra)
/// ```
/// With the new prefs, the importer will be sent *imOpenFile8, imGetInfo8, imGetIndPixelFormat, imGetPreferredFrameSize, imGetSourceVideo*, etc.
///
/// imSourceSettingsCommandRec and PF Source Settings Suite allow the effect to communicate directly with the importer, so that it can initialize its parameters properly,
/// based on the source media. In the DPX source settings effect, for example, in *PF_Cmd_SEQUENCE_SETUP*, it calls PF_SourceSettingsSuite->PerformSourceSettingsCommand(),
/// which calls through to the importer with the selector *imPerformSourceSettingsCommand*.
/// Here, the importer opens the media, looks at the header and initializes the prefs based on the media. For
///
/// DPX, the initial parameters and default prefs are based on the bit depth of the video.
/// These default prefs are passed back to the effect, which sets the initial param values and stashes a copy of them in sequence_data to use again for future calls to *PF_Cmd_SEQUENCE_RESETUP*.
SourceSettingsSuite,
PF_SourceSettingsSuite,
kPFSourceSettingsSuite,
kPFSourceSettingsSuiteVersion
);
impl SourceSettingsSuite {
/// Acquire this suite from the host. Returns error if the suite is not available.
/// Suite is released on drop.
pub fn new() -> Result<Self, Error> {
crate::Suite::new()
}
pub fn perform_source_settings_command(&self, effect_ref: impl AsPtr<PF_ProgPtr>, command_struct: *mut std::ffi::c_void, data_size: usize) -> Result<(), Error> {
call_suite_fn!(self, PerformSourceSettingsCommand, effect_ref.as_ptr(), command_struct, data_size as _)
}
// pub fn set_is_source_settings_effect(&self, effect_ref: impl AsPtr<PF_ProgPtr>, value: bool) -> Result<(), Error> {
// call_suite_fn!(self, SetIsSourceSettingsEffect, effect_ref.as_ptr(), value as _)
// }
}