X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=theme.lua;h=bbc086a4e86f478dde7c2b66eabe8f64e78a0aee;hb=f006b5b162841dbc764fb620025b87a3272ac79a;hp=1b874dcf876cf6337cbb9dd1ad450e53ebeb22b6;hpb=f985e1925f202078ca3c7ea693be2d8866636915;p=nageru diff --git a/theme.lua b/theme.lua index 1b874dc..bbc086a 100644 --- a/theme.lua +++ b/theme.lua @@ -57,7 +57,6 @@ end function make_sbs_input(chain, signal, deint, hq) local input = chain:add_live_input(not deint, deint) -- Override bounce only if not deinterlacing. input:connect_signal(signal) - local wb_effect = chain:add_effect(WhiteBalanceEffect.new()) local resample_effect = nil local resize_effect = nil @@ -66,6 +65,7 @@ function make_sbs_input(chain, signal, deint, hq) else resize_effect = chain:add_effect(ResizeEffect.new()) end + local wb_effect = chain:add_effect(WhiteBalanceEffect.new()) local padding_effect = chain:add_effect(IntegralPaddingEffect.new()) @@ -113,9 +113,8 @@ function make_fade_input(chain, signal, live, deint, scale) local input, wb_effect, resample_effect, last if live then input = chain:add_live_input(false, deint) - wb_effect = chain:add_effect(WhiteBalanceEffect.new()) input:connect_signal(signal) - last = wb_effect + last = input else input = chain:add_effect(ImageInput.new("bg.jpeg")) last = input @@ -128,6 +127,12 @@ function make_fade_input(chain, signal, live, deint, scale) last = resample_effect end + -- Make sure to put the white balance after the scaling (usually more efficient). + if live then + wb_effect = chain:add_effect(WhiteBalanceEffect.new()) + last = wb_effect + end + return { input = input, wb_effect = wb_effect, @@ -177,8 +182,6 @@ function make_simple_chain(input_deint, input_scale, hq) local input = chain:add_live_input(false, input_deint) input:connect_signal(0) -- First input card. Can be changed whenever you want. - local wb_effect = chain:add_effect(WhiteBalanceEffect.new()) - chain:finalize(hq) local resample_effect, resize_effect if scale then @@ -189,6 +192,9 @@ function make_simple_chain(input_deint, input_scale, hq) end end + local wb_effect = chain:add_effect(WhiteBalanceEffect.new()) + chain:finalize(hq) + return { chain = chain, input = input, @@ -255,10 +261,29 @@ function num_channels() return 4 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) + res = last_resolution[signal_num] + if (not res) or 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(signal_num) - local nom = last_resolution[signal_num].frame_rate_nom - local den = last_resolution[signal_num].frame_rate_den +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 @@ -267,17 +292,11 @@ function get_frame_rate(signal_num) end -- Helper function to write e.g. “720p60”. -function get_channel_resolution(signal_num) - if last_resolution[signal_num] then - if not last_resolution[signal_num].has_signal then - return "no signal" - elseif last_resolution[signal_num].interlaced then - return last_resolution[signal_num].height .. "i" .. get_frame_rate(signal_num) - else - return last_resolution[signal_num].height .. "p" .. get_frame_rate(signal_num) - end +function get_channel_resolution_raw(res) + if res.interlaced then + return res.height .. "i" .. get_frame_rate(res) else - return "no signal" + return res.height .. "p" .. get_frame_rate(res) end end @@ -300,6 +319,8 @@ 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. +-- (The information is used for whether right-click on the channel should bring up +-- an input selector or not.) -- 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) @@ -312,6 +333,41 @@ function channel_signal(channel) end end +-- API ENTRY POINT +-- Called every frame. Returns the color (if any) to paint around the given +-- channel. Returns a CSS color (typically to mark live and preview signals); +-- "transparent" is allowed. +-- Will never be called for live (0) or preview (1). +function channel_color(channel) + if channel_involved_in(channel, live_signal_num) then + return "#f00" + end + if channel_involved_in(channel, preview_signal_num) then + return "#0f0" + end + return "transparent" +end + +function channel_involved_in(channel, signal_num) + if signal_num == INPUT0_SIGNAL_NUM then + return channel == 2 + end + if signal_num == INPUT1_SIGNAL_NUM then + return channel == 3 + end + if signal_num == SBS_SIGNAL_NUM then + return (channel == 2 or channel == 3) + end + if signal_num == STATIC_SIGNAL_NUM then + return (channel == 5) + end + if signal_num == FADE_SIGNAL_NUM then + return (channel_involved_in(channel, fade_src_signal) or + channel_involved_in(channel, fade_dst_signal)) + end + return false +end + -- API ENTRY POINT -- Returns if a given channel supports setting white balance (starting from 2). -- Called only once for each channel, at the start of the program. @@ -348,6 +404,7 @@ function get_transitions(t) finish_transitions(t) if live_signal_num == preview_signal_num then + -- No transitions possible. return {} end @@ -377,6 +434,8 @@ function get_transitions(t) return {"Cut"} end +-- API ENTRY POINT +-- Called when the user clicks a transition button. function transition_clicked(num, t) if num == 0 then -- Cut.