]> git.sesse.net Git - nageru/commitdiff
Hook up ResampleEffect, and generalize things a bit.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 7 Oct 2015 22:56:42 +0000 (00:56 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 7 Oct 2015 22:56:42 +0000 (00:56 +0200)
theme.cpp
theme.lua

index 31eb23d2e36a67a4c7c14737d18cfb8bd3d1ef41..006149dec24a3c3b5fbb49b3b5335d9bcffc8313 100644 (file)
--- a/theme.cpp
+++ b/theme.cpp
@@ -8,6 +8,7 @@
 #include <movit/effect_chain.h>
 #include <movit/ycbcr_input.h>
 #include <movit/white_balance_effect.h>
+#include <movit/resample_effect.h>
 
 #include "theme.h"
 
@@ -41,6 +42,16 @@ Theme *get_theme_updata(lua_State* L)
        return (Theme *)lua_touserdata(L, lua_upvalueindex(1));
 }
 
+Effect *get_effect(lua_State *L, int idx)
+{
+       if (luaL_testudata(L, idx, "WhiteBalanceEffect") ||
+           luaL_testudata(L, idx, "ResampleEffect")) {
+               return (Effect *)lua_touserdata(L, idx);
+       }
+       fprintf(stderr, "Error: Index #%d was not an Effect type\n", idx);
+       exit(1);
+}
+
 bool checkbool(lua_State* L, int idx)
 {
        luaL_checktype(L, idx, LUA_TBOOLEAN);
@@ -69,10 +80,15 @@ int EffectChain_add_effect(lua_State* L)
        assert(lua_gettop(L) == 3);
        EffectChain *chain = (EffectChain *)luaL_checkudata(L, 1, "EffectChain");
 
-       // FIXME: This needs a lot of work.
-       Effect *effect1 = (Effect *)luaL_checkudata(L, 2, "WhiteBalanceEffect");
-       LiveInputWrapper *effect2 = (LiveInputWrapper *)luaL_checkudata(L, 3, "LiveInputWrapper");
-       chain->add_effect(effect1, effect2->get_input());
+       // TODO: Better error reporting.
+       Effect *effect1 = get_effect(L, 2);
+       if (luaL_testudata(L, 3, "LiveInputWrapper")) {
+               LiveInputWrapper *effect2 = (LiveInputWrapper *)lua_touserdata(L, 3);
+               chain->add_effect(effect1, effect2->get_input());
+       } else {
+               Effect *effect2 = get_effect(L, 3);
+               chain->add_effect(effect1, effect2);
+       }
 
        lua_settop(L, 2);       
        return 1;
@@ -120,10 +136,16 @@ int WhiteBalanceEffect_new(lua_State* L)
        return wrap_lua_object<WhiteBalanceEffect>(L, "WhiteBalanceEffect");
 }
 
-int WhiteBalanceEffect_set_float(lua_State *L)
+int ResampleEffect_new(lua_State* L)
+{
+       assert(lua_gettop(L) == 0);
+       return wrap_lua_object<ResampleEffect>(L, "ResampleEffect");
+}
+
+int Effect_set_float(lua_State *L)
 {
        assert(lua_gettop(L) == 3);
-       WhiteBalanceEffect *effect = (WhiteBalanceEffect *)luaL_checkudata(L, 1, "WhiteBalanceEffect");
+       Effect *effect = (Effect *)get_effect(L, 1);
        size_t len;
        const char* cstr = lua_tolstring(L, 2, &len);
        std::string key(cstr, len);
@@ -132,6 +154,18 @@ int WhiteBalanceEffect_set_float(lua_State *L)
        return 0;
 }
 
+int Effect_set_int(lua_State *L)
+{
+       assert(lua_gettop(L) == 3);
+       Effect *effect = (Effect *)get_effect(L, 1);
+       size_t len;
+       const char* cstr = lua_tolstring(L, 2, &len);
+       std::string key(cstr, len);
+       float value = luaL_checknumber(L, 3);
+       (void)effect->set_int(key, value);
+       return 0;
+}
+
 const luaL_Reg EffectChain_funcs[] = {
        { "new", EffectChain_new },
        { "add_live_input", EffectChain_add_live_input },
@@ -147,7 +181,15 @@ const luaL_Reg LiveInputWrapper_funcs[] = {
 
 const luaL_Reg WhiteBalanceEffect_funcs[] = {
        { "new", WhiteBalanceEffect_new },
-       { "set_float", WhiteBalanceEffect_set_float },
+       { "set_float", Effect_set_float },
+       { "set_int", Effect_set_int },
+       { NULL, NULL }
+};
+
+const luaL_Reg ResampleEffect_funcs[] = {
+       { "new", ResampleEffect_new },
+       { "set_float", Effect_set_float },
+       { "set_int", Effect_set_int },
        { NULL, NULL }
 };
 
@@ -189,7 +231,8 @@ Theme::Theme(const char *filename, ResourcePool *resource_pool)
        
        register_class("EffectChain", EffectChain_funcs); 
        register_class("LiveInputWrapper", LiveInputWrapper_funcs); 
-       register_class("WhiteBalanceEffect", WhiteBalanceEffect_funcs); 
+       register_class("WhiteBalanceEffect", WhiteBalanceEffect_funcs);
+       register_class("ResampleEffect", ResampleEffect_funcs);
 
        // Run script.
        lua_settop(L, 0);
index bf88f98404f2ef5beb3a378b55d5a23f924338e2..d7c624a79d674f6bef683c01d42069d8108693a9 100644 (file)
--- a/theme.lua
+++ b/theme.lua
@@ -15,7 +15,10 @@ local preview_signal_num = 1;
 local main_chain = EffectChain.new(16, 9);
 local input0 = main_chain:add_live_input();
 input0:connect_signal(0);
-local wb_effect = main_chain:add_effect(WhiteBalanceEffect.new(), input0);
+local resample_effect = main_chain:add_effect(ResampleEffect.new(), input0);
+resample_effect:set_int("width", 320);
+resample_effect:set_int("height", 180);
+local wb_effect = main_chain:add_effect(WhiteBalanceEffect.new(), resample_effect);
 main_chain:finalize(true);
 -- local input1 = main_chain.add_input(Inputs.create(1));
 -- local resample_effect = main_chain.add_effect(ResampleEffect.new(), input0);