github strukturag/libde265 v1.1.3
v1.1.3 - high bit depth and Range Extensions release

5 hours ago

v1.1.3 completes high bit depth decoding (up to 16 bit) and repairs cross-component prediction, which had corrupted 4:4:4 Range Extensions streams since v1.0.17. It is ABI- and API-compatible with v1.1.2 and a drop-in replacement; no functions or enum values were added.

High bit depth decoding

Inter prediction above 12 bit was wrong from the first P/B picture on. The fractional sample interpolation used shift1 = BitDepth-8 instead of the Range Extensions' Min(4, BitDepth-8), and the intermediate prediction samples were kept in int16_t although they need max(14, BitDepth+2) bits. The 16-bit kernels are now templated on the intermediate sample type and use int32_t above 12 bit; 8- to 12-bit streams are unaffected and keep their SSE paths. Explicit weighted bi-prediction was broken in a second way: the shortcut for identical motion vectors checked weighted_pred_flag, which governs P slices, instead of weighted_bipred_flag. (#543, thanks @felixbuenemann)

Together with the fixes in v1.1.1 and v1.1.2 this completes high bit depth support. Output is bit-exact against the HM 18 reference decoder at 10, 12, 13, 14 and 16 bit, for mixed luma/chroma bit depths and for 4:2:2, 4:4:4 and 4:0:0. Above 12 bit motion compensation runs the scalar kernels; 8-bit performance is unchanged.

Range Extensions

Cross-component prediction corrupted every chroma block it was applied to, a regression since v1.0.17. A cast added to silence undefined behaviour on a left shift turned the following arithmetic shift into a logical one, so every negative luma residual became a large positive value. This affects 4:4:4 streams only, but at every bit depth including 8 bit.

cabac_bypass_alignment_enabled_flag was parsed and then ignored, so a stream using it desynchronized CABAC and decoded to garbage without any diagnostic. It is now implemented as specified in 9.3.4.3.6, and was the last Range Extensions tool still missing. Both fixes are bit-exact against HM 18.

Don't miss a new libde265 release

NewReleases is sending notifications on new releases.