feat(gpu-decode): zero-copy hardware imports and the planar pipeline

Adds VAAPI DMA-BUF, D3D11VA shared-handle and VideoToolbox IOSurface
imports behind a tri-state outcome (imported / unsupported / failed),
planar textures with bounded residency and a CPU staging fallback, the
staged montage decode path, reference-counted decoder frames, VAAPI-first
device selection on Linux, and the host-GPU context plumbing used by the
app and worker. See docs/zh/plans/render-pipeline-threads.md (M5).
This commit is contained in:
2026-09-22 20:54:03 +08:00
parent 800011ef73
commit f188bc79e7
33 changed files with 2932 additions and 131 deletions
+7
View File
@@ -295,6 +295,13 @@ impl ExportTask {
"Render frame readback for the encoder failed: {e:?}"
))
})?,
// Unresolved planar frames never reach an encoder; the
// decode path resolves them before delivery.
Texture::Planar(_) => {
return Err(Error::Failed(
"unresolved planar texture for the encoder".into(),
))
}
};
let frame = &frame;
let params = CommonVideoParams::new_basic(
+1
View File
@@ -1181,3 +1181,4 @@ pub fn add_track_command(project: ProjectRef, list: NodeId) -> UndoCommand {
kind: TrackType::Video,
})
}
kind: TrackType::Video,