View Issue Details

IDProjectCategoryView StatusLast Update
0000366JVT JM H.264/AVC reference softwaredecoderpublic2020-11-25 16:28
ReporterDev Assigned To 
PrioritynormalSeveritymajorReproducibilityalways
Status resolvedResolutionopen 
Summary0000366: Error in deblocking process of mbaff frames
DescriptionHi,

It seems that there is a error in JM H.264 decoder in deblocking process of MbAff frames for luma field macroblocks. The following is for JM 11.0 but the same problem also exists in newer versions.

The error is in calculating pixQ.pos_y in loopfilter.c. In EdgeLoop() you use getNeighbour() for it.
Pos_y calculated in get_mb_pos(), get_mb_block_pos() as

y = (((mb_addr / 2) / PicWidthInMbs) * 2 + (mb_addr % 2)) * 16; i.e.
y = ((mb_addr / 2) / PicWidthInMbs) * 32 + ((mb_addr % 2) * 16)

It is a position of the upper-left luma sample of the macroblock CurrMbAddr and it is determined in standart (subclause 8.7.1) as inverse macroblock scanning process (6.4.1) and assigned to yI:

y = ((mb_addr / 2) / (PicWidthInSamples / 16)) * 32 + (mb_addr % 2); i.e.
y = ((mb_addr /2) / PicWidthInMbs) * 32 + (mb_addr % 2)

So for odd values of mb_addr the result in JM is wrong.
TagsNo tags attached.

Activities

Dev

2020-11-25 16:27

reporter   ~0000645

At the end I figured it out. It is not a bug, it is just a method to store data. Everything is in full compliance with the standard.

Issue History

Date Modified Username Field Change
2020-04-07 21:40 Dev New Issue
2020-11-25 16:27 Dev Note Added: 0000645
2020-11-25 16:28 Dev Status new => resolved