Skip to content
  • Geza Lore's avatar
    Fix segfault with --cpu-used >= 3 and ext-refs. · 77d197e6
    Geza Lore authored
    With ext-ref enabled, it is possible that when trying to encode the
    first true ALTREF frame after a keyframe, the previous ALTREF frame
    (alias for the keyframe) is the same as one of the new LAST{2,3,4}
    reference frames, and hence cpi->ref_frame_flags will have the ALTREF
    bit clear, as computed by get_ref_frame_flags in encoder.c.
    
    sf->alt_ref_search_fp forces the previous ALTREF frame to
    be used as the only possible  reference when encoding a new ALTREF
    frame, but due to cpi->ref_frame_flags, some buffers will not be
    initialized (see rdopt.c:7689 yv12_mb), leading to a segfault.
    
    get_ref_frame_flags in encoder.c has been changed to prefer to keep
    the  LAST frame, then the ALTREF frame, then any of the LAST{2,3,4}
    frames and then the GOLDEN frame in that order of preference in case
    any of them are the same. This avoids the segfault and behaves the
    same for the baseline.
    
    Change-Id: I4da1991667614009da5d3061a6316c0d5dbc6c0c
    77d197e6