static av_always_inline int rv40_loop_filter_strength(uint8_t *src,
                                                      int step, int stride,
                                                      int beta, int beta2,
                                                      int edge,
                                                      int *p1, int *q1)
{
    int sum_p1p0 = 0, sum_q1q0 = 0, sum_p1p2 = 0, sum_q1q2 = 0;
    int strong0 = 0, strong1 = 0;
    uint8_t *ptr;
    int i;

    for (i = 0, ptr = src; i < 4; i++, ptr += stride) {
        sum_p1p0 += ptr[-2*step] - ptr[-1*step];
        sum_q1q0 += ptr[ 1*step] - ptr[ 0*step];
    }

    *p1 = FFABS(sum_p1p0) < (beta << 2);
    *q1 = FFABS(sum_q1q0) < (beta << 2);

    if(!*p1 && !*q1)
        return 0;

    if (!edge)
        return 0;

    for (i = 0, ptr = src; i < 4; i++, ptr += stride) {
        sum_p1p2 += ptr[-2*step] - ptr[-3*step];
        sum_q1q2 += ptr[ 1*step] - ptr[ 2*step];
    }

    strong0 = *p1 && (FFABS(sum_p1p2) < beta2);
    strong1 = *q1 && (FFABS(sum_q1q2) < beta2);

    return strong0 && strong1;
}