Last active
December 1, 2018 20:18
-
-
Save richardpl/02a283eefd9636a15435b1c5596dedeb to your computer and use it in GitHub Desktop.
WIP: scopes picked by menu and windows to set parameters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--[[ | |
mpv scopes | |
Copyright 2018 Paul B Mahol | |
License: public domain | |
--]] | |
-- ------ config ------- | |
local mp_msg = require 'mp.msg' | |
local intensity = 0.04 | |
local envelope = 0 | |
local last_key = 1 | |
local set_global_parameters = false | |
local set_pixscope_parameters = false | |
local set_oscilloscope_parameters = false | |
local set_extractplane_parameters = false | |
local set_brng_parameters = false | |
local set_limiter_parameters = false | |
local w_posx = 1 | |
local w_posy = 1 | |
local v_posx = 1 | |
local v_posy = 1 | |
local h_posx = 1 | |
local h_posy = 1 | |
local o_components = 7 | |
local o_posx = 0.5 | |
local o_posy = 0.5 | |
local p_posx = 0.5 | |
local p_posy = 0.5 | |
local p_w = 7 | |
local p_h = 7 | |
local tilt = 0.5 | |
local graticule = 0 | |
local e_plane = "y" | |
local brng_red = 0xFF | |
local brng_green = 0xFF | |
local brng_blue = 0x00 | |
local limiter_min = 0 | |
local limiter_speed = 1 | |
local limiter_max = 255 | |
local limiter_planes = 7 | |
local function get_filter(key) | |
local filters = { | |
{filter = {'null'}}, | |
{filter = {'waveform=f=acolor:i='..intensity..':g='..graticule..':e='..envelope}}, | |
{filter = {'vectorscope=m=color3:i='..intensity..':g='..graticule..':e='..envelope}}, | |
{filter = {'histogram'}}, | |
{filter = {'split=4[a][b][c][d],[a]waveform=g='..graticule..':i='..intensity..':e='..envelope..'[a],[b]waveform=g='..graticule..':mode=row:i='..intensity..':e='..envelope..':[b],[c]vectorscope=g='..graticule..':i='..intensity..':e='..envelope..':[c],[d][a][b][c]xstack=4:layout=0_0|0_h0|w0_0|w0_h0'}}, | |
{filter = {'split=9[a][b][c][d][e][f][g][h][i],[a]waveform=g='..graticule..':i='..intensity..':e='..envelope..'[a],[b]waveform=g='..graticule..':i='..intensity..':e='..envelope..':f=acolor[b],[d]waveform=g='..graticule..':i='..intensity..':e='..envelope..':mode=row[d],[e]vectorscope=g='..graticule..':i='..intensity..':e='..envelope..'[e],[f]vectorscope=color2:g='..graticule..':i='..intensity..':e='..envelope..'[f],[g]vectorscope=m=color:g='..graticule..':i='..intensity..':e='..envelope..'[g],[h]waveform=m=row:f=acolor:g='..graticule..':i='..intensity..':e='..envelope..'[h],[i]vectorscope=g='..graticule..':i='..intensity..':e='..envelope..':m=color3[i],[a][b][c][d][e][f][g][h][i]xstack=inputs=9:layout=w3_0|w3_h0+h2|w3_h0|0_h4|0_0|w3+w1_0|0_h1+h2|w3+w1_h0|w3+w1_h1+h2'}}, | |
{filter = {'oscilloscope=x='..o_posx..':y='..o_posy..':t='..tilt..':c='..o_components}}, | |
{filter = {'split[a][b],[a]vectorscope=g='..graticule..':i='..intensity..':e='..envelope..':m=color3,format=yuva444p|yuva444p9|yuva444p10[a],[b][a]overlay=x=(W-w)*'..v_posx..':y=(H-h)*'..v_posy}}, | |
{filter = {'split[a][b],[a]waveform=g='..graticule..':f=acolor:i='..intensity..':e='..envelope..',format=yuva444p|yuva444p9|yuva444p10[a],[b][a]overlay=x=(W-w)*'..w_posx..':y=(H-h)*'..w_posy}}, | |
{filter = {'split[a][b],[a]histogram=d=parade,format=yuva444p|yuva444p9|yuva444p10[a],[b][a]overlay=x=(W-w)*'..h_posx..':y=(H-h)*'..h_posy}}, | |
{filter = {'waveform=g='..graticule..':fl=numbers+dots:s=ire:i='..intensity..':e='..envelope}}, | |
{filter = {'waveform=m=row:g='..graticule..':fl=numbers+dots:s=ire:i='..intensity..':e='..envelope}}, | |
{filter = {'vectorscope=g='..graticule..':i='..intensity..':e='..envelope}}, | |
{filter = {'split=4[a][b][c][d],[a]vectorscope=m=3:g='..graticule..':i='..intensity..'[a],[b]vectorscope=m=3:g='..graticule..':i='..intensity..':l=0:h=.3[b],[c]vectorscope=m=3:g='..graticule..':i='..intensity..':l=.3:h=.6[c],[d]vectorscope=m=3:g='..graticule..':i='..intensity..':l=.6:h=1[d],[a][b][c][d]xstack=inputs=4:0_0|w0_0|0_h0|w0_h0'}}, | |
{filter = {'histogram=d=parade'}}, | |
{filter = {'pixscope=x='..p_posx..':y='..p_posy..':w='..p_w..':h='..p_h}}, | |
{filter = {'format=yuv444p|yuv422p|yuv420p|yuv444p|yuv410p,extractplanes=u+v,hstack'}}, | |
{filter = {'format=yuv444p|yuv422p|yuv420p|yuv444p|yuv410p,extractplanes='..e_plane}}, | |
{filter = {'tblend=all_mode=grainextract'}}, | |
{filter = {'signalstats=out=brng:c=0x'..string.format("%02x", brng_red)..string.format("%02x", brng_green)..string.format("%02x", brng_blue)}}, | |
{filter = {'limiter=min='..limiter_min..':max='..limiter_max..':planes='..limiter_planes}}, | |
} | |
return filters[key].filter | |
end | |
-- the mpv command string for adding the filter | |
local function get_cmd(filter) | |
return 'no-osd vf set lavfi=[' .. filter[1] .. ']' | |
end | |
local function bool_to_number(value) | |
return value == true and 1 or value == false and 0 | |
end | |
local function show_menu() | |
mp.gui_new_frame(); | |
mp.gui_set_next_window_bg_alpha(0.5) | |
if mp.gui_begin_main_menu_bar() then | |
if mp.gui_begin_menu("Filters", 1) then | |
if mp.gui_menu_item_bool("None", 0, 1) then | |
mp.command(get_cmd(get_filter(1))) | |
last_key = 1 | |
end | |
if mp.gui_menu_item_bool("Color Waveform", 0, 1) then | |
mp.command(get_cmd(get_filter(2))) | |
last_key = 2 | |
end | |
if mp.gui_menu_item_bool("Color Vectorscope", 0, 1) then | |
mp.command(get_cmd(get_filter(3))) | |
last_key = 3 | |
end | |
if mp.gui_menu_item_bool("Histogram", 0, 1) then | |
mp.command(get_cmd(get_filter(4))) | |
last_key = 4 | |
end | |
if mp.gui_menu_item_bool("Filter Combo 4", 0, 1) then | |
mp.command(get_cmd(get_filter(5))) | |
last_key = 5 | |
end | |
if mp.gui_menu_item_bool("Oscilloscope", 0, 1) then | |
mp.command(get_cmd(get_filter(7))) | |
last_key = 7 | |
end | |
if mp.gui_menu_item_bool("Overlaid Vectorscope", 0, 1) then | |
mp.command(get_cmd(get_filter(8))) | |
last_key = 8 | |
end | |
if mp.gui_menu_item_bool("Overlaid Waveform", 0, 1) then | |
mp.command(get_cmd(get_filter(9))) | |
last_key = 9 | |
end | |
if mp.gui_menu_item_bool("Overlaid Histogram", 0, 1) then | |
mp.command(get_cmd(get_filter(10))) | |
last_key = 10 | |
end | |
if mp.gui_menu_item_bool("Pixel Scope", 0, 1) then | |
mp.command(get_cmd(get_filter(16))) | |
last_key = 16 | |
end | |
if mp.gui_menu_item_bool("Extract Planes UV Equal", 0, 1) then | |
mp.command(get_cmd(get_filter(17))) | |
last_key = 17 | |
end | |
if mp.gui_menu_item_bool("Extract Plane", 0, 1) then | |
mp.command(get_cmd(get_filter(18))) | |
last_key = 18 | |
end | |
if mp.gui_menu_item_bool("Temporal Difference", 0, 1) then | |
mp.command(get_cmd(get_filter(19))) | |
last_key = 19 | |
end | |
if mp.gui_menu_item_bool("Broadcast Range Pixels", 0, 1) then | |
mp.command(get_cmd(get_filter(20))) | |
last_key = 20 | |
end | |
if mp.gui_menu_item_bool("Limiter", 0, 1) then | |
mp.command(get_cmd(get_filter(21))) | |
last_key = 21 | |
end | |
mp.gui_end_menu() | |
end | |
if mp.gui_begin_menu("Parameters", 1) then | |
if mp.gui_menu_item_bool("Set global parameters", 0, 1) then | |
set_global_parameters = not set_global_parameters | |
end | |
if mp.gui_menu_item_bool("Set oscilloscope parameters", 0, 1) then | |
set_oscilloscope_parameters = not set_oscilloscope_parameters | |
end | |
if mp.gui_menu_item_bool("Set pixel scope parameters", 0, 1) then | |
set_pixscope_parameters = not set_pixscope_parameters | |
end | |
if mp.gui_menu_item_bool("Set extract plane parameters", 0, 1) then | |
set_extractplane_parameters = not set_extractplane_parameters | |
end | |
if mp.gui_menu_item_bool("Set broadcast range pixels parameters", 0, 1) then | |
set_brng_parameters = not set_brng_parameters | |
end | |
if mp.gui_menu_item_bool("Set limiter parameters", 0, 1) then | |
set_limiter_parameters = not set_limiter_parameters | |
end | |
mp.gui_end_menu() | |
end | |
mp.gui_end_main_menu_bar() | |
end | |
if set_global_parameters then | |
local can_draw = 0 | |
can_draw, set_global_parameters = mp.gui_begin("global parameters", bool_to_number(set_global_parameters)) | |
if can_draw then | |
new_intensity = mp.gui_slider_float("intensity", intensity, 0, 1) | |
if new_intensity ~= intensity then | |
intensity = new_intensity | |
end | |
new_envelope = mp.gui_slider_int("envelope", envelope, 0, 3) | |
if new_envelope ~= envelope then | |
envelope = new_envelope | |
end | |
new_graticule = mp.gui_slider_int("graticule", graticule, 0, 2) | |
if new_graticule ~= graticule then | |
graticule = new_graticule | |
end | |
mp.gui_button("apply", 0, 0) | |
if mp.gui_is_item_clicked(0) then | |
mp.command(get_cmd(get_filter(last_key))) | |
end | |
mp.gui_end() | |
end | |
end | |
if set_oscilloscope_parameters then | |
local can_draw = 0 | |
can_draw, set_oscilloscope_parameters = mp.gui_begin("oscilloscope parameters", bool_to_number(set_oscilloscope_parameters)) | |
if can_draw then | |
new_o_posx = mp.gui_slider_float("position X", o_posx, 0, 1) | |
if new_o_posx ~= o_posx then | |
o_posx = new_o_posx | |
end | |
new_o_posy = mp.gui_slider_float("position Y", o_posy, 0, 1) | |
if new_o_posy ~= o_posy then | |
o_posy = new_o_posy | |
end | |
new_tilt = mp.gui_slider_float("tilt", tilt, 0, 1) | |
if new_tilt ~= tilt then | |
tilt = new_tilt | |
end | |
new_o_components = mp.gui_slider_int("components", o_components, 0, 15) | |
if new_o_components ~= o_components then | |
o_components = new_o_components | |
end | |
mp.gui_button("apply", 0, 0) | |
if mp.gui_is_item_clicked(0) then | |
mp.command(get_cmd(get_filter(last_key))) | |
end | |
mp.gui_end() | |
end | |
end | |
if set_pixscope_parameters then | |
local can_draw = 0 | |
can_draw, set_pixscope_parameters = mp.gui_begin("pixel scope parameters", bool_to_number(set_pixscope_parameters)) | |
if can_draw then | |
new_p_posx = mp.gui_slider_float("position X", p_posx, 0, 1) | |
if new_p_posx ~= p_posx then | |
p_posx = new_p_posx | |
end | |
new_p_posy = mp.gui_slider_float("position Y", p_posy, 0, 1) | |
if new_p_posy ~= p_posy then | |
p_posy = new_p_posy | |
end | |
new_p_w = mp.gui_slider_int("width", p_w, 1, 80) | |
if new_p_w ~= p_w then | |
p_w = new_p_w | |
end | |
new_p_h = mp.gui_slider_int("height", p_h, 1, 80) | |
if new_p_h ~= p_h then | |
p_h = new_p_h | |
end | |
mp.gui_button("apply", 0, 0) | |
if mp.gui_is_item_clicked(0) then | |
mp.command(get_cmd(get_filter(last_key))) | |
end | |
mp.gui_end() | |
end | |
end | |
if set_extractplane_parameters then | |
local can_draw = 0 | |
can_draw, set_extractplane_parameters = mp.gui_begin("extract plane parameters", bool_to_number(set_extractplane_parameters)) | |
local plane | |
if e_plane == "y" then | |
plane = 0 | |
end | |
if e_plane == "u" then | |
plane = 1 | |
end | |
if e_plane == "v" then | |
plane = 2 | |
end | |
if can_draw then | |
new_plane = mp.gui_slider_int("plane", plane, 0, 2) | |
if new_plane ~= plane then | |
plane = new_plane | |
if plane == 0 then | |
e_plane = "y" | |
end | |
if plane == 1 then | |
e_plane = "u" | |
end | |
if plane == 2 then | |
e_plane = "v" | |
end | |
end | |
mp.gui_button("apply", 0, 0) | |
if mp.gui_is_item_clicked(0) then | |
mp.command(get_cmd(get_filter(last_key))) | |
end | |
mp.gui_end() | |
end | |
end | |
if set_brng_parameters then | |
local can_draw = 0 | |
local got_color = 0 | |
can_draw, set_brng_parameters = mp.gui_begin("broadcast range pixels parameters", bool_to_number(set_brng_parameters)) | |
local r = brng_red / 255. | |
local g = brng_green / 255. | |
local b = brng_blue / 255. | |
if can_draw then | |
got_color, r, g, b = mp.gui_color_picker3("color", r, g, b) | |
if got_color then | |
brng_red = math.floor(r * 255) | |
brng_green = math.floor(g * 255) | |
brng_blue = math.floor(b * 255) | |
end | |
mp.gui_button("apply", 0, 0) | |
if mp.gui_is_item_clicked(0) then | |
mp.command(get_cmd(get_filter(last_key))) | |
end | |
mp.gui_end() | |
end | |
end | |
if set_limiter_parameters then | |
local can_draw = 0 | |
can_draw, set_limiter_parameters = mp.gui_begin("limiter parameters", bool_to_number(set_limiter_parameters)) | |
if can_draw then | |
new_speed = mp.gui_drag_int("speed", limiter_speed, 1, 1, 8192) | |
if new_speed ~= limiter_speed then | |
limiter_speed = new_speed | |
end | |
new_min = mp.gui_drag_int("min", limiter_min, limiter_speed, 0, 65535) | |
if new_min ~= limiter_min then | |
limiter_min = new_min | |
end | |
new_max = mp.gui_drag_int("max", limiter_max, limiter_speed, 0, 65535) | |
if new_max ~= limiter_max then | |
limiter_max = new_max | |
end | |
new_planes = mp.gui_slider_int("planes", limiter_planes, 0, 15) | |
if new_planes ~= limiter_planes then | |
limiter_planes = new_planes | |
end | |
mp.gui_button("apply", 0, 0) | |
if mp.gui_is_item_clicked(0) then | |
mp.command(get_cmd(get_filter(last_key))) | |
end | |
mp.gui_end() | |
end | |
end | |
mp.gui_end_frame() | |
end | |
mp.register_event("tick", show_menu) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment