• Xu Guangxin's avatar
    lavc/hevc_refs: Fix the logic of find_ref_idx() · 8b5ffaea
    Xu Guangxin authored
    Currently find_ref_idx() would trigger 2 scans in DPB to find the
    requested POC:
    1. Firstly, ignore MSB of ref->poc and search for the requested POC;
    2. Secondly, compare the entire ref->poc with requested POC;
    
    For long term reference, we are able to only check LSB if MSB is not
    presented(e.g. delta_poc_msb_present_flag == 0). However, for short
    term reference, we should never ignore poc's MSB and it should be
    kind of bit-exact. (Details in 8.3.2)
    
    Otherwise this leads to decoding failures like:
    [hevc @ 0x5638f4328600] Error constructing the frame RPS.
    [hevc @ 0x5638f4328600] Error parsing NAL unit #2.
    [hevc @ 0x5638f4338a80] Could not find ref with POC 21
    Error while decoding stream #0:0: Invalid data found when processing input
    
    Search the requested POC based on whether MSB is used, and avoid
    the 2-times scan for DPB buffer. This benefits both native HEVC
    decoder and integrated HW decoders.
    Signed-off-by: 's avatarXu Guangxin <guangxin.xu@intel.com>
    Signed-off-by: 's avatarLinjie Fu <linjie.fu@intel.com>
    8b5ffaea
hevc_refs.c 16.5 KB