X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Ftheme.cpp;h=e3cdac2df54feac52374d623ce36bf34841cabf9;hb=9ece26cae09110a3c6a0c74aefb2269a6dd9a7d9;hp=78b0fde35cd2b075e2482f921776da71ade955f9;hpb=7df979279388aeee8866d59a17a19b31b9c8ef07;p=nageru diff --git a/nageru/theme.cpp b/nageru/theme.cpp index 78b0fde..e3cdac2 100644 --- a/nageru/theme.cpp +++ b/nageru/theme.cpp @@ -116,6 +116,7 @@ Effect *instantiate_effect(EffectChain *chain, EffectType effect_type) case IDENTITY_EFFECT: return new IdentityEffect; case WHITE_BALANCE_EFFECT: + case AUTO_WHITE_BALANCE_EFFECT: return new WhiteBalanceEffect; case RESAMPLE_EFFECT: return new ResampleEffect; @@ -860,6 +861,7 @@ const luaL_Reg Scene_funcs[] = { { "new", Scene_new }, { "__gc", Scene_gc }, { "add_input", Scene::add_input }, + { "add_auto_white_balance", Scene::add_auto_white_balance }, { "add_effect", Scene::add_effect }, { "add_optional_effect", Scene::add_optional_effect }, { "finalize", Scene::finalize }, @@ -1682,10 +1684,21 @@ bool Theme::get_supports_set_wb(unsigned channel) return ret; } -void Theme::set_wb(unsigned channel, double r, double g, double b) +void Theme::set_wb(unsigned channel, float r, float g, float b) { lock_guard lock(m); + + if (channel_signals.count(channel)) { + white_balance_for_signal[channel_signals[channel]] = WhiteBalance{ r, g, b }; + } + lua_getglobal(L, "set_wb"); + if (lua_isnil(L, -1)) { + // The function doesn't exist, to just ignore. We've stored the white balance, + // and most likely, it will be picked up by auto white balance instead. + lua_pop(L, 1); + return; + } lua_pushnumber(L, channel); lua_pushnumber(L, r); lua_pushnumber(L, g); @@ -1698,6 +1711,15 @@ void Theme::set_wb(unsigned channel, double r, double g, double b) assert(lua_gettop(L) == 0); } +Theme::WhiteBalance Theme::get_white_balance_for_signal(int signal) +{ + if (white_balance_for_signal.count(signal)) { + return white_balance_for_signal[signal]; + } else { + return WhiteBalance{ 1.0, 1.0, 1.0 }; + } +} + vector Theme::get_transition_names(float t) { lock_guard lock(m);