Opened 12 years ago Closed 10 years ago #671 closed defect (fixed)DeltaQpRD mismatch when multiple slices are used
Description
When DeltaQpRD is enabled and multiple slices (also dependent slices) are used, encoder and decoder mismatch. Attachments (4)Change History (15)comment:1 Changed 12 years ago by DefaultCC Plugin
comment:2 Changed 12 years ago by ksuehringChanged 12 years ago by pieterkapsenbergChanged 12 years ago by pieterkapsenbergcomment:3 Changed 12 years ago by pieterkapsenberg
The attached files show a different dependent slices digest mismatch when decoding the first B picture. comment:4 Changed 12 years ago by pieterkapsenberg
Here the problem may be that getSlice()->getMvdL1ZeroFlag() does not use the value from the first slice in the pic, rather it uses the default of 0. comment:5 Changed 12 years ago by ksuehring
Can we try to keep different issues separate? It's hard to find a dependent slice issue in the comments under a different heading. Also if the main issue is solved, I would like to be able to close the ticket.
Please either file a new ticket for the dependent slice mismatch or reopen #669. comment:6 Changed 12 years ago by pieterkapsenberg
Done. The other issue is filed under separate ticket #673 comment:7 Changed 10 years ago by karlsharman
The base problem, as seen by running:
goes wrong due to the corruption of the reconstruction buffer in the encoder. In TEncSlice::precompressSlice, the loop filter is applied to the entire frame after trial encoding a slice at a particular QP. This will therefore update (corrupt) the reconstructed data of previously coded slices.
The code is also not ideal as future slices have not yet been coded and these impact the distortion being calculated.
A TODO was added recently in precompressSlice with a query about the validity of the software when multiple slice-segments are used. comment:8 Changed 10 years ago by karlsharman
I have prepared a patch that handles multiple slices and slice-segments when DeltaQpRD is used. The patch, however, bypasses the deblocking filter (SAO was already being ignored) - there is a TODO to highlight this. If someone wants the loop-filters to be used, please update the patch.
In addition, the distortion is based upon the SSE distortion calculated during compressSlice (see TComRdCost::getDistPart), which has a weighting applied to the chroma channels. This is different to the current software where a simple SSE was used (of the whole reconstructed frame, some of which may not have been reconstructed). Which is the preferred measure? Changed 10 years ago by karlsharmancomment:9 Changed 10 years ago by ksuehring
Changed 10 years ago by karlsharmancomment:10 Changed 10 years ago by karlsharman
I have updated the patch due to other changes in the code base.
Just to clarify about the problems that are currently in the code.
Problem 1:
Problem 2:
Problem 3 (encoder-decoder mismatches):
To sort these 2 problems out, the patch no longer applies the deblocking filter
Problem 4:
comment:11 Changed 10 years ago by ksuehring
The latest patch has been applied in r4393 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
|
Ticket #669 has been marked as a duplicate of this ticket.