Files
scrypted/plugins/python-codecs
reinierlakhan d728c4ab7d python-codecs: arm zygote fork self-destruct at call time, not first frame (#2139)
CodecFork.generateVideoFramesLibav and generateVideoFramesGstreamer are async
generator functions, so their bodies -- including the call_later(10, timeoutExit)
that lets the worker kill itself -- do not run until the caller requests the first
frame. The PluginFork handle is discarded at handout in LibavGenerator and
GstreamerGenerator, so a worker that is handed a session but never iterated has no
watchdog and no reachable terminate(), and idles for the life of the plugin host.

aclose() on a never-started async generator returns without executing the body, so
even a consumer that closes the RPC proxy cannot trigger the self-destruct.

Make the two methods coroutines that return the inner generator. rpc.py does
await maybe_await(invoke(*args)) before serializing, so the async iterator proxy
seen by the caller is unchanged, but the watchdog is armed as soon as the fork is
committed to a session.

Also keep the PluginFork handle at the call sites and terminate it if the session
cannot be handed to the caller.

Fixes #2138


Claude-Session: https://claude.ai/code/session_018kjDzffi8VZKA1mn6nrGfo

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-06 22:54:35 -07:00
..
2024-11-08 09:42:52 -08:00
2023-03-11 00:17:50 -08:00
2023-03-11 00:17:50 -08:00
2024-11-08 09:42:52 -08:00
2023-03-11 00:17:50 -08:00

Python Codecs for Scrypted

Adds encoding and decoding capabilites to Scrypted via Gstreamer and Libav.