From 4f1dbfd0420a423c0dd614b51e525c7a36d939b3 Mon Sep 17 00:00:00 2001 From: MattJackson <1085847+MattJackson@users.noreply.github.com> Date: Fri, 5 Jun 2026 20:36:19 -0700 Subject: [PATCH] v0.29.0: bump version --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ Cargo.toml | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7575f6a..f85705d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Changelog +## 0.29.0 (2026-06-06) + +### Fixed + +- **Video frames now carry their presentation timestamp (PTS), not the decode + timestamp (DTS), as the MKV block timecode.** The HEVC, H.264, VC-1 and + MPEG-2 parsers stamped each frame with `dts.or(pts)`, so B-frame titles were + muxed with monotonic decode-order timecodes: players presented frames in + decode order (visible judder / apparent "corruption") and PTS-based seeking + landed on the wrong frame. The compressed video was always byte-correct — + this was purely a timestamp defect, and it affected every B-frame title. The + parsers now use `pts.or(dts)`. Verified against a reference muxer on a real + UHD title: the emitted frame sequence is now identical. +- **DTS-HD MA tracks no longer downgrade to the lossy DTS core** — the access + unit is delimited by the next *validated* core sync, so a `0x7FFE8001` byte + pattern inside the XLL extension can no longer truncate the unit. (#10) +- **A resolved AACS key is verified against the content before it is applied**, + so a stale or wrong VUK can no longer silently produce garbage output. +- **`iso://` mux fails fast when no usable AACS key is available** instead of + writing a garbage MKV. + +### Changed + +- Codec / EBML / TS hardening: bounds-checked PMT and PES-header parsing, EBML + length validation, and bounded codec buffers (DTS, TrueHD, PGS). + ## 0.27.3 (2026-06-04) ### Added diff --git a/Cargo.toml b/Cargo.toml index bf9ae49..80e6f7a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libfreemkv" -version = "0.28.1" +version = "0.29.0" edition = "2024" rust-version = "1.86" license = "AGPL-3.0-only"