src/main/java/org/jcodec/codecs/h264/encode/MBDeblocker.java
public void deblockMBGeneric(EncodedMB curMB, EncodedMB leftMB, EncodedMB topMB, int[][] vertStrength,
            int horizStrength[][]) {
        Picture curPix = curMB.getPixels();
        if (leftMB != null) {
            Picture leftPix = leftMB.getPixels();
            int avgQp = MathUtil.clip((leftMB.getQp() + curMB.getQp() + 1) >> 1, 0, 51);
            deblockBorder(vertStrength[0], avgQp, leftPix.getPlaneData(0), 3, curPix.getPlaneData(0), 0, P_POS_V,
                    Q_POS_V, false);
            deblockBorderChroma(vertStrength[0], avgQp, leftPix.getPlaneData(1), 3, curPix.getPlaneData(1), 0,
                    P_POS_V_CHR, Q_POS_V_CHR, false);
            deblockBorderChroma(vertStrength[0], avgQp, leftPix.getPlaneData(2), 3, curPix.getPlaneData(2), 0,
                    P_POS_V_CHR, Q_POS_V_CHR, false);
        }
        for (int i = 0; i < 3; i++) {
            deblockBorder(vertStrength[i + 1], curMB.getQp(), curPix.getPlaneData(0), i, curPix.getPlaneData(0), i + 1,
                    P_POS_V, Q_POS_V, false);
            deblockBorderChroma(vertStrength[i + 1], curMB.getQp(), curPix.getPlaneData(1), i, curPix.getPlaneData(1),
                    i + 1, P_POS_V_CHR, Q_POS_V_CHR, false);
            deblockBorderChroma(vertStrength[i + 1], curMB.getQp(), curPix.getPlaneData(2), i, curPix.getPlaneData(2),
                    i + 1, P_POS_V_CHR, Q_POS_V_CHR, false);
        }

        if (topMB != null) {
            Picture topPix = topMB.getPixels();
            int avgQp = MathUtil.clip((topMB.getQp() + curMB.getQp() + 1) >> 1, 0, 51);
            deblockBorder(horizStrength[0], avgQp, topPix.getPlaneData(0), 3, curPix.getPlaneData(0), 0, P_POS_H,
                    Q_POS_H, true);
            deblockBorderChroma(horizStrength[0], avgQp, topPix.getPlaneData(1), 3, curPix.getPlaneData(1), 0,
                    P_POS_H_CHR, Q_POS_H_CHR, true);
            deblockBorderChroma(horizStrength[0], avgQp, topPix.getPlaneData(2), 3, curPix.getPlaneData(2), 0,
                    P_POS_H_CHR, Q_POS_H_CHR, true);
        }
        for (int i = 0; i < 3; i++) {
            deblockBorder(horizStrength[i + 1], curMB.getQp(), curPix.getPlaneData(0), i, curPix.getPlaneData(0),
                    i + 1, P_POS_H, Q_POS_H, true);
            deblockBorderChroma(horizStrength[i + 1], curMB.getQp(), curPix.getPlaneData(1), i, curPix.getPlaneData(1),
                    i + 1, P_POS_H_CHR, Q_POS_H_CHR, true);
            deblockBorderChroma(horizStrength[i + 1], curMB.getQp(), curPix.getPlaneData(2), i, curPix.getPlaneData(2),
                    i + 1, P_POS_H_CHR, Q_POS_H_CHR, true);
        }
    }
public void deblockMBGeneric(EncodedMB curMB, EncodedMB leftMB, EncodedMB topMB, int[][] vertStrength,
            int horizStrength[][]) {
        Picture curPix = curMB.getPixels();
        if (leftMB != null) {
            Picture leftPix = leftMB.getPixels();
            int avgQp = MathUtil.clip((leftMB.getQp() + curMB.getQp() + 1) >> 1, 0, 51);
            deblockBorder(vertStrength[0], avgQp, leftPix.getPlaneData(0), 3, curPix.getPlaneData(0), 0, P_POS_V,
                    Q_POS_V, false);
            deblockBorderChroma(vertStrength[0], avgQp, leftPix.getPlaneData(1), 3, curPix.getPlaneData(1), 0,
                    P_POS_V_CHR, Q_POS_V_CHR, false);
            deblockBorderChroma(vertStrength[0], avgQp, leftPix.getPlaneData(2), 3, curPix.getPlaneData(2), 0,
                    P_POS_V_CHR, Q_POS_V_CHR, false);
        }
        for (int i = 0; i < 3; i++) {
            deblockBorder(vertStrength[i + 1], curMB.getQp(), curPix.getPlaneData(0), i, curPix.getPlaneData(0), i + 1,
                    P_POS_V, Q_POS_V, false);
            deblockBorderChroma(vertStrength[i + 1], curMB.getQp(), curPix.getPlaneData(1), i, curPix.getPlaneData(1),
                    i + 1, P_POS_V_CHR, Q_POS_V_CHR, false);
            deblockBorderChroma(vertStrength[i + 1], curMB.getQp(), curPix.getPlaneData(2), i, curPix.getPlaneData(2),
                    i + 1, P_POS_V_CHR, Q_POS_V_CHR, false);
        }

        if (topMB != null) {
            Picture topPix = topMB.getPixels();
            int avgQp = MathUtil.clip((topMB.getQp() + curMB.getQp() + 1) >> 1, 0, 51);
            deblockBorder(horizStrength[0], avgQp, topPix.getPlaneData(0), 3, curPix.getPlaneData(0), 0, P_POS_H,
                    Q_POS_H, true);
            deblockBorderChroma(horizStrength[0], avgQp, topPix.getPlaneData(1), 3, curPix.getPlaneData(1), 0,
                    P_POS_H_CHR, Q_POS_H_CHR, true);
            deblockBorderChroma(horizStrength[0], avgQp, topPix.getPlaneData(2), 3, curPix.getPlaneData(2), 0,
                    P_POS_H_CHR, Q_POS_H_CHR, true);
        }
        for (int i = 0; i < 3; i++) {
            deblockBorder(horizStrength[i + 1], curMB.getQp(), curPix.getPlaneData(0), i, curPix.getPlaneData(0),
                    i + 1, P_POS_H, Q_POS_H, true);
            deblockBorderChroma(horizStrength[i + 1], curMB.getQp(), curPix.getPlaneData(1), i, curPix.getPlaneData(1),
                    i + 1, P_POS_H_CHR, Q_POS_H_CHR, true);
            deblockBorderChroma(horizStrength[i + 1], curMB.getQp(), curPix.getPlaneData(2), i, curPix.getPlaneData(2),
                    i + 1, P_POS_H_CHR, Q_POS_H_CHR, true);
        }
    }
public void deblockMBGeneric ( EncodedMB curMB , EncodedMB leftMB , EncodedMB topMB , int [ ] [ ] vertStrength , int horizStrength [ ] [ ] ) { Picture curPix = curMB . getPixels ( ) ; if ( leftMB != null ) { Picture leftPix = leftMB . getPixels ( ) ; int avgQp = MathUtil . clip ( ( leftMB . getQp ( ) + curMB . getQp ( ) + 1 ) >> 1 , 0 , 51 ) ; deblockBorder ( vertStrength [ 0 ] , avgQp , leftPix . getPlaneData ( 0 ) , 3 , curPix . getPlaneData ( 0 ) , 0 , P_POS_V , Q_POS_V , false ) ; deblockBorderChroma ( vertStrength [ 0 ] , avgQp , leftPix . getPlaneData ( 1 ) , 3 , curPix . getPlaneData ( 1 ) , 0 , P_POS_V_CHR , Q_POS_V_CHR , false ) ; deblockBorderChroma ( vertStrength [ 0 ] , avgQp , leftPix . getPlaneData ( 2 ) , 3 , curPix . getPlaneData ( 2 ) , 0 , P_POS_V_CHR , Q_POS_V_CHR , false ) ; } for ( int i = 0 ; i < 3 ; i ++ ) { deblockBorder ( vertStrength [ i + 1 ] , curMB . getQp ( ) , curPix . getPlaneData ( 0 ) , i , curPix . getPlaneData ( 0 ) , i + 1 , P_POS_V , Q_POS_V , false ) ; deblockBorderChroma ( vertStrength [ i + 1 ] , curMB . getQp ( ) , curPix . getPlaneData ( 1 ) , i , curPix . getPlaneData ( 1 ) , i + 1 , P_POS_V_CHR , Q_POS_V_CHR , false ) ; deblockBorderChroma ( vertStrength [ i + 1 ] , curMB . getQp ( ) , curPix . getPlaneData ( 2 ) , i , curPix . getPlaneData ( 2 ) , i + 1 , P_POS_V_CHR , Q_POS_V_CHR , false ) ; } if ( topMB != null ) { Picture topPix = topMB . getPixels ( ) ; int avgQp = MathUtil . clip ( ( topMB . getQp ( ) + curMB . getQp ( ) + 1 ) >> 1 , 0 , 51 ) ; deblockBorder ( horizStrength [ 0 ] , avgQp , topPix . getPlaneData ( 0 ) , 3 , curPix . getPlaneData ( 0 ) , 0 , P_POS_H , Q_POS_H , true ) ; deblockBorderChroma ( horizStrength [ 0 ] , avgQp , topPix . getPlaneData ( 1 ) , 3 , curPix . getPlaneData ( 1 ) , 0 , P_POS_H_CHR , Q_POS_H_CHR , true ) ; deblockBorderChroma ( horizStrength [ 0 ] , avgQp , topPix . getPlaneData ( 2 ) , 3 , curPix . getPlaneData ( 2 ) , 0 , P_POS_H_CHR , Q_POS_H_CHR , true ) ; } for ( int i = 0 ; i < 3 ; i ++ ) { deblockBorder ( horizStrength [ i + 1 ] , curMB . getQp ( ) , curPix . getPlaneData ( 0 ) , i , curPix . getPlaneData ( 0 ) , i + 1 , P_POS_H , Q_POS_H , true ) ; deblockBorderChroma ( horizStrength [ i + 1 ] , curMB . getQp ( ) , curPix . getPlaneData ( 1 ) , i , curPix . getPlaneData ( 1 ) , i + 1 , P_POS_H_CHR , Q_POS_H_CHR , true ) ; deblockBorderChroma ( horizStrength [ i + 1 ] , curMB . getQp ( ) , curPix . getPlaneData ( 2 ) , i , curPix . getPlaneData ( 2 ) , i + 1 , P_POS_H_CHR , Q_POS_H_CHR , true ) ; } }
Deblocks bottom edge of topOutMB, right edge of leftOutMB and left/top
and inner block edges of outMB

@param curPix
Pixels of the current MB
@param leftPix
Pixels of the leftMB
@param topPix
Pixels of the tipMB

@param vertStrength
Border strengths for vertical edges (filtered first)
@param horizStrength
Border strengths for the horizontal edges

@param curQp
Current MB's qp
@param leftQp
Left MB's qp
@param topQp
Top MB's qp
Deblocks bottom edge of topOutMB right edge of leftOutMB and left / top and inner block edges of outMB