Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions ai/src/aiutils/jsonl_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from __future__ import annotations

import json
<<<<<<< HEAD
import math
from pathlib import Path
from typing import Any, Iterator
Expand Down Expand Up @@ -44,10 +43,6 @@ def dumps_jsonl_row(obj: dict, **kwargs: Any) -> str:
sanitised = _sanitize_nonfinite(obj)
kwargs.setdefault("sort_keys", True)
return json.dumps(sanitised, **kwargs) + "\n"
=======
from pathlib import Path
from typing import Iterator
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)


def iter_jsonl(path: Path) -> Iterator[tuple[int, dict]]:
Expand Down
6 changes: 0 additions & 6 deletions ai/src/vmaf_train/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,7 @@

import hashlib
import json
<<<<<<< HEAD
import math
=======
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
from dataclasses import asdict, dataclass, field
from pathlib import Path
from typing import Any
Expand Down Expand Up @@ -117,7 +114,6 @@ def register(
def load(sidecar_path: Path) -> ModelMetadata:
doc: dict[str, Any] = json.loads(sidecar_path.read_text())
return ModelMetadata(**doc)
<<<<<<< HEAD


def _sanitize_nonfinite(obj: Any) -> Any:
Expand Down Expand Up @@ -168,5 +164,3 @@ def write_registry_json(path: Path, payload: dict, **kwargs: Any) -> None:
**kwargs: Forwarded to :func:`dumps_registry_json` / :func:`json.dumps`.
"""
path.write_text(dumps_registry_json(payload, **kwargs) + "\n", encoding="utf-8")
=======
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
3 changes: 0 additions & 3 deletions core/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,6 @@ the corrected methodology.
— `enable_avx512=true` with `enable_asm=false` issues a warning (no-op, not an error);
— `enable_hipcc=true` with `enable_hip=false` issues a warning (no-op, not an error).
The checks run at configuration time (before `subdir()` calls) to catch misconfigurations early. The principle: every option that depends on another must `error()` on the bad combo, never silently no-op. See [`src/meson.build` lines 100–111, 74–76, 142–144](src/meson.build).
<<<<<<< HEAD

- **C→C++23 conversion safety invariants** (adversarial review 2026-05-28,
`docs/research/cpp23-wave-adversarial-review-20260528.md`):
Expand Down Expand Up @@ -513,8 +512,6 @@ the corrected methodology.
The legacy path (`VmafFeatureExtractor`, line ~301) retains the mapping as
documented debt — tracked as T-LEGACY-RUNNER-ANSNR-BROKEN in `docs/state.md`.
The checks run at configuration time (before `subdir()` calls) to catch misconfigurations early. The principle: every option that depends on another must `error()` on the bad combo, never silently no-op. See [`src/meson.build` lines 100–111, 74–76, 142–144](src/meson.build).
=======
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)

## Performance benchmark invariant (ADR-0752)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
<<<<<<< HEAD
| [ADR-0425](../0425-vmaf-roi-score-saliency-materialiser.md) | vmaf-roi-score saliency materialiser | Accepted | 2026-05-14 |
=======
| [ADR-0425](0425-vmaf-roi-score-saliency-materialiser.md) | vmaf-roi-score saliency materialiser | Accepted | 2026-05-14 |
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
<<<<<<< HEAD
| [ADR-0578](0452-vif-scratch-buf-hoist-to-vifstate.md) | Hoist VIF 10-plane scratch buffer from per-frame allocation to VifState init/close lifecycle; eliminates ~79 MB/frame allocator traffic at 1080p | Accepted | perf, vif, cpu, build, fork-local |
=======
| [ADR-0578](0578-vif-scratch-buf-hoist-to-vifstate.md) | Hoist VIF 10-plane scratch buffer from per-frame allocation to VifState init/close lifecycle; eliminates ~79 MB/frame allocator traffic at 1080p | Accepted | perf, vif, cpu, build, fork-local |
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
<<<<<<< HEAD
| [ADR-0583](0461-float-ms-ssim-enable-chroma.md) | Add `enable_chroma` option to the `float_ms_ssim` extractor | Accepted | ms-ssim, float-ms-ssim, option-parity, metrics, correctness, fork-local |
=======
| [ADR-0583](0583-float-ms-ssim-enable-chroma.md) | Add `enable_chroma` option to the `float_ms_ssim` extractor | Accepted | ms-ssim, float-ms-ssim, option-parity, metrics, correctness, fork-local |
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
4 changes: 0 additions & 4 deletions docs/adr/_index_fragments/0589-metal-ssim-lcs-db-parity.md
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
<<<<<<< HEAD
| [ADR-0589](0484-metal-ssim-lcs-db-parity.md) | Metal `float_ssim` option parity — `enable_lcs`, `enable_db`, `clip_db`, `scale` (full CPU parity) | Accepted | metal, ssim, option-parity, apple-silicon, kernel, fork-local |
=======
| [ADR-0589](0589-metal-ssim-lcs-db-parity.md) | Metal `float_ssim` option parity — `enable_lcs`, `enable_db`, `clip_db`, `scale` (full CPU parity) | Accepted | metal, ssim, option-parity, apple-silicon, kernel, fork-local |
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
<<<<<<< HEAD
| [ADR-0594](0539-hip-ssimulacra2-blur-fp-contract-off.md) | Per-kernel `hip_cu_extra_flags` dict in `core/src/meson.build` (first entry `ssimulacra2_blur: ['-ffp-contract=off']`) mirrors the CUDA `cuda_cu_extra_flags --fmad=false` carve-out so the recursive Gaussian IIR `n2*sum - d1*prev` step keeps IEEE-754 add/mul ordering on hipcc / amdclang++ device code and `ssimulacra2` HIP scores stay inside the ADR-0214 places=2 parity gate vs CPU. Fall-through (`.get(name, [])`) is byte-identical for every kernel not listed. Verified on AMD gfx1036 — `ssimulacra2` / `integer_ssim` / `integer_ms_ssim` HIP scores match CPU to display precision. | Accepted | hip, build, ssimulacra2, numerics, fork-local |
=======
| [ADR-0594](0594-hip-ssimulacra2-blur-fp-contract-off.md) | Per-kernel `hip_cu_extra_flags` dict in `core/src/meson.build` (first entry `ssimulacra2_blur: ['-ffp-contract=off']`) mirrors the CUDA `cuda_cu_extra_flags --fmad=false` carve-out so the recursive Gaussian IIR `n2*sum - d1*prev` step keeps IEEE-754 add/mul ordering on hipcc / amdclang++ device code and `ssimulacra2` HIP scores stay inside the ADR-0214 places=2 parity gate vs CPU. Fall-through (`.get(name, [])`) is byte-identical for every kernel not listed. Verified on AMD gfx1036 — `ssimulacra2` / `integer_ssim` / `integer_ms_ssim` HIP scores match CPU to display precision. | Accepted | hip, build, ssimulacra2, numerics, fork-local |
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
4 changes: 0 additions & 4 deletions docs/adr/_index_fragments/0600-upstream-port-direct-read.md
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
<<<<<<< HEAD
| [ADR-0600](0567-upstream-port-direct-read.md) | Port Netflix upstream `30a6e2a8d` — add `USE_DIRECT_READ` compile flag to CLI tools that eliminates the intermediate `video_input_ycbcr` buffer and per-frame `memcpy` by reading directly into preallocated `VmafPicture` planes via a new `fetch_into_vmaf_picture` vtable slot. Extends `vidinput.h/c`, `yuv_input.c`, `y4m_input.c`, and `vmaf.c`; Y4M direct path gated on `convert == y4m_convert_null`. Flag is opt-in; old path retained under `#else`. | Accepted | upstream-port, performance, tools, cli, build |
=======
| [ADR-0600](0600-upstream-port-direct-read.md) | Port Netflix upstream `30a6e2a8d` — add `USE_DIRECT_READ` compile flag to CLI tools that eliminates the intermediate `video_input_ycbcr` buffer and per-frame `memcpy` by reading directly into preallocated `VmafPicture` planes via a new `fetch_into_vmaf_picture` vtable slot. Extends `vidinput.h/c`, `yuv_input.c`, `y4m_input.c`, and `vmaf.c`; Y4M direct path gated on `convert == y4m_convert_null`. Flag is opt-in; old path retained under `#else`. | Accepted | upstream-port, performance, tools, cli, build |
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
4 changes: 0 additions & 4 deletions docs/ai/model-registry.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,7 @@ deployments should set it on. `cosign` must be on `$PATH`; install
prebuilt binaries from the [Sigstore release page](https://github.com/sigstore/cosign/releases).

The C entry point is `vmaf_dnn_verify_signature(onnx_path, registry_path)`
<<<<<<< HEAD
in [`core/include/libvmaf/dnn.h`](../../core/include/libvmaf/dnn.h);
=======
in [`core/include/core/dnn.h`](../../core/include/core/dnn.h);
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
both arguments are NULL-tolerant in the documented way.

## Directory jail — `VMAF_TINY_MODEL_DIR`
Expand Down
4 changes: 0 additions & 4 deletions docs/ai/multi-corpus-aggregation.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,7 @@ distribution shape is preserved.
| `lsvq` | 1.0–5.0 ACR Likert | `unified = (mos - 1) * 25` | Ying et al., CVPR 2021 §4.1 — https://github.com/baidut/PatchVQ |
| `youtube-ugc` | 1.0–5.0 ACR Likert | `unified = (mos - 1) * 25` | Wang et al., MMSP 2019 §3.2 — https://media.withyoutube.com/ |
| `waterloo-ivc-4k` | 0–100 continuous (DCR-like) | identity | Cheon & Lee, CVPR-W 2016 §III.B — https://ece.uwaterloo.ca/~zduanmu/cvpr2016_4kvqa/ |
<<<<<<< HEAD
| `netflix-public` | VMAF 0–100 (objective proxy) | identity | `core/include/libvmaf/model.h` |
=======
| `netflix-public` | VMAF 0–100 (objective proxy) | identity | `core/include/core/model.h` |
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)

The mapping is a single source of truth in
`ai/scripts/aggregate_corpora.py:SCALE_CONVERSIONS`; the unit tests
Expand Down
4 changes: 0 additions & 4 deletions docs/ai/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@ The **Tiny AI** surface lets you ship small, specialized perceptual-quality
models alongside the classic VMAF SVM without introducing a second ML
runtime or giving up libvmaf's C-only deployment story. The whole feature
is gated on `-Denable_dnn=auto|enabled|disabled` (default `auto`) and
<<<<<<< HEAD
consumed through a single public header, `libvmaf/dnn.h`.
=======
consumed through a single public header, `core/dnn.h`.
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)

## The four capabilities

Expand Down
4 changes: 0 additions & 4 deletions docs/ai/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,11 +132,7 @@ the `--tiny-model-verify` flag invokes `cosign verify-blob` at load time
via `posix_spawnp(3p)` and fails closed if the signature is missing or
bad. Off by default for dev-friendliness; strongly recommended on for
production deployments. The flag drives `vmaf_dnn_verify_signature()` in
<<<<<<< HEAD
[`core/include/libvmaf/dnn.h`](../../core/include/libvmaf/dnn.h),
=======
[`core/include/core/dnn.h`](../../core/include/core/dnn.h),
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
which looks up the model's `sigstore_bundle` field in
[`model/tiny/registry.json`](../../model/tiny/registry.json) — see
[model-registry.md](model-registry.md) for the full schema and CLI flow.
Expand Down
10 changes: 0 additions & 10 deletions docs/api/dnn.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
<<<<<<< HEAD
# DNN session API — `libvmaf/dnn.h`

The DNN surface in [`core/include/libvmaf/dnn.h`](../../core/include/libvmaf/dnn.h)
=======
# DNN session API — `core/dnn.h`

The DNN surface in [`core/include/core/dnn.h`](../../core/include/core/dnn.h)
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
lets callers load and run tiny ONNX models from C, either attached to a
`VmafContext` (so DNN scores show up next to SVM scores in the normal VMAF
report) or as a standalone session (luma-in / luma-out filter-style
Expand Down Expand Up @@ -313,11 +307,7 @@ Only works when libvmaf was built with `-Denable_dnn=true`.

The fork ships a Sigstore-keyless verification primitive for tiny-AI
ONNX bundles, surfaced by both the C API
<<<<<<< HEAD
(`vmaf_dnn_verify_signature` in `core/include/libvmaf/dnn.h`) and
=======
(`vmaf_dnn_verify_signature` in `core/include/core/dnn.h`) and
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
the CLI flag `--tiny-model-verify` on the `vmaf` binary
(see [`docs/usage/cli.md`](../usage/cli.md)).

Expand Down
12 changes: 0 additions & 12 deletions docs/api/gpu.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,7 @@ Backend dispatch rules + runtime precedence:

### Header

<<<<<<< HEAD
[`core/include/libvmaf/libvmaf_cuda.h`](../../core/include/libvmaf/libvmaf_cuda.h)
=======
[`core/include/core/libvmaf_cuda.h`](../../core/include/core/libvmaf_cuda.h)
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)

### Lifecycle addition

Expand Down Expand Up @@ -213,11 +209,7 @@ int main(void) {

### Header

<<<<<<< HEAD
[`core/include/libvmaf/libvmaf_sycl.h`](../../core/include/libvmaf/libvmaf_sycl.h)
=======
[`core/include/core/libvmaf_sycl.h`](../../core/include/core/libvmaf_sycl.h)
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)

### State

Expand Down Expand Up @@ -425,11 +417,7 @@ the enable/disable pair to gate which frame ranges get timed.

### Header

<<<<<<< HEAD
[`core/include/libvmaf/libvmaf_vulkan.h`](../../core/include/libvmaf/libvmaf_vulkan.h)
=======
[`core/include/core/libvmaf_vulkan.h`](../../core/include/core/libvmaf_vulkan.h)
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)

### State

Expand Down
24 changes: 0 additions & 24 deletions docs/api/index.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,20 @@
# Public C API reference

<<<<<<< HEAD
libvmaf ships a stable C API under [`core/include/libvmaf/`](../../core/include/libvmaf/).
=======
libvmaf ships a stable C API under [`core/include/core/`](../../core/include/core/).
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
This page is the canonical reference for the *core* API (context / picture /
feature / model). GPU-backend entry points and the DNN session API each get
their own page:

- [core](index.md) — this page
- [gpu.md](gpu.md) — `libvmaf_cuda.h`, `libvmaf_sycl.h`, `libvmaf_vulkan.h`,
`libvmaf_hip.h`, `libvmaf_metal.h`
<<<<<<< HEAD
- [dnn.md](dnn.md) — `libvmaf/dnn.h` (tiny-AI ONNX session)
=======
- [dnn.md](dnn.md) — `core/dnn.h` (tiny-AI ONNX session)
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
- [mcp.md](mcp.md) — `libvmaf_mcp.h` (embedded MCP server)

## What each header exposes

| Header | Symbols | Purpose |
| --- | --- | --- |
<<<<<<< HEAD
| [`libvmaf.h`](../../core/include/libvmaf/libvmaf.h) | `VmafContext`, `VmafConfiguration`, lifecycle + scoring functions | Main entry point. Everything else is pulled in transitively. |
| [`picture.h`](../../core/include/libvmaf/picture.h) | `VmafPicture`, `VmafPixelFormat`, alloc / unref | Per-frame pixel container (YUV planes + metadata). |
| [`feature.h`](../../core/include/libvmaf/feature.h) | `VmafFeatureDictionary` | Key/value options passed to a feature extractor. |
Expand All @@ -37,21 +28,6 @@ their own page:
| [`libvmaf_mcp.h`](../../core/include/libvmaf/libvmaf_mcp.h) | `VmafMcpServer`, `VmafMcpConfig`, transport start/stop | Embedded MCP server. Only usable in a build with `-Denable_mcp=true`. [Deep dive](mcp.md). |
| [`vmaf_assert.h`](../../core/include/libvmaf/vmaf_assert.h) | `VMAF_ASSERT*` macros | Internal assertion helpers. Not for public use — may disappear. |
| [`version.h`](../../core/include/libvmaf/libvmaf.h) (generated) | `VMAF_VERSION_MAJOR` etc. | Compile-time version constants. Run-time: `vmaf_version()`. |
=======
| [`libvmaf.h`](../../core/include/core/libvmaf.h) | `VmafContext`, `VmafConfiguration`, lifecycle + scoring functions | Main entry point. Everything else is pulled in transitively. |
| [`picture.h`](../../core/include/core/picture.h) | `VmafPicture`, `VmafPixelFormat`, alloc / unref | Per-frame pixel container (YUV planes + metadata). |
| [`feature.h`](../../core/include/core/feature.h) | `VmafFeatureDictionary` | Key/value options passed to a feature extractor. |
| [`model.h`](../../core/include/core/model.h) | `VmafModel`, `VmafModelConfig`, `VmafModelCollection*` | Classic SVM model + bootstrap model collection. |
| [`dnn.h`](../../core/include/core/dnn.h) | `VmafDnnSession`, `VmafDnnConfig`, tiny-model attach | Tiny-AI (ONNX Runtime) surface. [Deep dive](dnn.md). |
| [`libvmaf_cuda.h`](../../core/include/core/libvmaf_cuda.h) | `VmafCudaState`, CUDA picture prealloc | CUDA backend. Only usable in a build with `-Denable_cuda=true`. [Deep dive](gpu.md#cuda). |
| [`libvmaf_sycl.h`](../../core/include/core/libvmaf_sycl.h) | `VmafSyclState`, zero-copy frame buffers, dmabuf / VA / D3D11 import | SYCL backend. Only usable in a build with `-Denable_sycl=true`. [Deep dive](gpu.md#sycl). |
| [`libvmaf_vulkan.h`](../../core/include/core/libvmaf_vulkan.h) | `VmafVulkanState`, queue / device lifecycle, zero-copy `VkImage` import | Vulkan compute backend. Only usable in a build with `-Denable_vulkan=true`. [Deep dive](gpu.md#vulkan). |
| [`libvmaf_hip.h`](../../core/include/core/libvmaf_hip.h) | `VmafHipState`, lifecycle, picture prealloc | AMD HIP/ROCm backend. Only usable in a build with `-Denable_hip=true`. [Deep dive](gpu.md#hip). |
| [`libvmaf_metal.h`](../../core/include/core/libvmaf_metal.h) | `VmafMetalState`, lifecycle, IOSurface import | Apple Metal backend. Runtime, IOSurface import, and the first eight feature kernels are usable in a build with `-Denable_metal=auto/enabled` on Apple Silicon; unsupported hosts return `-ENODEV`. [Deep dive](gpu.md#metal). |
| [`libvmaf_mcp.h`](../../core/include/core/libvmaf_mcp.h) | `VmafMcpServer`, `VmafMcpConfig`, transport start/stop | Embedded MCP server. Only usable in a build with `-Denable_mcp=true`. [Deep dive](mcp.md). |
| [`vmaf_assert.h`](../../core/include/core/vmaf_assert.h) | `VMAF_ASSERT*` macros | Internal assertion helpers. Not for public use — may disappear. |
| [`version.h`](../../core/include/core/libvmaf.h) (generated) | `VMAF_VERSION_MAJOR` etc. | Compile-time version constants. Run-time: `vmaf_version()`. |
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)

All declarations are C (with `extern "C"` guards for C++ callers). The fork has
no C++ entry points in its public API.
Expand Down
4 changes: 0 additions & 4 deletions docs/api/mcp.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@ The fork ships an in-process MCP (Model Context Protocol) server that an
embedding host (e.g. an editor plugin or a measurement-orchestration
daemon) can drive over loopback HTTP, a Unix-domain socket, or a
caller-owned stdio fd pair. The C surface is defined in
<<<<<<< HEAD
[`core/include/libvmaf/libvmaf_mcp.h`](../../core/include/libvmaf/libvmaf_mcp.h).
=======
[`core/include/core/libvmaf_mcp.h`](../../core/include/core/libvmaf_mcp.h).
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)

This page covers the **embedded C API**. The standalone Python MCP
server under [`mcp-server/vmaf-mcp/`](../../mcp-server/vmaf-mcp/) is a
Expand Down
8 changes: 0 additions & 8 deletions docs/api/vulkan-image-import.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,7 @@ and [ADR-0186](../adr/0186-vulkan-image-import-impl.md) (impl +
ffmpeg-patch wiring).

The public header is
<<<<<<< HEAD
[`core/include/libvmaf/libvmaf_vulkan.h`](../../core/include/libvmaf/libvmaf_vulkan.h).
=======
[`core/include/core/libvmaf_vulkan.h`](../../core/include/core/libvmaf_vulkan.h).
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
The Vulkan backend overview lives in
[`docs/backends/vulkan/overview.md`](../backends/vulkan/overview.md).

Expand Down Expand Up @@ -130,11 +126,7 @@ on the host.

- [`docs/backends/vulkan/overview.md`](../backends/vulkan/overview.md)
— backend overview, kernel matrix, build flags.
<<<<<<< HEAD
- [`core/include/libvmaf/libvmaf_vulkan.h`](../../core/include/libvmaf/libvmaf_vulkan.h)
=======
- [`core/include/core/libvmaf_vulkan.h`](../../core/include/core/libvmaf_vulkan.h)
>>>>>>> 24bb5daf89 (docs: post-merge-train sweep — VMAFx + core/ path refs, ADR index, state.md)
— authoritative API surface.
- [`docs/usage/ffmpeg.md`](../usage/ffmpeg.md) — `vf_libvmaf_vulkan`
filter that consumes the import API end-to-end.
Expand Down
Loading
Loading