Opened 13 years ago Closed 13 years ago #256 closed defect (fixed)HM-5.0 crashes when Independent Tiles is used
Description
The Tiles related configuration that are used (using encoder_randomaccess.cfg):
Crash happens in function:
The configuration that causes the crash seems to be TileBoundaryIndependenceIdc setting. When it is set to 0, no problem occurs.
Furthermore, the problem may be related to the macro DBF_DQP. When the macro is set to 0, the software runs without any problem even with TileBoundaryIndependenceIdc = 1. Change History (6)comment:1 Changed 13 years ago by DefaultCC Plugin
comment:2 Changed 13 years ago by geertvcomment:3 follow-up: ↓ 4 Changed 13 years ago by ksuehring
So it seems issue #257 is a duplicate of this? I think it suggests the same NULL pointer check. comment:4 in reply to: ↑ 3 Changed 13 years ago by geertv
Replying to ksuehring:
That is partially correct, however, even with the suggested patch for ticket #256, the encoder will still crash (not deblocking related) for the crash conditions attached to ticket #257. comment:5 Changed 13 years ago by ksuehring
the patch has been applied to HM-5.0-dev-bugfix in r1704 comment:6 Changed 13 years ago by davidf
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
|
After some investigation, I think that the bug is situated in the TComLoopFilter::xSetLoopfilterParam function, which should make the "LeftEdge" and "TopEdge" flags false, so that the edge between tiles is not deblocked when TileBoundaryIndependenceIdc=1. Digging deeper into this function reveals that the bug is likely in the getPULeft and getPUAbove functions, where the getTileBoundaryIndependenceIdr() flag is read. If these two functions return NULL in case of TileBoundaryIndependenceIdc=1 for the particular tile boundary edge, then that edge will not be deblocking filtered and the QP availability problem inside the DBF_DQP macro will not occur. Note also that accessing the IPCM flag has a similar problem.
This is a temporary patch to correct the behavior of the deblocking filter if the CU on the left side or above the edge to be deblocking filtered is unavailable:
Put TILEBOUNDARYINDEPENDENCE_PATCH macro inside TComLoopFilter::xEdgeFilterLuma and TComLoopFilter::xEdgeFilterChroma functions: