+enum EffectType {
+ // LIVE_INPUT_* also covers CEF and video inputs.
+ LIVE_INPUT_YCBCR,
+ LIVE_INPUT_YCBCR_WITH_DEINTERLACE,
+ LIVE_INPUT_YCBCR_PLANAR,
+ LIVE_INPUT_BGRA,
+ IMAGE_INPUT,
+
+ IDENTITY_EFFECT,
+ WHITE_BALANCE_EFFECT,
+ AUTO_WHITE_BALANCE_EFFECT, // Same as WHITE_BALANCE_EFFECT, but sets its value automatically.
+ RESAMPLE_EFFECT,
+ PADDING_EFFECT,
+ INTEGRAL_PADDING_EFFECT,
+ OVERLAY_EFFECT,
+ RESIZE_EFFECT,
+ MULTIPLY_EFFECT,
+ MIX_EFFECT,
+ LIFT_GAMMA_GAIN_EFFECT,
+ BLUR_EFFECT,
+ UNSHARP_MASK_EFFECT,
+
+ NO_EFFECT_TYPE
+};
+
+// An EffectBlueprint refers to an Effect before it's being added to the graph.
+// It contains enough information to instantiate the effect, including any
+// parameters that were set before it was added to the graph. Once it is
+// instantiated, it forwards its calls on to the real Effect instead.
+struct EffectBlueprint {
+ EffectBlueprint(EffectType effect_type) : effect_type(effect_type) {}
+
+ EffectType effect_type;
+ std::map<std::string, int> int_parameters;
+ std::map<std::string, float> float_parameters;
+ std::map<std::string, std::array<float, 3>> vec3_parameters;
+ std::map<std::string, std::array<float, 4>> vec4_parameters;
+
+ movit::Effect *effect = nullptr; // Gets filled out when it's instantiated.
+};
+
+// Contains basically the same data as InputState, but does not hold on to
+// a reference to the frames. This is important so that we can release them
+// without having to wait for Lua's GC.
+struct InputStateInfo {
+ explicit InputStateInfo(const InputState& input_state);
+
+ unsigned last_width[MAX_VIDEO_CARDS], last_height[MAX_VIDEO_CARDS];
+ bool last_interlaced[MAX_VIDEO_CARDS], last_has_signal[MAX_VIDEO_CARDS], last_is_connected[MAX_VIDEO_CARDS];
+ unsigned last_frame_rate_nom[MAX_VIDEO_CARDS], last_frame_rate_den[MAX_VIDEO_CARDS];
+ bmusb::PixelFormat last_pixel_format[MAX_VIDEO_CARDS];
+ bool has_last_subtitle[MAX_VIDEO_CARDS];
+ std::string last_subtitle[MAX_VIDEO_CARDS];
+};
+