-- Nageru theme for TFK mini-tournament 2017, based on the default theme.
-local http_request = require("http.request")
-local cqueues = require("cqueues")
-local cq = cqueues.new()
-local futatabi_server = "http://gruessi.trd.sesse.net:9095"
+local futatabi_server = "http://gruessi.trd.sesse.net:9096"
local state = {
transition_start = -2.0,
}
local NUM_CAMERAS = 6 -- Remember to update neutral_colors, too.
--- Update the Futatabi status in the title.
-replay_title = "IPTV"
-cq:wrap(function()
- while true do
- local headers, stream = assert(http_request.new_from_uri(futatabi_server .. "/queue_status"):go())
- replay_title = "IPTV"
- if headers:get ":status" == "200" then
- local body = assert(stream:get_body_as_string())
- if body then
- replay_title = "IPTV (" .. body .. ")"
- end
- end
- end
-end)
-
-- Valid values for live_signal_num and preview_signal_num.
local INPUT0_SIGNAL_NUM = 0
local INPUT1_SIGNAL_NUM = 1
end
end
+function get_futatabi_status(str)
+ local num_fields = 0
+ local fields = {}
+ for word in string.gmatch(str, '([^;]+)') do
+ table.insert(fields, word)
+ num_fields = num_fields + 1
+ end
+ if num_fields >= 4 then
+ return fields[4]
+ else
+ return "???"
+ 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
elseif signal_num == STATIC_SIGNAL_NUM then
return "Static picture"
elseif signal_num == VIDEO_SIGNAL_NUM then
- return replay_title
+ local res = last_resolution[iptv_video:get_signal_num()]
+ if (not res) or res.last_subtitle == nil then
+ return "IPTV"
+ else
+ return "IPTV (" .. get_futatabi_status(res.last_subtitle) .. ")"
+ end
elseif signal_num == OVERLAY_SIGNAL_NUM then
return "Overlay"
end
return sbs_chains[input0_type][state.overlay_enabled][input1_type][true]
end
+function fetch_input_resolution(signals, signal_num)
+ local res = {
+ 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),
+ is_connected = signals:get_is_connected(signal_num),
+ frame_rate_nom = signals:get_frame_rate_nom(signal_num),
+ frame_rate_den = signals:get_frame_rate_den(signal_num),
+ last_subtitle = signals:get_last_subtitle(signal_num)
+ }
+
+ if res.interlaced then
+ -- Convert height from frame height to field height.
+ -- (Needed for e.g. place_rectangle.)
+ res.height = res.height * 2
+
+ -- Show field rate instead of frame rate; really for cosmetics only
+ -- (and actually contrary to EBU recommendations, although in line
+ -- with typical user expectations).
+ res.frame_rate_nom = res.frame_rate_nom * 2
+ end
+ return res
+end
+
local last_rate = 0.0
-- API ENTRY POINT
-- NOTE: The chain returned must be finalized with the Y'CbCr flag
-- if and only if num==0.
function get_chain(num, t, width, height, signals)
- cq:loop(0)
-
local input_resolution = {}
for signal_num=0,(NUM_CAMERAS-1) do
- local res = {
- 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),
- is_connected = signals:get_is_connected(signal_num),
- frame_rate_nom = signals:get_frame_rate_nom(signal_num),
- frame_rate_den = signals:get_frame_rate_den(signal_num)
- }
-
- if res.interlaced then
- -- Convert height from frame height to field height.
- -- (Needed for e.g. place_rectangle.)
- res.height = res.height * 2
-
- -- Show field rate instead of frame rate; really for cosmetics only
- -- (and actually contrary to EBU recommendations, although in line
- -- with typical user expectations).
- res.frame_rate_nom = res.frame_rate_nom * 2
- end
-
- input_resolution[signal_num] = res
+ input_resolution[signal_num] = fetch_input_resolution(signals, signal_num)
end
+ input_resolution[iptv_video:get_signal_num()] = fetch_input_resolution(signals, iptv_video:get_signal_num())
last_resolution = input_resolution
-- Make a (semi-shallow) copy of the current state, so that the returned prepare function