Merge PR #3723: Export: background jobs read their own copy of each file, so playback keeps its decoder

# Conflicts:
#	crates/engine/src/proxies.rs
This commit is contained in:
aiongg
2026-10-31 02:12:09 +00:00
7 changed files with 193 additions and 8 deletions
+3 -1
View File
@@ -240,7 +240,9 @@ file ──► codecs (MP4/MOV, MKV, audio) demux + decode, GOP-aware see
flag), so relinking and undo take effect at once. Media that can't be opened renders the offline
slate (`render::offline`) instead of failing. With proxies enabled, an item with a proxy reads
it through `ProxySource`, which reports the original's size. Export always uses
`MediaPool::full_res_provider`. See [project-files.md](project-files.md#media-offline-relinking-proxies-ingest).
`MediaPool::full_res_provider`. Background jobs (exports, Render Previews, proxies) open their
own copy of each file they can stream (`MediaPool::own_source`, `PoolProvider::own_sources`),
so they never take turns with the monitors on one decoder. See [project-files.md](project-files.md#media-offline-relinking-proxies-ingest).
- **Seeking.** `codecs::Mp4Source` seeks to the preceding sync sample and decodes forward, caching
every frame of the GOP. Sequential playback reuses the decoder. Decoders implement
`codecs::VideoDecoder`. `register_video_decoder` puts a factory in front of the built-in ones, so a