Beispiel #1
0
static WEBP_INLINE void ComplexMask(const __m128i* const p1,
                                    const __m128i* const p0,
                                    const __m128i* const q0,
                                    const __m128i* const q1,
                                    int thresh, int ithresh,
                                    __m128i* const mask) {
    const __m128i it = _mm_set1_epi8(ithresh);
    const __m128i diff = _mm_subs_epu8(*mask, it);
    const __m128i thresh_mask = _mm_cmpeq_epi8(diff, _mm_setzero_si128());
    __m128i filter_mask;
    NeedsFilter(p1, p0, q0, q1, thresh, &filter_mask);
    *mask = _mm_and_si128(thresh_mask, filter_mask);
}
Beispiel #2
0
// Applies filter on 2 pixels (p0 and q0)
static WEBP_INLINE void DoFilter2(__m128i* const p1, __m128i* const p0,
                                  __m128i* const q0, __m128i* const q1,
                                  int thresh) {
    __m128i a, mask;
    const __m128i sign_bit = _mm_set1_epi8(0x80);
    // convert p1/q1 to int8_t (for GetBaseDelta)
    __m128i p1s = _mm_xor_si128(*p1, sign_bit);   // insieme: dropped const
    __m128i q1s = _mm_xor_si128(*q1, sign_bit);   // insieme: dropped const

    NeedsFilter(p1, p0, q0, q1, thresh, &mask);

    FLIP_SIGN_BIT2(*p0, *q0);
    GetBaseDelta(&p1s, p0, q0, &q1s, &a);
    a = _mm_and_si128(a, mask);     // mask filter values we don't care about
    DoSimpleFilter(p0, q0, &a);
    FLIP_SIGN_BIT2(*p0, *q0);
}
Beispiel #3
0
// Applies filter on 2 pixels (p0 and q0)
static WEBP_INLINE void DoFilter2(const __m128i* p1, __m128i* p0, __m128i* q0,
                                  const __m128i* q1, int thresh) {
    __m128i a, mask;
    const __m128i sign_bit = _mm_set1_epi8(0x80);
    const __m128i p1s = _mm_xor_si128(*p1, sign_bit);
    const __m128i q1s = _mm_xor_si128(*q1, sign_bit);

    NeedsFilter(p1, p0, q0, q1, thresh, &mask);

    // convert to signed values
    FLIP_SIGN_BIT2(*p0, *q0);

    GET_BASE_DELTA(p1s, *p0, *q0, q1s, a);
    a = _mm_and_si128(a, mask);     // mask filter values we don't care about
    DO_SIMPLE_FILTER(*p0, *q0, a);

    // unoffset
    FLIP_SIGN_BIT2(*p0, *q0);
}