]> git.sesse.net Git - nageru/blobdiff - theme.lua
Use the new has_signal flag.
[nageru] / theme.lua
index e59ccc86cb0ed0ef4d6cc29f352f3c510ffdea95..aca8c4e7ee9decbfdfb73b89ad6b67ab968c70b4 100644 (file)
--- a/theme.lua
+++ b/theme.lua
@@ -31,7 +31,7 @@ local STATIC_SIGNAL_NUM = 3
 -- to the next.
 local FADE_SIGNAL_NUM = 4
 
--- Last width/height/resolution for each channel, if we have it.
+-- 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 = {}
@@ -248,6 +248,7 @@ function set_scale_parameters_if_needed(chain_or_input, width, height)
        end
 end
 
+-- 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()
@@ -268,8 +269,7 @@ end
 -- Helper function to write e.g. “720p60”.
 function get_channel_resolution(signal_num)
        if last_resolution[signal_num] then
-               if last_resolution[signal_num].height == 0 or
-                  last_resolution[signal_num].height == 525 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)
@@ -281,6 +281,7 @@ function get_channel_resolution(signal_num)
        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.
@@ -296,12 +297,29 @@ function channel_name(channel)
        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.
+-- 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
+       else
+               return -1
+       end
+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.
 function supports_set_wb(channel)
        return channel == 2 or channel == 3
 end
 
+-- API ENTRY POINT
 -- Gets called with a new gray point when the white balance is changing.
 -- The color is in linear light (not sRGB gamma).
 function set_wb(channel, red, green, blue)
@@ -324,6 +342,7 @@ function finish_transitions(t)
        end
 end
 
+-- API ENTRY POINT
 -- Called every frame.
 function get_transitions(t)
        finish_transitions(t)
@@ -440,10 +459,12 @@ function transition_clicked(num, t)
        end
 end
 
+-- API ENTRY POINT
 function channel_clicked(num)
        preview_signal_num = num
 end
 
+-- API ENTRY POINT
 -- Called every frame. Get the chain for displaying at input <num>,
 -- where 0 is live, 1 is preview, 2 is the first channel to display
 -- in the bottom bar, and so on up to num_channels()+1. t is the
@@ -474,6 +495,7 @@ function get_chain(num, t, width, height, signals)
                        width = signals:get_width(signal_num),
                        height = signals:get_height(signal_num),
                        interlaced = signals:get_interlaced(signal_num),
+                       has_signal = signals:get_has_signal(signal_num),
                        frame_rate_nom = signals:get_frame_rate_nom(signal_num),
                        frame_rate_den = signals:get_frame_rate_den(signal_num)
                }
@@ -515,12 +537,12 @@ function get_chain(num, t, width, height, signals)
                        local input1_scale = needs_scale(signals, fade_dst_signal, width, height)
                        local chain = fade_chains[input0_type][input0_scale][input1_type][input1_scale][true]
                        prepare = function()
-                               if input0_type == "live" then
+                               if input0_type == "live" or input0_type == "livedeint" then
                                        chain.input0.input:connect_signal(fade_src_signal)
                                        set_neutral_color_from_signal(chain.input0.wb_effect, fade_src_signal)
                                end
                                set_scale_parameters_if_needed(chain.input0, width, height)
-                               if input1_type == "live" then
+                               if input1_type == "live" or input1_type == "livedeint" then
                                        chain.input1.input:connect_signal(fade_dst_signal)
                                        set_neutral_color_from_signal(chain.input1.wb_effect, fade_dst_signal)
                                end