88 lines
2.7 KiB
Lua
88 lines
2.7 KiB
Lua
function rotate(inc)
|
|
if (360 + inc) % 90 ~= 0 then
|
|
return
|
|
end
|
|
local vf_table = mp.get_property_native("vf")
|
|
local previous_angle = 0
|
|
local rotation_index = #vf_table + 1
|
|
if #vf_table ~= 0 and vf_table[#vf_table]["name"] == "rotate" then
|
|
rotation_index = #vf_table
|
|
previous_angle = vf_table[#vf_table]["params"]["angle"]
|
|
end
|
|
local new_angle = (previous_angle + 360 + inc) % 360
|
|
if new_angle == 0 then
|
|
vf_table[rotation_index] = nil
|
|
else
|
|
vf_table[rotation_index] = {
|
|
name = "rotate",
|
|
params = { angle = tostring(new_angle) }
|
|
}
|
|
end
|
|
mp.set_property_native("vf", vf_table)
|
|
end
|
|
|
|
function toggle(filter)
|
|
local vf_table = mp.get_property_native("vf")
|
|
if #vf_table ~= 0 and vf_table[#vf_table]["name"] == filter then
|
|
vf_table[#vf_table] = nil
|
|
else
|
|
vf_table[#vf_table + 1] = { name = filter }
|
|
end
|
|
mp.set_property_native("vf", vf_table)
|
|
end
|
|
|
|
local filters_undo_stack = {}
|
|
|
|
function remove_last_filter()
|
|
local vf_table = mp.get_property_native("vf")
|
|
if #vf_table == 0 then
|
|
return
|
|
end
|
|
filters_undo_stack[#filters_undo_stack + 1] = vf_table[#vf_table]
|
|
vf_table[#vf_table] = nil
|
|
mp.set_property_native("vf", vf_table)
|
|
end
|
|
|
|
function undo_filter_removal()
|
|
if #filters_undo_stack == 0 then
|
|
return
|
|
end
|
|
local vf_table = mp.get_property_native("vf")
|
|
vf_table[#vf_table + 1] = filters_undo_stack[#filters_undo_stack]
|
|
filters_undo_stack[#filters_undo_stack] = nil
|
|
mp.set_property_native("vf", vf_table)
|
|
end
|
|
|
|
function clear_filters()
|
|
local vf_table = mp.get_property_native("vf")
|
|
if #vf_table == 0 then
|
|
return
|
|
end
|
|
for i = 1, #vf_table do
|
|
filters_undo_stack[#filters_undo_stack + 1] = vf_table[#vf_table + 1 - i]
|
|
end
|
|
mp.set_property_native("vf", {})
|
|
end
|
|
|
|
function ab_loop(operation, timestamp)
|
|
if not mp.get_property("seekable") then return end
|
|
if timestamp ~= "a" and timestamp ~= "b" then return end
|
|
timestamp = "ab-loop-" .. timestamp
|
|
if operation == "set" then
|
|
mp.set_property_number(timestamp, mp.get_property_number("time-pos"))
|
|
elseif operation == "jump" then
|
|
local t = tonumber(mp.get_property(timestamp))
|
|
if t then mp.set_property_number("time-pos", t) end
|
|
elseif operation == "clear" then
|
|
mp.set_property(timestamp, "no")
|
|
end
|
|
end
|
|
|
|
mp.add_key_binding(nil, "rotate", rotate)
|
|
mp.add_key_binding(nil, "toggle-filter", toggle)
|
|
mp.add_key_binding(nil, "clear-filters", clear_filters)
|
|
mp.add_key_binding(nil, "remove-last-filter", remove_last_filter)
|
|
mp.add_key_binding(nil, "undo-filter-removal", undo_filter_removal)
|
|
mp.add_key_binding(nil, "ab-loop", ab_loop)
|
|
|