Bases: Generic[T]
, FrameRequest
Source code
| def __init__(self, coroutines: tuple[AnyCoroutine[T0, T], ...]) -> None:
if len(coroutines) <= 1:
raise CustomValueError('You need to pass at least 2 coroutines!', self.__class__)
self.coroutines = coroutines
|
coroutines instance-attribute
build_frame_eval
build_frame_eval(
clip: VideoNode,
frame_no: int,
continuation: Callable[[tuple[VideoFrame | T | None, ...]], VideoNode],
) -> VideoNode
Source code
86
87
88
89
90
91
92
93
94
95 | def build_frame_eval(
self, clip: vs.VideoNode, frame_no: int,
continuation: Callable[[tuple[vs.VideoFrame | T | None, ...]], vs.VideoNode]
) -> vs.VideoNode:
clips, atoms = self.unwrap_coros(clip, frame_no)
def _apply(n: int, f: list[vs.VideoFrame]) -> vs.VideoNode:
return continuation(self.wrap_frames(f, atoms))
return clip.std.FrameEval(_apply, clips)
|
unwrap_coros
Source code
| def unwrap_coros(self, clip: vs.VideoNode, frame_no: int) -> tuple[list[vs.VideoNode], list[Atom[T]]]:
return zip(*[ # type: ignore
_coro2node_wrapped(clip, frame_no, coro) for coro in self.coroutines
])
|
wrap_frames
wrap_frames(
frames: list[VideoFrame], atoms: list[Atom[T]]
) -> tuple[VideoFrame | T | None, ...]
Source code
| def wrap_frames(self, frames: list[vs.VideoFrame], atoms: list[Atom[T]]) -> tuple[vs.VideoFrame | T | None, ...]:
return tuple(
self._unwrap(frame, atom) for frame, atom in zip(frames, atoms)
)
|