Files
oak-editor/crates/oakrender/src/lib.rs
T
Mike-Solar cad1d93544 feat(oakrender): render-process isolation S2 - process backend by default, zero-copy onscreen
- WorkerPool thread pool deleted; RenderManager defaults to the
  Processes backend (oak-worker children), Threads kept as a test-only
  inline dispatcher; audio tickets stay in-process until S3.
- Onscreen path reads worker shm slots directly: BGRA8 slot format,
  RenderedFrame::Shm wrapped into the display buffer (single disclosed
  GPU-staging memcpy), scopes analyze BGRA8; the long-lived full-res /
  thumbnail paths take the counted slot_to_vec copy and release.
- Playback pre-render window: forward 120 frames (configurable) fed to
  the PreviewScheduler at Playback priority, interleaved across
  workers, cached in shm slots until the playhead consumes them;
  generation-based invalidation cancels and releases on edits.
- oaktask export and oak-cli run on private ProcessDispatchers (fixed
  a pump-while-locked self-deadlock in the export loop); facade
  get_frame handles ShmFrame payloads.
- Acceptance: preview path main_heap_frame_copies == 0 with spawned
  workers, CLI transcode/render verified end to end.
2026-08-18 20:45:24 +08:00

63 lines
2.4 KiB
Rust

// Oak Video Editor - Non-Linear Video Editor
// Copyright (C) 2026 Oak Team
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//! # oakrender — the render engine (Rust)
//!
//! Reimplements the C++ oakrender module behind its frozen C ABI
//! (`include/render/*.h`). See README.md for the architectural mapping.
//!
//! Module map (mirrors `COVERAGE.md`):
//! - `handle` — refcounted C-handle scaffolding (C++ internalhandles.h)
//! - `texture`/`frame` — Texture + CPU Frame values (C++ texture.h/frame)
//! - `cache` — PlaybackCache/FrameHashCache family + disk state
//! - `color` — ColorProcessor over `ocio-rs` + LUT library
//! - `ticket` — ticket arena with exactly-once completion
//! - `worker` — the JobDispatch seam + thread-free inline dispatcher +
//! graph snapshot store (the in-process thread pool was deleted in M15 S2)
//! - `manager` — RenderManager singleton + disk cache
//! - `autocacher` — PreviewAutoCacher
//! - `eval` — the evaluation seam (RenderHooks)
//! - `backend` — wgpu GPU context + display renderer
//! - `copier` — render-side project-copy client (oaknode C ABI)
//! - `cancelatom` — the cancellation primitive
//! - `ipc` — render-worker NDJSON protocol + shm frame-slot transport
//! - `scheduler` — preview frame scheduler (interleaved batch claims)
//! - `procpool` — process-isolated render backend (M15)
//! - `bridge` — direct-call C ABI bridges (oakcommon/oaknode/oakcodec)
//! - `ffi` — the `include/render/*.h` export layer
#![deny(unsafe_op_in_unsafe_fn)]
#![warn(missing_docs)]
pub mod autocacher;
pub mod backend;
pub mod cache;
pub mod cancelatom;
pub mod color;
pub mod commonutil;
pub mod copier;
pub mod error;
pub mod eval;
pub mod frame;
pub mod handle;
pub mod ipc;
pub mod manager;
pub mod procpool;
pub mod scheduler;
pub mod texture;
pub mod ticket;
pub mod worker;