Opened 9 years ago

Closed 7 years ago

Last modified 7 years ago

#206 closed defect (fixed)

HM-4 decoder crashes on ARM

Reported by: alfonso Owned by:
Priority: major Milestone: HM-13.0
Component: HM Version: HM-4.0
Keywords: Cc: fbossen, ksuehring, davidf, jct-vc@…

Description

HM 4.0 decoder (compiled with GCC 4.5.2 on Linux32 for ARM platform) crashes with anchor streams at the first Inter picture, either with "segmentation fault" or with the following assertion failed message:

TComPrediction.cpp:501: Void TComPrediction::xPredInterBi(TComDataCU*, UInt, Int, Int, TComYuv*&, Int): Assertion `iRefIdx[iRefList] < pcCU->getSlice()->getNumRefIdx(eRefPicList)' failed.

Change History (9)

comment:1 Changed 9 years ago by fbossen

Could you clarify whether the issue occurs for all bit streams or only a subset thereof?
It may be very difficult for others to reproduce the error (and debug it) if this happens only on a specific environment.

comment:2 Changed 9 years ago by alfonso

I have checked all the reference bit streams in configurations ld-he, ld-lc, ra-he, ra-lc, and the issue always occurs. This is the output of the gdb debugger with one stream:

Program received signal SIGSEGV, Segmentation fault.
0x0000d320 in TComPic::getPOC (this=0x3030303)
at TAppDecoder/../../../../source/Lib/TLibCommon/TComPic.h:89
89 Int getPOC() { return m_apcPicSym->getSlice(m_uiCurrSliceIdx)->getPOC(); }

comment:3 Changed 9 years ago by alfonso

We have find that the error was caused by incorrect sign extension on a variable, which caused incorrect access to the reference pictures memory.

A possible workaround is to change the line
source/Lib/TLibCommon/TComMotionInfo.h., ~140
as follows

old version:
Int getRefIdx( Int iIdx ) const { return m_piRefIdx[iIdx] }

new version:
{
Int getRefIdx( Int iIdx ) const {

if ( m_piRefIdx[iIdx] >> 7 )
{

return (0xFFFFFF00 | m_piRefIdx[iIdx]);

}
else
{

return (0x00000000 | m_piRefIdx[iIdx]);

}

}

comment:4 Changed 9 years ago by fbossen

Looks like a compiler issue to me. Does your compiler define the type 'char' as signed or unsigned?
Have you tried changing the definition of 'Char' to (in TypeDef.h):
typedef signed char Char;

comment:5 Changed 9 years ago by davidf

  • Component set to HM

Updating component after adding WD (Text) tickets

comment:6 Changed 9 years ago by davidf

  • Cc fbossen ksuehring davidf added

comment:7 Changed 9 years ago by davidf

  • Cc jct-vc@… added

comment:8 Changed 7 years ago by fbossen

  • Milestone set to HM-13.0
  • Resolution set to fixed
  • Status changed from new to closed

Fixed in r3771

comment:9 Changed 7 years ago by ksuehring

Ticket #1242 has been marked as a duplicate of this ticket.

Note: See TracTickets for help on using tickets.

This list contains all users that will be notified about changes made to this ticket.

These roles will be notified: Reporter, Owner, Subscriber, Participant

  • Daniele Alfonso (STM)(Reporter, Participant)
  • David Flynn(Subscriber, Participant)
  • Frank Bossen(Subscriber, Participant)
  • jct-vc@…(Subscriber)
  • karl.sharman@…(Always)
  • Karsten Suehring(Subscriber, Participant, Always)