Codec Support
Pulled directly from the project README, so this stays in sync automatically — no separate table to fall out of date.
| Mark | Meaning |
|---|---|
| ✅ | First-class (tests for claimed scope) |
| ⚡ | Zero-Copy path — no payload memcpy (GPU handle or shared CPU buffer; implies ✅) |
| 🆗 | Best-effort / prototype |
| 🛠️ | Planned |
| ❌ | Attempted and genuinely blocked — no upstream API to build on, a hard version/license conflict, or a real query returned “unsupported.” Not a “ran out of time” 🛠️. |
| 👻 | Not exercisable yet — license/patent blocked, no target hardware, out of scope, or no device/daemon/session available to run otherwise-tested code against |
Cell = encode/decode. One mark means both; A/B means encode / decode.
For now only Windows · Web · Linux are planned; Apple / Android (and Metal / Apple / Qualcomm) are 👻.
Zero-Copy honesty: ⚡ means no payload copy — a GPU handle or a shared CPU buffer, not “GPU only.” Allocating a new Vec and copying into it is 🆗, not ⚡.
OS · CPU
OS codec APIs (WMF, WebCodecs, VA-API, …) fed with CPU buffers (upload may apply); ⚡ here means a shared/borrowed buffer, not software encode.
| Codec | Windows | Web | Linux | Apple | Android |
|---|---|---|---|---|---|
| H.264 / AVC | 🆗 / 🆗 | 🆗 / 🆗 | 👻 | 👻 | 👻 |
| HEVC / H.265 | 🆗 / 🆗 | ❌ / 🆗 | 🛠️ | 👻 | 👻 |
| AV1 | 🛠️ / 🛠️ | 🆗 | 🛠️ | 👻 | 👻 |
| VP9 | 🆗 / 🆗 | 🆗 | 🛠️ | 👻 | 👻 |
| ProRes | 👻 | 👻 | 👻 | 👻 | 👻 |
| AAC | 🆗 | 🆗 | 🛠️ | 👻 | 👻 |
| Opus | 🆗 / 🆗 | 🛠️ | 🛠️ | 👻 | 👻 |
Windows Opus: encode runs through
mediaway-sw(no inbox encoder MFT exists — verified viaMFTEnumEx), wired intoWindowsAudioEncoder; decode uses the inbox decoder MFT session (CMSOpusDecMFT), public asmediaway_decoder::windows::WmfOpusDecoder— both verified end-to-end (encode→Ogg→ffprobe 2.000 s + mpv; decode of ffmpeg-produced Opus → exact PCM).
Detail: backends live as #[cfg]-gated modules — mediaway-decoder::{windows, web, linux}, mediaway-encoder::{windows, web, linux}.
OS · GPU
Same OS APIs with GPU surfaces (GpuBufferHandle, DXGI, …). Video only — audio Zero-Copy lives under OS · CPU.
| Codec | Windows | Web | Linux | Apple | Android |
|---|---|---|---|---|---|
| H.264 / AVC | ⚡ / 🆗 | 🆗 | 🛠️ | 👻 | 👻 |
| HEVC / H.265 | 🆗 / 🆗 | 🛠️ | 🛠️ | 👻 | 👻 |
| AV1 | 🆗 / 🆗 | 🛠️ | 🛠️ | 👻 | 👻 |
| VP9 | 🆗 / 🆗 | 🛠️ | 🛠️ | 👻 | 👻 |
| ProRes | 👻 | 👻 | 👻 | 👻 | 👻 |
Detail: mediaway-encoder::{windows, web} (windows = WMF + DX11 Zero-Copy; web = WebCodecs + WebGPU).
GPU — by API
Graphics interop (D3D11, Vulkan, Metal, …) — which API your textures use. Orthogonal to OS · CPU/GPU. Video only.
Adapters: mediaway wgpu module 🆗 (DX12 ↔ WMF GpuCopy bridges).
| Codec | D3D11 | D3D12 | Vulkan | Metal |
|---|---|---|---|---|
| H.264 / AVC | ⚡ / 🆗 | 🆗 / 🛠️ | 🆗 / 🆗 | 👻 |
| HEVC / H.265 | 🆗 / 🆗 | 🆗 / 🛠️ | 🆗 / 🆗 | 👻 |
| AV1 | 🆗 / 🆗 | 🛠️ | ❌ / 🛠️ | 👻 |
| VP9 | 🆗 / 🆗 | 👻 | 👻 | 👻 |
Detail: mediaway wgpu module · mediaway-encoder::{windows, vulkan} · mediaway-decoder::{windows, vulkan}.
GPU — by vendor
Vendor SDKs (NVENC, AMF, …) — separate from OS + graphics interop. Not the default Auto path. Video only.
- NVIDIA —
mediaway-encoder::nvenc(mediaway-encoder), hardware-verified H.264/HEVC/AV1 CPU-upload encode. - Intel —
mediaway-encoder::quicksync(mediaway-encoder), hardware-verified H.264/HEVC encode; AV1 is ❌ (no hardware support on this iGPU generation). - AMD — AMF backend 🛠️ deferred (binding/dependency blockers, not an AMD capability gap).
| Codec | NVIDIA | AMD | Intel | Apple | Qualcomm |
|---|---|---|---|---|---|
| H.264 / AVC | 🆗 | 🛠️ | 🆗 | 👻 | 👻 |
| HEVC / H.265 | 🆗 | 🛠️ | 🆗 | 👻 | 👻 |
| AV1 | 🆗 | 🛠️ | ❌ | 👻 | 👻 |
| VP9 | 👻 | 👻 | 👻 | 👻 | 👻 |
CPU / SW
Pure Rust sans-io software codecs — no C codec FFI (OpenH264, libvpx, …). Opt-in only; never a silent HW fallback. Detail: mediaway-sw (H.264 decode, AV1/Opus encode, PCM, audio processing).
| Codec | Status |
|---|---|
| H.264 / AVC | 🆗 |
| HEVC / H.265 | 👻 |
| AV1 | 🆗 |
| VP9 | 👻 |
| AAC | 👻 |
| Opus | 🆗 |
| PCM / raw | 🆗 |