libultrahdr-rs
Rust bindings for Google's UltraHDR gain-map JPEG library with a small CLI. / 基于 Google libultrahdr 的 Rust 绑定与命令行工具。
Overview / 概览
ultrahdr-sys: raw FFI bindings tolibultrahdrbuilt via CMake. /ultrahdr-sys:通过 CMake 构建的libultrahdr原始 FFI 绑定。ultrahdr: safe-ish wrapper around the FFI types plus helpers for gain map metadata, packed buffers, and error handling. /ultrahdr:封装 FFI,提供增益图元数据、打包缓冲区和错误处理辅助。ultrahdr-bake: CLI that bakes an UltraHDR JPEG from an HDR (gain map) JPEG + SDR base JPEG, and can assemble Motion Photos (JPEG + MP4). /ultrahdr-bake:将 HDR(增益图)JPEG 与 SDR 基础 JPEG 合成为 UltraHDR JPEG,并可组装 Motion Photo(JPEG + MP4)。- Upstream sources live in the
ultrahdr-sys/libultrahdrsubmodule (Apache-2.0). / 上游源码存放在ultrahdr-sys/libultrahdr子模块(Apache-2.0)。 ultrahdr-browser: Vite/React demo that runsultrahdr-bakevia WASI in the browser; /ultrahdr-browser:基于 Vite/React 的浏览器演示,通过 WASI 运行ultrahdr-bake
Repository layout / 目录结构
ultrahdr-sys/: build script, bindgen output, and generatedsysAPIs. /ultrahdr-sys/:构建脚本、bindgen 输出与底层sys接口。ultrahdr/: ergonomic wrapper plusexamples/ultrahdr_app.rssample. /ultrahdr/:易用封装与示例examples/ultrahdr_app.rs。ultrahdr-bake/: end-user CLI for baking UltraHDR JPEGs and assembling Motion Photos. /ultrahdr-bake/:面向用户的 UltraHDR 生成命令行,并可组装 Motion Photo。ultrahdr-sys/libultrahdr/: upstream C/C++ sources pulled as a git submodule. /ultrahdr-sys/libultrahdr/:上游 C/C++ 源码子模块。
Prerequisites / 前置依赖
- Initialize submodules:
git submodule update --init --recursive. / 初始化子模块:git submodule update --init --recursive。 - Build tools:
cmake,ninja(optional but faster),nasm,pkg-config; install EGL/GLES dev packages when enabling theglesfeature. / 构建工具:cmake、ninja(可选)、nasm、pkg-config;启用gles特性时需安装 EGL/GLES 开发包。 - By default the
vendoredfeature builds libjpeg-turbo and friends; disable it to link against system libs. / 默认启用vendored从源码构建 libjpeg-turbo 等依赖;若要链接系统库可关闭该特性。 - To point at an existing
libultrahdrcheckout, setULTRAHDR_SRC_DIR=/path/to/libultrahdr. / 若已有libultrahdr源码,可设置ULTRAHDR_SRC_DIR=/path/to/libultrahdr。
Quick start / 快速开始
# Build the CLI with default features (vendored, iso21496)
# Encode using explicit HDR/SDR inputs
# Or let the tool auto-detect which JPEG is HDR vs SDR
# Build a Motion Photo (v2 metadata) from a still + MP4
# Build the browser demo (wasm + Vite/React)
使用默认特性构建 CLI 并编码 UltraHDR 的示例如上。
Browser demo: deploys under root by default; GitHub Pages build sets VITE_BASE_PATH=/libultrahdr-rs/. The wasm (ultrahdr-bake.wasm) is fetched relative to import.meta.env.BASE_URL. /
浏览器演示:默认以根路径部署;在 GitHub Pages 上构建时使用 VITE_BASE_PATH=/libultrahdr-rs/,WASM(ultrahdr-bake.wasm)从 import.meta.env.BASE_URL 相对路径加载。
Library usage / 库用法示例
use ;
解码 UltraHDR JPEG 并再次编码的简要示例。
Features / 可选特性
vendored(default): build libjpeg-turbo and other deps from source. /vendored(默认):从源码构建 libjpeg-turbo 等依赖。shared: link dynamically againstlibuhdr. /shared:动态链接libuhdr。gles: enable EGL/GLES support in upstream CMake. /gles:在上游启用 EGL/GLES 支持。iso21496(default): emit ISO/TS 21496-1 gain map metadata. /iso21496(默认):写入 ISO/TS 21496-1 增益图元数据。
Tests / 测试
Run with all features enabled to mirror CI. / 建议启用全部特性以对齐 CI。
License / 许可证
Apache-2.0, matching upstream libultrahdr. / 与上游 libultrahdr 相同的 Apache-2.0 许可。