diff options
author | Xu Guangxin <guangxin.xu@intel.com> | 2022-07-15 13:06:43 +0800 |
---|---|---|
committer | Haihao Xiang <haihao.xiang@intel.com> | 2022-07-27 10:54:38 +0800 |
commit | 2191f9a6affadb530cd3e96f543cfdb175092a85 (patch) | |
tree | c7879be8f1c7feec8619455b9827175802fd209f /libavcodec | |
parent | 99501b50157702af191a6cc8d0ddb89663d69d61 (diff) | |
download | ffmpeg-2191f9a6affadb530cd3e96f543cfdb175092a85.tar.gz |
lavc/hevc_refs: exclude current frame from long term refs
suppose
a. You have 3 frames, 0, 1, 4096.
b. The ltMask is 0xfff and use_msb is 0.
c. The 0, 1 are lt refs for 4096.
d. you are decoding frame 4096, and get the 0 frame.
Since 4096 & ltMask is 0 too, even you want get 0, find_ref_idx may give you 4096.
add_candidate_ref will report an error for this
Tested-by: Fei Wang <fei.w.wang@intel.com>
Signed-off-by: Xu Guangxin <guangxin.xu@intel.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/hevc_refs.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index 5282716a61..811e8feff8 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -387,7 +387,7 @@ static HEVCFrame *find_ref_idx(HEVCContext *s, int poc, uint8_t use_msb) for (i = 0; i < FF_ARRAY_ELEMS(s->DPB); i++) { HEVCFrame *ref = &s->DPB[i]; if (ref->frame->buf[0] && ref->sequence == s->seq_decode) { - if ((ref->poc & mask) == poc) + if ((ref->poc & mask) == poc && (use_msb || ref->poc != s->poc)) return ref; } } |