std::map<std::string, std::array<float, 4>> vec4_parameters;
std::string declaration_point; // For error messages.
+
+ // Only for AUTO_WHITE_BALANCE_EFFECT. Points to the parent block with is_input = true,
+ // so that we know which signal to get the white balance from.
+ const Block *white_balance_controller_block = nullptr;
};
int Block_display(lua_State* L);
movit::Effect *instantiate_effects(const Block *block, size_t chain_idx, Instantiation *instantiation);
size_t compute_chain_number_for_block(size_t block_idx, const std::bitset<256> &disabled) const;
- static void find_inputs_for_block(lua_State *L, Scene *scene, Block *block);
+ static void find_inputs_for_block(lua_State *L, Scene *scene, Block *block, int first_input_idx = 3);
+ static Block *find_block_from_arg(lua_State *L, Scene *scene, int idx);
// Find out which blocks (indexed by position in the “blocks” array),
// if any, are disabled in a given instantiation. A disabled block is
// it returns true.
bool is_noncanonical_chain(size_t chain_idx) const;
+ // For a given block, find any parents it may have that are inputs.
+ // If there is more than one, throws an error. If there are zero,
+ // returns nullptr (should probably also be an error).
+ const Block *find_root_input_block(lua_State *L, const Block *block);
+
public:
Scene(Theme *theme, float aspect_nom, float aspect_denom);
size_t compute_chain_number(bool is_main_chain) const;
static int add_input(lua_State *L);
static int add_effect(lua_State *L);
static int add_optional_effect(lua_State *L);
+ static int add_white_balance(lua_State *L);
static int finalize(lua_State *L);
};