Skip to content
  • David Barker's avatar
    Make SEG_LVL_{SKIP,ZEROMV} blocks be single-ref-only · d92f3560
    David Barker authored
    This patch modifies the interpretation of SEG_LVL_SKIP and
    SEG_LVL_ZEROMV slightly, to fix a decoder crash and to save bits
    in the intended use cases of these segment flags.
    
    Previously, blocks using either of these segment flags could
    signal reference frames just like any other block. But the mode
    was implicitly taken to be ZEROMV. This worked fine in VP9, but
    crashed for compound blocks in AV1 since those should use
    ZERO_ZEROMV instead.
    
    Now we make it so that SEG_LVL_SKIP and SEG_LVL_ZEROMV imply
    that the block is single-reference. The reference to use is taken
    from the SEG_LVL_REF_FRAME segment feature if that is present,
    or is set to LAST_FRAME if not. See the attached bug report
    for the reasoning behind this.
    
    As a related change, we also teach the encoder how to deal with
    the combination of SEG_LVL_SKIP + SEG_LVL_REF_FRAME.
    
    BUG=aomedia:675
    
    Change-Id: I5e657cbfc1f08395a0301cba701edfb1682502a5
    d92f3560