Repository navigation
ManagedCodecs 0.2.3
H.264 right again under the WebAssembly interpreter (wrong from 0.2.0), a better guess for concealed macroblocks, and
less CPU with frame threading. The public API is that of 0.2.0, unchanged.
Fixed
- H.264 under the WebAssembly interpreter (browser-wasm without AOT, SIMD on, the default): frames came out wrong from
0.2.0 on, and differently from one decode to the next, as the interpreter narrows the deblocking strengths'
comparison masks with saturation once it has optimized the function (#206). The masks are now narrowed as signed
lanes, which every runtime narrows alike; CI'swasmjob checks the interpreted build too.
Changed
- H.264 concealment (
ConcealErrors) guesses the motion of a missing macroblock from its neighbours (the candidate whose
prediction matches their edges best), where it copied its place in one reference: on streams cut in packet after
packet, the concealed frames come 0.5 to 15 dB closer to the clean decode (mean PSNR; docs/conformance.md), ahead of
FFmpeg's on five of the eight measured. MBAFF frames still copy. - H.264 frame threading spends 2 to 5% less CPU for the same speed: a picture waiting on its reference's rows waits for
32 rows more once it has to block, and a reference's progress wakes only the waits it satisfies, which halves the
context switches (GitHub's x64 and ARM64 runners, 4 threads).