﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
753	Low Delay flag isn't set for P slices	pieterkapsenberg		"In TDecTop.cpp, the flag bLowDelay is computed only for B slices, so for P slices it remains at the default false value, which is not necessarily the case. This results in incorrectly decoded motion vectors. The draft text makes no such distinction.
A suggested fix is below:
Before:

{{{
    if (pcSlice->isInterB())
    {
      Bool bLowDelay = true;
      Int  iCurrPOC  = pcSlice->getPOC();
      Int iRefIdx = 0;

      for (iRefIdx = 0; iRefIdx < pcSlice->getNumRefIdx(REF_PIC_LIST_0) && bLowDelay; iRefIdx++)
      {
        if ( pcSlice->getRefPic(REF_PIC_LIST_0, iRefIdx)->getPOC() > iCurrPOC )
        {
          bLowDelay = false;
        }
      }
      for (iRefIdx = 0; iRefIdx < pcSlice->getNumRefIdx(REF_PIC_LIST_1) && bLowDelay; iRefIdx++)
      {
        if ( pcSlice->getRefPic(REF_PIC_LIST_1, iRefIdx)->getPOC() > iCurrPOC )
        {
          bLowDelay = false;
        }
      }

      pcSlice->setCheckLDC(bLowDelay);            
    }

}}}
After:
{{{
    Bool bLowDelay = true;
    Int  iCurrPOC  = pcSlice->getPOC();
    Int iRefIdx = 0;
    for (iRefIdx = 0; iRefIdx < pcSlice->getNumRefIdx(REF_PIC_LIST_0) && bLowDelay; iRefIdx++)
    {
      if ( pcSlice->getRefPic(REF_PIC_LIST_0, iRefIdx)->getPOC() > iCurrPOC )
      {
        bLowDelay = false;
      }
    }
    if (pcSlice->isInterB())
    {
      for (iRefIdx = 0; iRefIdx < pcSlice->getNumRefIdx(REF_PIC_LIST_1) && bLowDelay; iRefIdx++)
      {
        if ( pcSlice->getRefPic(REF_PIC_LIST_1, iRefIdx)->getPOC() > iCurrPOC )
        {
          bLowDelay = false;
        }
      }
    }
    pcSlice->setCheckLDC(bLowDelay);            

}}}
"	defect	closed	minor	HM-9.2	HM	HM-9.0	fixed		fbossen ksuehring davidf jct-vc@…
