• Rupert Swarbrick's avatar
    Correctly flush at the end of OBUs · c59f1940
    Rupert Swarbrick authored
    This fixes failures when an OBU has more than a byte's worth of
    trailing zeros.
    As part of this work, it also rejigs the dav1d_flush_get_bits function
    slightly. This worked before, but it wasn't very obvious why (it
    worked because bits_left was never more than 7). This patch renames it
    to dav1d_bytealign_get_bits, which makes it clearer what it does and
    adds a comment explaining why it works properly.
    The new dav1d_bytealign_get_bits is also now void (rather than
    returning the next byte to read). The patch defines
    dav1d_get_bits_pos, which returns the current bit position. This feels
    a little easier to reason about.
    We also add a new check to make sure that we haven't fallen off the
    end of the OBU. This can happen when a byte buffer contains more than
    one OBU: the GetBits might not have got to EOF, but we might now be
    half-way through the next OBU.
getbits.c 4.4 KB