X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Fultimate.lua;h=7a9d97dab637dc006fa08a536706fcfb1e1c10e1;hb=a64de5e1112be71ac6bcca755912c669f6d531f8;hp=3045e6f4d745601bfd8131dd67eb2bb795c3ed06;hpb=c70bf291fa8efc5975031d5c01f7282babeaaf9b;p=ultimatescore diff --git a/nageru/ultimate.lua b/nageru/ultimate.lua index 3045e6f..7a9d97d 100644 --- a/nageru/ultimate.lua +++ b/nageru/ultimate.lua @@ -1,9 +1,6 @@ -- 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, @@ -39,21 +36,6 @@ local state = { } 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 @@ -87,7 +69,7 @@ cef_input:execute_javascript_async("play()") local bg_video = VideoInput.new(cef_path .. "/flow-720.mp4", Nageru.VIDEO_FORMAT_YCBCR) -- local iptv_video = VideoInput.new("http://10.34.129.69:9060/1/v.flv", Nageru.VIDEO_FORMAT_YCBCR) -local iptv_video = VideoInput.new("http://home.samfundet.no/~sesse/videostuff", Nageru.VIDEO_FORMAT_YCBCR) +local iptv_video = VideoInput.new(futatabi_server, Nageru.VIDEO_FORMAT_YCBCR) function reload_cef() cef_input:reload() @@ -482,6 +464,20 @@ function get_channel_resolution_raw(res) 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 @@ -505,7 +501,12 @@ function channel_name(channel) 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 @@ -816,6 +817,31 @@ function get_sbs_chain(state, signals) 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 @@ -847,29 +873,9 @@ function get_chain(num, t, width, height, signals) 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