X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Ftheme.lua;h=c524d566deb1a2ddf057ad5a0b6f25265f97e6a5;hb=9f5622b1cb36a07b5b717ab5c4cbd938a550c7c3;hp=973e389d784f2c59e5345f458289e5dd23c0dd40;hpb=f3aa15a52accbc8184fdd617a3e14126cb6a3a20;p=nageru diff --git a/nageru/theme.lua b/nageru/theme.lua index 973e389..c524d56 100644 --- a/nageru/theme.lua +++ b/nageru/theme.lua @@ -36,11 +36,6 @@ local NO_TRANSITION = 0 local ZOOM_TRANSITION = 1 -- Also for slides. local FADE_TRANSITION = 2 --- Last width/height/frame rate for each channel, if we have it. --- Note that unlike the values we get from Nageru, the resolution is per --- frame and not per field, since we deinterlace. -local last_resolution = {} - function make_sbs_input(scene) return { input = scene:add_input(), @@ -115,74 +110,15 @@ local static_scene = Scene.new(16, 9) static_scene:add_input(static_image) -- Note: Locks this input to images only. static_scene:finalize() --- API ENTRY POINT --- Returns the number of outputs in addition to the live (0) and preview (1). --- Called only once, at the start of the program. -function num_channels() - return 4 -end +-- Set some global state. +Nageru.set_num_channels(4) -- Can only be called at the start of the program. +Nageru.set_channel_name(SBS_SIGNAL_NUM + 2, "Side-by-side") +Nageru.set_channel_name(STATIC_SIGNAL_NUM + 2, "Static picture") function is_plain_signal(num) return num == INPUT0_SIGNAL_NUM or num == INPUT1_SIGNAL_NUM end --- Helper function to write e.g. “720p60”. The difference between this --- and get_channel_resolution_raw() is that this one also can say that --- there's no signal. -function get_channel_resolution(signal_num) - local res = last_resolution[signal_num] - if (not res) or not res.is_connected then - return "disconnected" - end - if res.height <= 0 then - return "no signal" - end - if not res.has_signal then - if res.height == 525 then - -- Special mode for the USB3 cards. - return "no signal" - end - return get_channel_resolution_raw(res) .. ", no signal" - else - return get_channel_resolution_raw(res) - end -end - --- Helper function to write e.g. “60” or “59.94”. -function get_frame_rate(res) - local nom = res.frame_rate_nom - local den = res.frame_rate_den - if nom % den == 0 then - return nom / den - else - return string.format("%.2f", nom / den) - end -end - --- Helper function to write e.g. “720p60”. -function get_channel_resolution_raw(res) - if res.interlaced then - return res.height .. "i" .. get_frame_rate(res) - else - return res.height .. "p" .. get_frame_rate(res) - end -end - --- API ENTRY POINT --- Returns the name for each additional channel (starting from 2). --- Called at the start of the program, and then each frame for live --- channels in case they change resolution. -function channel_name(channel) - local signal_num = channel - 2 - if is_plain_signal(signal_num) then - return "Input " .. (signal_num + 1) .. " (" .. get_channel_resolution(signal_num) .. ")" - elseif signal_num == SBS_SIGNAL_NUM then - return "Side-by-side" - elseif signal_num == STATIC_SIGNAL_NUM then - return "Static picture" - end -end - -- API ENTRY POINT -- Returns, given a channel number, which signal it corresponds to (starting from 0). -- Should return -1 if the channel does not correspond to a simple signal @@ -450,8 +386,10 @@ function get_scene(num, t, width, height, signals) end input_resolution[signal_num] = res + + local text_res = signals:get_human_readable_resolution(signal_num) + Nageru.set_channel_name(signal_num + 2, "Input " .. (signal_num + 1) .. " (" .. text_res .. ")") end - last_resolution = input_resolution if num == 0 then -- Live. finish_transitions(t)