age support

This commit is contained in:
q
2025-08-13 18:59:50 +03:00
parent 0b29f59cda
commit 1d81485503

View File

@@ -55,10 +55,10 @@ class Marker:
self.forced_fps = opts.fps self.forced_fps = opts.fps
try: try:
self.load_plugin()
self.open() self.open()
self.calculate_res() self.calculate_res()
self.parse_timestamps() self.parse_timestamps()
self.load_plugin()
if self.opts.start_time: if self.opts.start_time:
try: try:
self.nr = int(self.opts.start_time) self.nr = int(self.opts.start_time)
@@ -615,7 +615,7 @@ class World:
if self.plugin: if self.plugin:
self.plugin(self) self.plugin(self)
def interpolate_points(self): def interpolate_points(self, point_index = None):
"""types: """types:
key: user clicked / accepted frame key: user clicked / accepted frame
interp: interpolated frame interp: interpolated frame
@@ -623,6 +623,9 @@ class World:
post: after any keyframes post: after any keyframes
""" """
if point_index is None:
point_index = self.point_index
def i_point(x0=None, y0=None, x1=None, y1=None, t=None, visible=None, age=None): def i_point(x0=None, y0=None, x1=None, y1=None, t=None, visible=None, age=None):
return {"x0": x0, "y0": y0, "x1": x1, "y1": y1, "type": t, "visible": visible, "age"=age} return {"x0": x0, "y0": y0, "x1": x1, "y1": y1, "type": t, "visible": visible, "age"=age}
@@ -630,23 +633,25 @@ class World:
return [p["x0"], p["y0"], p["x1"], p["y1"]] return [p["x0"], p["y0"], p["x1"], p["y1"]]
if not self.point_index in self.points_interpolated: if not point_index in self.points:
self.points_interpolated[self.point_index] = {key: {} for key in range(self.frames)} return
if len(self.points[self.point_index]) == 1: # only one point added if not point_index in self.points_interpolated:
key = list(self.points[self.point_index].keys())[0] self.points_interpolated[point_index] = {key: {} for key in range(self.frames)}
vals = self.points[self.point_index][key]
# x, y, x2, y2 = self.points[self.point_index][key] if len(self.points[point_index]) == 1: # only one point added
key = list(self.points[point_index].keys())[0]
vals = self.points[point_index][key]
for key in range(self.frames): for key in range(self.frames):
self.points_interpolated[self.point_index][key] = i_point() self.points_interpolated[point_index][key] = i_point()
self.points_interpolated[self.point_index][key].update(vals) self.points_interpolated[point_index][key].update(vals)
self.points_interpolated[self.point_index][key]["type"] = "pre" self.points_interpolated[point_index][key]["type"] = "pre"
self.points_interpolated[self.point_index][self.nr]["type"] = "key" self.points_interpolated[point_index][self.nr]["type"] = "key"
else: # more points else: # more points
point_keys = list(sorted(list(self.points[self.point_index].keys()))) point_keys = list(sorted(list(self.points[point_index].keys())))
point_values = [point2array(self.points[self.point_index][k]) for k in point_keys] point_values = [point2array(self.points[point_index][k]) for k in point_keys]
xyxy = np.array(point_values).T xyxy = np.array(point_values).T
spline = PchipInterpolator(point_keys, xyxy, axis=1) spline = PchipInterpolator(point_keys, xyxy, axis=1)
start_key = min(point_keys) start_key = min(point_keys)
@@ -654,14 +659,14 @@ class World:
t2 = np.arange(start_key, end_key) t2 = np.arange(start_key, end_key)
# Pre points # Pre points
for key in range(0, start_key): for key in range(0, start_key):
self.points_interpolated[self.point_index][key]["type"] = "pre" self.points_interpolated[point_index][key]["type"] = "pre"
self.points_interpolated[self.point_index][key].update(self.points[self.point_index][start_key]) self.points_interpolated[point_index][key].update(self.points[point_index][start_key])
# interpolated points # interpolated points
visible = self.points[self.point_index][start_key]["visible"] visible = self.points[point_index][start_key]["visible"]
for row in np.vstack((t2, spline(t2))).T: for row in np.vstack((t2, spline(t2))).T:
if row[0] in point_keys: if row[0] in point_keys:
visible = self.points[self.point_index][row[0]]["visible"] visible = self.points[point_index][row[0]]["visible"]
self.points_interpolated[self.point_index][row[0]] = { self.points_interpolated[point_index][row[0]] = {
"type": "interp", "type": "interp",
"x0": int(row[1]), "x0": int(row[1]),
"y0": int(row[2]), "y0": int(row[2]),
@@ -672,7 +677,7 @@ class World:
# post points # post points
for key in range(end_key, self.frames + 1): for key in range(end_key, self.frames + 1):
self.points_interpolated[self.point_index][key] = { self.points_interpolated[point_index][key] = {
"type": "post", "type": "post",
"x0": int(row[1]), "x0": int(row[1]),
"y0": int(row[2]), "y0": int(row[2]),
@@ -682,14 +687,14 @@ class World:
} }
# clicked points (not necessary, could determine at draw time!) # clicked points (not necessary, could determine at draw time!)
for key in point_keys: for key in point_keys:
self.points_interpolated[self.point_index][key]["type"] = "key" self.points_interpolated[point_index][key]["type"] = "key"
age=0 age=0
for key in self.points_interpolated[self.point_index]: for key in self.points_interpolated[point_index]:
if self.points_interpolated[self.point_index][key]["type"] == "key": if self.points_interpolated[point_index][key]["type"] == "key":
age = 0 age = 0
if self.points_interpolated[self.point_index][key]["type"] == "interp": if self.points_interpolated[point_index][key]["type"] == "interp":
age += 1 age += 1
self.points_interpolated[self.point_index][key]["type"] = age self.points_interpolated[point_index][key]["type"] = age
def draw_help(self, frame): def draw_help(self, frame):