local neutral_colors = {
{0.5, 0.5, 0.5}, -- Input 0.
{0.5, 0.5, 0.5}, -- Input 1.
- {0.5, 0.5, 0.5} -- Input 2.
+ {0.5, 0.5, 0.5}, -- Input 2.
+ {0.5, 0.5, 0.5}, -- Input 3.
+ {0.5, 0.5, 0.5} -- Input 4.
}
local overlay_transition_start = -2.0
local live_signal_num = 0
local preview_signal_num = 1
+local NUM_CAMERAS = 5 -- Remember to update neutral_colors, too.
-- Valid values for live_signal_num and preview_signal_num.
local INPUT0_SIGNAL_NUM = 0
local INPUT1_SIGNAL_NUM = 1
local INPUT2_SIGNAL_NUM = 2
-local STATIC_SIGNAL_NUM = 3
+local INPUT3_SIGNAL_NUM = 3
+local INPUT4_SIGNAL_NUM = 4
+local STATIC_SIGNAL_NUM = NUM_CAMERAS
-- Preview-only signal showing the current signal with the overlay.
-- Not valid for live_signal_num!
-local OVERLAY_SIGNAL_NUM = 4
+local OVERLAY_SIGNAL_NUM = NUM_CAMERAS + 1
-- Valid values for transition_type. (Cuts are done directly, so they need no entry.)
local NO_TRANSITION = 0
-- frame and not per field, since we deinterlace.
local last_resolution = {}
-local caspar_input = VideoInput.new("unix:///tmp/caspar.sock", Nageru.VIDEO_FORMAT_BGRA)
-caspar_input:change_rate(2.0)
+local cef_path = Nageru.THEME_PATH:match("(.*)/nageru/")
+local cef_input = HTMLInput.new("file://" .. cef_path .. "/score.html")
+cef_input:execute_javascript_async("play()")
+
+function reload_cef()
+ cef_input:reload()
+ cef_input:execute_javascript_async("play()")
+end
-- Utility function to help creating many similar chains that can differ
-- in a free set of chosen parameters.
-- An overlay with variable alpha.
function make_overlay(chain, base)
- local image = chain:add_video_input(caspar_input, false)
+ local image = chain:add_html_input(cef_input)
local multiply_effect = chain:add_effect(MultiplyEffect.new())
local overlay_effect = chain:add_effect(OverlayEffect.new(), base, multiply_effect)
return {
-- A chain to show the overlay and nothing more. LQ only,
-- since it is not a valid live signal.
local overlay_chain_lq = EffectChain.new(16, 9)
-local overlay_chain_lq_input = overlay_chain_lq:add_video_input(caspar_input, false)
+local overlay_chain_lq_input = overlay_chain_lq:add_html_input(cef_input)
overlay_chain_lq:finalize(false)
-- Used for indexing into the tables of chains.
-- 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 5
+ return NUM_CAMERAS + 2 -- static picture and overlay
end
function is_plain_signal(num)
- return num >= INPUT0_SIGNAL_NUM and num <= INPUT2_SIGNAL_NUM
+ return num >= INPUT0_SIGNAL_NUM and num <= INPUT4_SIGNAL_NUM
end
-- Helper function to write e.g. “720p60”. The difference between this
-- channels in case they change resolution.
function channel_name(channel)
local signal_num = channel - 2
- if signal_num == 0 then
+ if signal_num == INPUT0_SIGNAL_NUM then
return "Main (" .. get_channel_resolution(signal_num) .. ")"
- elseif signal_num == 1 then
- return "Goal 1 (" .. get_channel_resolution(signal_num) .. ")"
- elseif signal_num == 2 then
- return "Goal 2 (" .. get_channel_resolution(signal_num) .. ")"
+ elseif signal_num == INPUT1_SIGNAL_NUM then
+ return "Secondary (" .. get_channel_resolution(signal_num) .. ")"
+ elseif signal_num == INPUT2_SIGNAL_NUM then
+ return "Goal L (" .. get_channel_resolution(signal_num) .. ")"
+ elseif signal_num == INPUT3_SIGNAL_NUM then
+ return "Goal R (" .. get_channel_resolution(signal_num) .. ")"
+ elseif signal_num == INPUT4_SIGNAL_NUM then
+ return "Ambience (" .. get_channel_resolution(signal_num) .. ")"
elseif signal_num == STATIC_SIGNAL_NUM then
return "Static picture"
elseif signal_num == OVERLAY_SIGNAL_NUM then
-- Called once for each channel, at the start of the program.
-- Will never be called for live (0) or preview (1).
function channel_signal(channel)
- if channel == 2 then
- return 0
- elseif channel == 3 then
- return 1
+ if is_plain_signal(channel - 2) then
+ return channel - 2
else
return -1
end
return channel == (signal_num + 2)
end
if signal_num == STATIC_SIGNAL_NUM then
- return (channel == 5)
+ return (channel == NUM_CAMERAS)
end
return false
end
-- if and only if num==0.
function get_chain(num, t, width, height, signals)
local input_resolution = {}
- for signal_num=0,2 do
+ for signal_num=0,(NUM_CAMERAS-1) do
local res = {
width = signals:get_width(signal_num),
height = signals:get_height(signal_num),
return tt
end
+
+ThemeMenu.set(
+ { "Reload overlay", reload_cef }
+)