Fix weighting for B-frames
According to clause 8.4.3 of the H.264 specification:
- The variables w0C and w1C are derived as follows:
If DiffPicOrderCnt( pic1, pic0 ) is equal to 0 or one or both of pic1 and pic0 is marked as "used for long-term reference" or ( DistScaleFactor >> 2 ) < -64 or ( DistScaleFactor >> 2 ) > 128, w0C and w1C are derived as:
w0C = 32 (8-280) w1C = 32 (8-281)
But we for the case of DiffPicOrderCnt( pic1, pic0 ) is equal to 0
used DistScaleFactor equal to 256 and next formulas:
Otherwise, the variables tb, td, tx, and DistScaleFactor are derived from the values of currPicOrField, pic0, and pic1 using Equations 8-201, 8-202, 8-197, and 8-198, respectively, and the weights w0C and w1C are derived as
w0C = 64 - (DistScaleFactor >> 2) (8-282) w1C = DistScaleFactor >> 2 (8-283)
As a result, we got the values w0C = 0
and w1C = 64
instead of 32 for both.
This bug never occurs with the current reference management logic.
Bug report by Lingjiang Fang.