https://github.com/devolutions/cadeau
Cadeau: performance primitives and media foundation
https://github.com/devolutions/cadeau
halide image-processing simd video-processing
Last synced: 6 months ago
JSON representation
Cadeau: performance primitives and media foundation
- Host: GitHub
- URL: https://github.com/devolutions/cadeau
- Owner: Devolutions
- License: apache-2.0
- Created: 2018-11-19T20:52:21.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-12-01T09:03:41.000Z (about 1 year ago)
- Last Synced: 2024-12-01T10:19:28.179Z (about 1 year ago)
- Topics: halide, image-processing, simd, video-processing
- Language: C++
- Homepage:
- Size: 5.43 MB
- Stars: 8
- Watchers: 10
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# Cadeau: performance primitives and media foundation
Cadeau 🎁 (pronounced /kado/, the French word for "gift") is a project providing reusable performance primitives and media foundation functions. Dealing with pixel buffers is tricky (color conversion, copying/moving regions, comparing framebuffers, etc), but it also tends to complexify the build system with special tooling. Loading and saving common image file formats, or compressing framebuffers into a playable video file format, requires third-party libraries that make dependency management harder. What if you could solve those issues *once* and remove the burden from consumer projects? That's what Cadeau is - a true gift!
## XPP: eXtreme Performance Primitives
Core performance primitivates inspired by the [Intel Integrated Performance Primitives](https://www.intel.com/content/www/us/en/developer/tools/oneapi/ipp.html). This library is designed to provide optimized image processing functions with minimal dependencies (libc only), using three approaches:
* generic: naive, unoptimized implementation in pure C
* SIMD: optimized implementation using SIMD intrinsics in C
* Halide: optimized implementation using SIMD and Halide AOT
[Halide](https://halide-lang.org/) is a fairly complex *build-time* dependency, but we use it to generate functions ahead-of-time (AOT) rather than just-in-time (JIT). The resulting code is linked within the library with a minimal Halide runtime. The CMake build system streamlines Halide usage so you don't have to deal with it directly, and benefit from optimized functions that frequently *beat* their handcrafted SIMD equivalents. Yes, Halide is THAT good!
## XMF: eXtreme Media Foundation
Media foundation library built on top of the core performance primitives that supports image and video formats, using third-party dependencies:
* JPEG: libjpeg-turbo
* PNG: libpng + zlib
* WebM: libvpx + libwebm
libxmf is built as a shared library to faciliate importing all dependencies at once, but also to make it possible to load it as an optional runtime component. Advanced users may prefer to link everything statically into their application and that's fine too, it's just a bit more work.