Opened 6 years ago
Closed 6 years ago
#179 closed defect (fixed)
HDR Anchor encoding crashes with VTM4.0
Reported by: | taoranlu | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | |
Component: | VTM | Version: | |
Keywords: | Cc: | ksuehring, XiangLi, fbossen, jvet@… |
Description
Current VTM will crash during encoding for HDR Anchor test condition. Part of reason is caused by bug of reshaper implementation regarding RDCost. The fix is provided in merge request: https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/merge_requests/269/diffs
However, lumaDQP still have issue with (possibly) JVET_M0102_INTRA_SUBPARTITIONS. The encoder for HDR Anchor setting will crash even if we turn reshaper macro completely off ( JVET_M0427_INLOOP_RESHAPER=0) and enable WCG_EXT = 1 in typedef.h
The code will crash in EncCU.cpp, xCompressCU(): it enters the condition when DQP is used, and then the getTU() function will crash. Inside getTU(), it crashes in the while loop introduced by JVET_M0102_INTRA_SUBPARTITIONS.
if (tempCS->pps->getUseDQP() && CS::isDualITree(*tempCS) && isChroma(partitioner.chType))
{
const Position chromaCentral(tempCS->area.Cb().chromaPos().offset(tempCS->area.Cb().chromaSize().width >> 1, tempCS->area.Cb().chromaSize().height >> 1));
const Position lumaRefPos(chromaCentral.x << getComponentScaleX(COMPONENT_Cb, tempCS->area.chromaFormat), chromaCentral.y << getComponentScaleY(COMPONENT_Cb, tempCS->area.chromaFormat));
const CodingStructure* baseCS = bestCS->picture->cs;
const CodingUnit* colLumaCu = baseCS->getCU(lumaRefPos, CHANNEL_TYPE_LUMA);
const TransformUnit* tu = baseCS->getTU(lumaRefPos, CHANNEL_TYPE_LUMA);
if (colLumaCu && tu)
{
currTestMode.qp = colLumaCu->qp;
}
}
In CodingStructure.cpp, getTU()
#if JVET_M0102_INTRA_SUBPARTITIONS
if( idx != 0 )
{
unsigned extraIdx = 0;
if( isLuma( effChType ) )
{
const TransformUnit& tu = *tus[idx - 1];
if( tu.cu->ispMode ) Intra SubPartitions mode
{
we obtain the offset to index the corresponding sub-partition
if( subTuIdx != -1 )
{
extraIdx = subTuIdx;
}
else
{
while( pos != tus[idx - 1 + extraIdx]->blocks[effChType].pos() )
{
extraIdx++;
}
}
}
}
return tus[idx - 1 + extraIdx];
}
#else
Change history (1)
comment:1 Changed 6 years ago by fbossen
- Resolution set to fixed
- Status changed from new to closed