#include "theme.h"
+#include <algorithm>
+#include <array>
#include <assert.h>
#include <bmusb/bmusb.h>
#include <epoxy/gl.h>
+#include <mutex>
#include <stdarg.h>
#include <lauxlib.h>
#include <lua.hpp>
+#include <math.h>
+#include <movit/blur_effect.h>
#include <movit/deinterlace_effect.h>
#include <movit/effect.h>
#include <movit/effect_chain.h>
#include <movit/resample_effect.h>
#include <movit/resize_effect.h>
#include <movit/util.h>
+#include <movit/unsharp_mask_effect.h>
#include <movit/white_balance_effect.h>
#include <movit/ycbcr.h>
#include <movit/ycbcr_input.h>
#include <stdlib.h>
#include <cstddef>
#include <memory>
-#include <new>
+#include <string>
#include <utility>
+#include <vector>
#include "audio_mixer.h"
#include "defs.h"
+#include "input_mapping.h"
+#include "lua.h"
+#include "lualib.h"
+#include "shared/shared_defs.h"
+#include "tweaked_inputs.h"
#ifdef HAVE_CEF
#include "cef_capture.h"
#endif
return new MixEffect;
case LIFT_GAMMA_GAIN_EFFECT:
return new LiftGammaGainEffect;
+ case BLUR_EFFECT:
+ return new BlurEffect;
+ case UNSHARP_MASK_EFFECT:
+ return new UnsharpMaskEffect;
default:
fprintf(stderr, "Unhandled effect type %d\n", effect_type);
abort();
return wrap_lua_object_nonowned<EffectBlueprint>(L, "EffectBlueprint", LIFT_GAMMA_GAIN_EFFECT);
}
+int BlurEffect_new(lua_State* L)
+{
+ assert(lua_gettop(L) == 0);
+ return wrap_lua_object_nonowned<EffectBlueprint>(L, "EffectBlueprint", BLUR_EFFECT);
+}
+
+int UnsharpMaskEffect_new(lua_State* L)
+{
+ assert(lua_gettop(L) == 0);
+ return wrap_lua_object_nonowned<EffectBlueprint>(L, "EffectBlueprint", UNSHARP_MASK_EFFECT);
+}
+
int InputStateInfo_get_width(lua_State* L)
{
assert(lua_gettop(L) == 2);
{ NULL, NULL }
};
+const luaL_Reg BlurEffect_funcs[] = {
+ { "new", BlurEffect_new },
+ { NULL, NULL }
+};
+
+const luaL_Reg UnsharpMaskEffect_funcs[] = {
+ { "new", UnsharpMaskEffect_new },
+ { NULL, NULL }
+};
+
// End of effects.
const luaL_Reg InputStateInfo_funcs[] = {
return 0;
}
+int Nageru_schedule_cut(lua_State *L)
+{
+ if (global_mixer == nullptr) {
+ luaL_error(L, "Cuts can not be scheduled before the theme is done initializing.");
+ }
+ global_mixer->schedule_cut();
+ return 0;
+}
+
int Nageru_get_audio_bus_eq_level_db(lua_State *L)
{
if (global_audio_mixer == nullptr) {
register_class("ResizeEffect", ResizeEffect_funcs, RESIZE_EFFECT);
register_class("MultiplyEffect", MultiplyEffect_funcs, MULTIPLY_EFFECT);
register_class("MixEffect", MixEffect_funcs, MIX_EFFECT);
+ register_class("BlurEffect", BlurEffect_funcs, BLUR_EFFECT);
+ register_class("UnsharpMaskEffect", UnsharpMaskEffect_funcs, UNSHARP_MASK_EFFECT);
register_class("LiftGammaGainEffect", LiftGammaGainEffect_funcs, LIFT_GAMMA_GAIN_EFFECT);
register_class("InputStateInfo", InputStateInfo_funcs);
register_class("ThemeMenu", ThemeMenu_funcs);
{ "get_audio_bus_mute", Nageru_get_audio_bus_mute },
{ "set_audio_bus_mute", Nageru_set_audio_bus_mute },
+ // Misc.
+ { "schedule_cut", Nageru_schedule_cut },
+
{ nullptr, nullptr }
};
lua_pushlightuserdata(L, this);
lua_pop(L, 1);
unsigned flags = 0;
- if (lua_objlen(L, -1) > 2) {
- lua_rawgeti(L, -1, 3);
+ if (lua_objlen(L, index) > 2) {
+ lua_rawgeti(L, index, 3);
flags = luaL_checknumber(L, -1);
lua_pop(L, 1);
}