void ff_ivi_inverse_slant_4x4(const int32_t *in, int16_t *out, uint32_t pitch, const uint8_t *flags) { int i; const int32_t *src; int32_t *dst; int tmp[16]; int t0, t1, t2, t3, t4; #define COMPENSATE(x) (x) src = in; dst = tmp; for (i = 0; i < 4; i++) { if (flags[i]) { IVI_INV_SLANT4(src[0], src[4], src[8], src[12], dst[0], dst[4], dst[8], dst[12], t0, t1, t2, t3, t4); } else dst[0] = dst[4] = dst[8] = dst[12] = 0; src++; dst++; } #undef COMPENSATE #define COMPENSATE(x) ((x + 1)>>1) src = tmp; for (i = 0; i < 4; i++) { if (!src[0] && !src[1] && !src[2] && !src[3]) { out[0] = out[1] = out[2] = out[3] = 0; } else { IVI_INV_SLANT4(src[0], src[1], src[2], src[3], out[0], out[1], out[2], out[3], t0, t1, t2, t3, t4); } src += 4; out += pitch; } #undef COMPENSATE }
void ff_ivi_row_slant4(const int32_t *in, int16_t *out, uint32_t pitch, const uint8_t *flags) { int i; int t0, t1, t2, t3, t4; #define COMPENSATE(x) (((x) + 1)>>1) for (i = 0; i < 4; i++) { if (!in[0] && !in[1] && !in[2] && !in[3]) { memset(out, 0, 4*sizeof(out[0])); } else { IVI_INV_SLANT4( in[0], in[1], in[2], in[3], out[0], out[1], out[2], out[3], t0, t1, t2, t3, t4); } in += 4; out += pitch; } #undef COMPENSATE }
void ff_ivi_col_slant4(const int32_t *in, int16_t *out, uint32_t pitch, const uint8_t *flags) { int i, row2; int t0, t1, t2, t3, t4; row2 = pitch << 1; #define COMPENSATE(x) (((x) + 1)>>1) for (i = 0; i < 4; i++) { if (flags[i]) { IVI_INV_SLANT4(in[0], in[4], in[8], in[12], out[0], out[pitch], out[row2], out[row2 + pitch], t0, t1, t2, t3, t4); } else { out[0] = out[pitch] = out[row2] = out[row2 + pitch] = 0; } in++; out++; } #undef COMPENSATE }