All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Detect when an encoded frame overflows its bitstream buffer and report it instead of reading out of bounds, preventing a segfault on large scene-cut frames.
- Scale the H.264/H.265 bitstream buffer by resolution so a single frame can't overflow the fixed minimum.
- Check for
VK_EXT_ycbcr_2plane_444_formatssupport before enabling it, so device creation succeeds on devices without the extension. (#29, @DatCaptainHorse)
- Add
ColorDescription::with_full_rangeandColorDescription::is_hdr. (#30, @lutyjj)
- Acquire the queue family on the first DMA-BUF import. (#25, @schlegp)
- Fix AV1 encoding on AMD RADV — layered DPB, converter layout barrier, GOP clamping. (#27, @schlegp)
- Skip encode timestamp queries on unsupported queues; guard
timestamp_query_pooldestruction. (#28, @schlegp)
ColorDescription::bt709()now defaults tofull_range: false- BT.709 quantization per ITU-R BT.709-6 is limited (studio) range [16–235], not full range. Previously defaulted tofull_range: true, which caused washed-out SDR blacks when clients decoded as limited range. Fixed in #24ColorConverterConfig::new()now defaults tofull_range: falseto match the BT.709 standard and theColorDescription::bt709()default. (#24)
- Encode pipelining with timeline semaphores by @urwrstkn8mare in #21
- Async push-based encode readback on a dedicated completion thread by @urwrstkn8mare in #21
- Reference frame invalidation (RFI) for H.264/H.265/AV1; AV1 multi-reference prediction by @urwrstkn8mare in #21
- Unified per-codec encoders into generic
CodecEncoder<C>with sharedEncoderCommonby @urwrstkn8mare in #21
- CI check for README.md consistency in GitHub Actions workflow.
- Cleaner
p_nextchain handling — replaced manual pointer arithmetic with saferextend-based construction across H.265 init, session parameters, resources, and Vulkan utilities.
- AV1 reference-frame handling — corrected reference frame list population and cleared clippy warnings.
- AV1 CBR/VBR modes no longer set
min_q_index/max_q_index, which are incompatible with those rate-control modes. - Missing rate-control push entries in
VkVideoCodingControlInfoKHRfor H.264, H.265, and AV1 encoders. - AV1 init now uses
extendfor properVkVideoEncodeInfoKHRconstruction.
Bt709LinearToBt2020Pqcolor space — converts linear BT.709 (scRGB, FP16) to BT.2020+PQ via gamut mapping + PQ OETF. Used for HDR games that present withVK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT.sdr_reference_white_nitscontrols the tone-mapping scale (80 nits per IEC 61966-2-2).set_sdr_reference_white_nits()— dynamically updates the SDR reference white level via push constants without recreating the pipeline.
shader/directory — contains GLSL source (color_convert.comp), compile script (compile.sh), precompiled SPIR-V (color_convert.spv), and documentation (README.md).- Shader development workflow documented in README.md.
shadercdependency — shaders are now precompiled to SPIR-V and embedded at build time viainclude_bytes!. Noglslcor Vulkan SDK required to build the crate.build.rs— no longer needed since shaders are precompiled.shader.rs— SPIR-V constant andget_spirv_code()moved topipeline.rs.