X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=theme.cpp;h=a73b60794c355d24834e3964f54b125ed7b22a52;hb=b85c1986b7ea63534899e2eb589f9e0888d5ccda;hp=1d0cd2d643db006a4fae075f8aed7c817e5e176f;hpb=c6af897e02de1e5653de71fc4993449e828bb94f;p=nageru diff --git a/theme.cpp b/theme.cpp index 1d0cd2d..a73b607 100644 --- a/theme.cpp +++ b/theme.cpp @@ -24,6 +24,7 @@ #include #include "defs.h" +#include "flags.h" #include "image_input.h" #include "mixer.h" @@ -45,7 +46,7 @@ struct InputStateInfo { InputStateInfo(const InputState& input_state); unsigned last_width[MAX_CARDS], last_height[MAX_CARDS]; - bool last_interlaced[MAX_CARDS], last_has_signal[MAX_CARDS]; + bool last_interlaced[MAX_CARDS], last_has_signal[MAX_CARDS], last_is_connected[MAX_CARDS]; unsigned last_frame_rate_nom[MAX_CARDS], last_frame_rate_den[MAX_CARDS]; }; @@ -57,6 +58,7 @@ InputStateInfo::InputStateInfo(const InputState &input_state) last_width[signal_num] = last_height[signal_num] = 0; last_interlaced[signal_num] = false; last_has_signal[signal_num] = false; + last_is_connected[signal_num] = false; continue; } const PBOFrameAllocator::Userdata *userdata = (const PBOFrameAllocator::Userdata *)frame.frame->userdata; @@ -64,6 +66,7 @@ InputStateInfo::InputStateInfo(const InputState &input_state) last_height[signal_num] = userdata->last_height[frame.field_number]; last_interlaced[signal_num] = userdata->last_interlaced; last_has_signal[signal_num] = userdata->last_has_signal; + last_is_connected[signal_num] = userdata->last_is_connected; last_frame_rate_nom[signal_num] = userdata->last_frame_rate_nom; last_frame_rate_den[signal_num] = userdata->last_frame_rate_den; } @@ -379,6 +382,16 @@ int InputStateInfo_get_has_signal(lua_State* L) return 1; } +int InputStateInfo_get_is_connected(lua_State* L) +{ + assert(lua_gettop(L) == 2); + InputStateInfo *input_state_info = get_input_state_info(L, 1); + Theme *theme = get_theme_updata(L); + int signal_num = theme->map_signal(luaL_checknumber(L, 2)); + lua_pushboolean(L, input_state_info->last_is_connected[signal_num]); + return 1; +} + int InputStateInfo_get_frame_rate_nom(lua_State* L) { assert(lua_gettop(L) == 2); @@ -556,6 +569,7 @@ const luaL_Reg InputStateInfo_funcs[] = { { "get_height", InputStateInfo_get_height }, { "get_interlaced", InputStateInfo_get_interlaced }, { "get_has_signal", InputStateInfo_get_has_signal }, + { "get_is_connected", InputStateInfo_get_is_connected }, { "get_frame_rate_nom", InputStateInfo_get_frame_rate_nom }, { "get_frame_rate_den", InputStateInfo_get_frame_rate_den }, { NULL, NULL } @@ -695,7 +709,7 @@ int call_num_channels(lua_State *L) } // namespace Theme::Theme(const char *filename, ResourcePool *resource_pool, unsigned num_cards) - : resource_pool(resource_pool), num_cards(num_cards) + : resource_pool(resource_pool), num_cards(num_cards), signal_to_card_mapping(global_flags.default_stream_mapping) { L = luaL_newstate(); luaL_openlibs(L); @@ -810,11 +824,16 @@ string Theme::get_channel_name(unsigned channel) fprintf(stderr, "error running function `channel_name': %s\n", lua_tostring(L, -1)); exit(1); } + const char *ret = lua_tostring(L, -1); + if (ret == nullptr) { + fprintf(stderr, "function `channel_name' returned nil for channel %d\n", channel); + exit(1); + } - string ret = lua_tostring(L, -1); + string retstr = ret; lua_pop(L, 1); assert(lua_gettop(L) == 0); - return ret; + return retstr; } int Theme::get_channel_signal(unsigned channel) @@ -843,10 +862,16 @@ std::string Theme::get_channel_color(unsigned channel) exit(1); } - std::string ret = checkstdstring(L, -1); + const char *ret = lua_tostring(L, -1); + if (ret == nullptr) { + fprintf(stderr, "function `channel_color' returned nil for channel %d\n", channel); + exit(1); + } + + string retstr = ret; lua_pop(L, 1); assert(lua_gettop(L) == 0); - return ret; + return retstr; } bool Theme::get_supports_set_wb(unsigned channel)