4 Commits
Author SHA1 Message Date
Mike-Solar 725a1d4da0 oak-ffmpeg-link: link the prebuilt shared FFmpeg on Windows
The Windows CI/CD archive (BtbN) is a shared build whose seven MSVC
import libraries have canonical names and whose .pc files carry no
external Libs.private, so pkg-config resolution is unnecessary there.
When neither pkg-config nor pkgconf exists, the script now emits the
fixed link line instead of panicking — but only on Windows: everywhere
else a static FFmpeg still needs the transitive list from its .pc files,
and MSYS2 local builds keep using pkg-config.

The FFmpeg 9 note in oak-codec's manifest is refreshed as well.
2026-09-24 18:49:54 +08:00
Mike-Solar 4337559ed0 ci: fix the Windows, Linux, macOS and ARM64 failures
- Windows: vcpkg ships `pkgconf` without the `pkg-config` shim, so the
  oak-ffmpeg-link build script failed with "program not found". Probe
  `pkg-config`, fall back to `pkgconf` (or honor `PKG_CONFIG`), and join
  the child's `PKG_CONFIG_PATH` with the platform separator instead of a
  hard-coded `:` (which split `C:\...` apart).
- Linux (and openKylin): the test binaries link the VAAPI stack via
  vcpkg's FFmpeg; install the `libva2`/`libva-drm2`/`libvdpau1` runtime
  packages the loader needs.
- macOS: bump the gpui submodule
  (OakVideoEditorCommunity/oak-gpui@fix/macos-metal-layer-and-dead-code):
  `setColorspace:` now sends to the `MetalLayerRef` (`self.layer.as_ref()`
  made `&*layer` the owned type, which is not `objc::Message`), and the
  viewer's `GpuFrameEntry` carries the non-Linux dead-code allowance.
- openKylin ARM64: switch the ocio patch to the fork's
  fix/aarch64-c-char rev. Upstream models C `char*` as `*const i8`;
  aarch64's `c_char` is u8, so the crates did not compile. The fix uses
  `c_char` throughout ocio-sys and the ocio-rs boundary (pushed as
  30338c6a169bbbada862fb3ac256e79b656159cf).
2026-09-12 21:08:21 +08:00
Mike-Solar fdb5caabd5 color: non-sRGB preview, per-monitor display ICC, pipeline hardening
Preview now follows the project output colorspace end to end: the
display chain derives its content space from the project's OutputColorSpec
instead of a hardcoded sRGB name, self-managed ICC transforms go through
an XYZ D65 interchange stage (OCIO cie_xyz_d65_interchange) for non-sRGB
targets, and the platform layer declares the content colorspace (gpui
submodule bump). macOS defaults to OS-managed (fixes wide-gamut UI
oversaturation); Windows ACM warns once on non-sRGB targets.

Multi-monitor: the display ICC is looked up per the window's current
screen (macOS display id, Windows per-monitor DC, X11 RandR output
profile) with a throttled poll that invalidates frame caches on moves.

Pipeline precision: 10-bit+ sources fall back to YUV444P16LE + a Rust
matrix conversion when swscale lacks F32 output (no more 8-bit
truncation); BT.709/2020 SDR decodes with BT.1886 gamma 2.4 instead of
the sRGB EOTF; working-space compositing no longer clamps RGB to [0,1]
(alpha still clamped); the output node clamps to the target gamut;
frames without colorimetry metadata convert with BT.709 defaults
(warned once) instead of passing through; scopes read the
output-colorspace signal on both F32 paths.

Also: only emit rerun-if-changed for .env when it exists (a missing file
made every build fully dirty).
2026-08-29 00:24:15 +08:00
Mike-Solar 244d5e860f workspace: kebab-case crates, app under crates/oak-app, shared versions
CI / Build & test (Windows) (push) Failing after 7s
All crates take the oak-* kebab-case naming (oak-audio, oak-codec,
oak-common, oak-core, oak-ffmpeg-link, oak-node, oak-otio, oak-plugin,
oak-render, oak-storage, oak-task, oak-timeline, oak-undo), with the
lib identifiers rewritten (oakrender:: -> oak_render::, oakcore_rs:: ->
oak_core::, ...) across all 226 referencing files.

The GUI application moves from the workspace root into
crates/oak-app/: src/, build.rs (paths fixed for the new location) and
tests/ travel with it, the root Cargo.toml becomes workspace-only
([workspace] + workspace.package + profiles), and the app package
inherits the workspace version. The screenshots example becomes a
standalone crate examples/simple_player/ with its own Cargo.toml.

Every crate now inherits the single workspace version
(version.workspace = true), and the workflows' crate paths and the
build docs follow the renames.

Validated with a clean cargo check --workspace.
2026-08-22 16:58:37 +08:00