Opened 2 years ago
Closed 2 years ago
#1559 closed defect (fixed)
Problem with inference of NoOutputOfPriorPicsFlag
Reported by: | nikolai.shostak | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | VTM | Version: | VTM-17.1 |
Keywords: | Cc: | ksuehring, XiangLi, fbossen, jvet@… |
Description
Version VTM-17.0
After sh_no_output_of_prior_pics_flag is parsed
READ_FLAG(uiCode, "sh_no_output_of_prior_pics_flag"); pcSlice->setNoOutputOfPriorPicsFlag(uiCode != 0);
it is soon reset like this:
//the inference for NoOutputOfPriorPicsFlag if( !m_firstSliceInBitstream && m_picHeader.getNoOutputBeforeRecoveryFlag() ) { m_apcSlicePilot->setNoOutputOfPriorPicsFlag(true); } else { m_apcSlicePilot->setNoOutputOfPriorPicsFlag(false); }
where NoOutputBeforeRecoveryFlag is set to 1 for every IDR slice.
So it doesn't matter what value was signaled for sh_no_output_of_prior_pics_flag.
This cause lost frames in Multilayer streams when dpb_max_dec_pic_buffering and dpb_max_num_reorder_pics are greater than necessary.
Consider 2 layers, both AllIntra
Layer0: LId0-POC0(IDR) LId0-POC1(IDR)
Layer1: LId1-POC0(IDR) LId1-POC1(IDR)
dpb_max_dec_pic_buffering = dpb_max_num_reorder_pics = 5 (or anything >1)
Pictures encoded in following order:
- LId0-POC0 (IDR)
- LId1-POC0 (IDR)
- LId0-POC1 (IDR)
- LId1-POC1 (IDR)
When decoder starts decoding picture LId0-POC1 it will output LId0-POC0 via xFlushOutput since LId0-POC1 is an IDR. But not LId1-POC0, since it is from different layer.
Then decoder derives NoOutputOfPriorPicsFlag = true and calls checkNoOutputPriorPics() which sets neededForOutput=false for all frames in DPB.
As a result, LId1-POC0 is never outputted.
Change history (3)
comment:1 Changed 2 years ago by nikolai.shostak
comment:2 Changed 2 years ago by nikolai.shostak
- Version changed from VTM-16.0 to VTM-17.1
comment:3 Changed 2 years ago by ksuehring
- Resolution set to fixed
- Status changed from new to closed
Agreed. Fixed as suggested.
MR: https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/merge_requests/2273