Skip to content

ManagedCodecs 0.2.3

Choose a tag to compare

@github-actions github-actions released this 29 Oct 21:21
2df2813

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's wasm job 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).