﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
1559	Problem with inference of NoOutputOfPriorPicsFlag	nikolai.shostak		"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.

"	defect	closed	minor		VTM	VTM-17.1	fixed		ksuehring XiangLi fbossen jvet@…
