#include "libavutil/avutil.h"
Go to the source code of this file.
Defines | |
#define | ALTIVEC_TRANSPOSE_8x8_SHORT(src_a, src_b, src_c, src_d, src_e, src_f, src_g, src_h) |
#define | LOAD_LINE(i) |
#define | LOAD_LINE_ALIGNED(i) |
#define | ITER(i, j) |
#define | LOAD_LINE(i) |
#define | LOAD_LINE_ALIGNED(i) |
#define | COMPUTE_VR(i, j, k) |
#define | PACK_AND_STORE(i) |
#define | PACK_AND_STORE_ALIGNED(i) |
#define | LOAD_LINE(i) |
#define | STORE(i) |
#define | LOAD_LINE(i) |
#define | EXTRACT(op) |
#define | COMPARE(i) |
#define | F_INIT() |
#define | F2(i, j, k, l) |
#define | ITER(i, j, k) |
#define | STORE_LINE(i) |
#define | doHorizLowPass_altivec(a...) doHorizLowPass_C(a) |
#define | doHorizDefFilter_altivec(a...) doHorizDefFilter_C(a) |
#define | do_a_deblock_altivec(a...) do_a_deblock_C(a) |
#define | LOAD_LINE(src, i) |
#define | ACCUMULATE_DIFFS(i) |
#define | OP(i) v_tempBlurredAss##i = vec_avg(v_tempBlurredAss##i, v_srcAss##i); |
#define | OP(i) v_tempBlurredAss##i = v_srcAss##i; |
#define | OP(i) |
#define | OP(i) |
#define | PACK_AND_STORE(src, i) |
#define | LOAD_DOUBLE_LINE(i, j) |
#define | LOAD_DOUBLE_LINE(i, j) |
#define | STORE_DOUBLE_LINE(i, j) |
Functions | |
static int | vertClassify_altivec (uint8_t src[], int stride, PPContext *c) |
static void | doVertLowPass_altivec (uint8_t *src, int stride, PPContext *c) |
static void | doVertDefFilter_altivec (uint8_t src[], int stride, PPContext *c) |
static void | dering_altivec (uint8_t src[], int stride, PPContext *c) |
static void | tempNoiseReducer_TMPL (uint8_t *src, int stride, uint8_t *tempBlurred, uint32_t *tempBlurredPast, int *maxNoise) |
static void | transpose_16x8_char_toPackedAlign_altivec (unsigned char *dst, unsigned char *src, int stride) |
static void | transpose_8x16_char_fromPackedAlign_altivec (unsigned char *dst, unsigned char *src, int stride) |
#define ACCUMULATE_DIFFS | ( | i | ) |
Value:
do { \ vector signed short v_d = vec_sub(v_tempBlurredAss##i, \ v_srcAss##i); \ v_dp = vec_msums(v_d, v_d, v_dp); \ v_sysdp = vec_msums(v_d, vsint16_1, v_sysdp); \ } while (0)
Referenced by tempNoiseReducer_TMPL().
#define ALTIVEC_TRANSPOSE_8x8_SHORT | ( | src_a, | |||
src_b, | |||||
src_c, | |||||
src_d, | |||||
src_e, | |||||
src_f, | |||||
src_g, | |||||
src_h | ) |
Value:
do { \
__typeof__(src_a) tempA1, tempB1, tempC1, tempD1; \
__typeof__(src_a) tempE1, tempF1, tempG1, tempH1; \
__typeof__(src_a) tempA2, tempB2, tempC2, tempD2; \
__typeof__(src_a) tempE2, tempF2, tempG2, tempH2; \
tempA1 = vec_mergeh (src_a, src_e); \
tempB1 = vec_mergel (src_a, src_e); \
tempC1 = vec_mergeh (src_b, src_f); \
tempD1 = vec_mergel (src_b, src_f); \
tempE1 = vec_mergeh (src_c, src_g); \
tempF1 = vec_mergel (src_c, src_g); \
tempG1 = vec_mergeh (src_d, src_h); \
tempH1 = vec_mergel (src_d, src_h); \
tempA2 = vec_mergeh (tempA1, tempE1); \
tempB2 = vec_mergel (tempA1, tempE1); \
tempC2 = vec_mergeh (tempB1, tempF1); \
tempD2 = vec_mergel (tempB1, tempF1); \
tempE2 = vec_mergeh (tempC1, tempG1); \
tempF2 = vec_mergel (tempC1, tempG1); \
tempG2 = vec_mergeh (tempD1, tempH1); \
tempH2 = vec_mergel (tempD1, tempH1); \
src_a = vec_mergeh (tempA2, tempE2); \
src_b = vec_mergel (tempA2, tempE2); \
src_c = vec_mergeh (tempB2, tempF2); \
src_d = vec_mergel (tempB2, tempF2); \
src_e = vec_mergeh (tempC2, tempG2); \
src_f = vec_mergel (tempC2, tempG2); \
src_g = vec_mergeh (tempD2, tempH2); \
src_h = vec_mergel (tempD2, tempH2); \
} while (0)
Definition at line 25 of file postprocess_altivec_template.c.
#define COMPARE | ( | i | ) |
Value:
do { \ const vector unsigned char cmp = \ (vector unsigned char)vec_cmpgt(src##i, v_avg); \ const vector unsigned short cmpHi = \ (vector unsigned short)vec_mergeh(cmp, cmp); \ const vector unsigned short cmpLi = \ (vector unsigned short)vec_mergel(cmp, cmp); \ const vector signed short cmpHf = \ (vector signed short)vec_and(cmpHi, mask1); \ const vector signed short cmpLf = \ (vector signed short)vec_and(cmpLi, mask2); \ const vector signed int sump = vec_sum4s(cmpHf, zero); \ const vector signed int sumq = vec_sum4s(cmpLf, sump); \ sum##i = vec_sums(sumq, zero); \ } while (0)
Referenced by dering_altivec().
#define COMPUTE_VR | ( | i, | |||
j, | |||||
k | ) |
Value:
const vector signed short temps1##i = \ vec_add(v_sumsB##i, v_sumsB##k); \ const vector signed short temps2##i = \ vec_mladd(vb##j, (vector signed short)v_2, temps1##i); \ const vector signed short vr##j = vec_sra(temps2##i, v_4)
Referenced by doVertLowPass_altivec().
#define do_a_deblock_altivec | ( | a... | ) | do_a_deblock_C(a) |
Definition at line 826 of file postprocess_altivec_template.c.
#define doHorizDefFilter_altivec | ( | a... | ) | doHorizDefFilter_C(a) |
Definition at line 825 of file postprocess_altivec_template.c.
#define doHorizLowPass_altivec | ( | a... | ) | doHorizLowPass_C(a) |
Definition at line 824 of file postprocess_altivec_template.c.
#define EXTRACT | ( | op | ) |
Value:
do { \ const vector unsigned char s_1 = vec_##op(trunc_src12, trunc_src34); \ const vector unsigned char s_2 = vec_##op(trunc_src56, trunc_src78); \ const vector unsigned char s_6 = vec_##op(s_1, s_2); \ const vector unsigned char s_8h = vec_mergeh(s_6, s_6); \ const vector unsigned char s_8l = vec_mergel(s_6, s_6); \ const vector unsigned char s_9 = vec_##op(s_8h, s_8l); \ const vector unsigned char s_9h = vec_mergeh(s_9, s_9); \ const vector unsigned char s_9l = vec_mergel(s_9, s_9); \ const vector unsigned char s_10 = vec_##op(s_9h, s_9l); \ const vector unsigned char s_10h = vec_mergeh(s_10, s_10); \ const vector unsigned char s_10l = vec_mergel(s_10, s_10); \ const vector unsigned char s_11 = vec_##op(s_10h, s_10l); \ const vector unsigned char s_11h = vec_mergeh(s_11, s_11); \ const vector unsigned char s_11l = vec_mergel(s_11, s_11); \ v_##op = vec_##op(s_11h, s_11l); \ } while (0)
Referenced by dering_altivec().
#define F2 | ( | i, | |||
j, | |||||
k, | |||||
l | ) |
Value:
if (S[i] & (1 << (l+1))) { \ const vector unsigned char a_A = vec_perm(src##i, src##j, permA1M); \ const vector unsigned char a_B = vec_perm(a_A, src##k, permA2M); \ const vector signed int a_sump = \ (vector signed int)vec_msum(a_B, magic, (vector unsigned int)zero);\ vector signed int F = vec_sr(vec_sums(a_sump, vsint32_8), vuint32_4); \ const vector signed int p = \ (vector signed int)vec_perm(src##j, (vector unsigned char)zero, \ extractPermM); \ const vector signed int sum = vec_add(p, vQP2); \ const vector signed int diff = vec_sub(p, vQP2); \ vector signed int newpm; \ vector unsigned char newpm2, mask; \ F = vec_splat(F, 3); \ if (vec_all_lt(sum, F)) \ newpm = sum; \ else if (vec_all_gt(diff, F)) \ newpm = diff; \ else newpm = F; \ newpm2 = vec_splat((vector unsigned char)newpm, 15); \ mask = vec_add(identity, tenRightM); \ src##j = vec_perm(src##j, newpm2, mask); \ } \ permA1M = vec_add(permA1M, permA1inc); \ permA2M = vec_add(permA2M, permA2inc); \ tenRightM = vec_sro(tenRightM, eightLeft); \ extractPermM = vec_add(extractPermM, extractPermInc)
#define F_INIT | ( | ) |
Value:
vector unsigned char tenRightM = tenRight; \ vector unsigned char permA1M = permA1; \ vector unsigned char permA2M = permA2; \ vector unsigned char extractPermM = extractPerm
#define ITER | ( | i, | |||
j, | |||||
k | ) |
#define ITER | ( | i, | |||
j | ) |
Value:
const vector signed short v_diff##i = \ vec_sub(v_srcAss##i, v_srcAss##j); \ const vector signed short v_sum##i = \ vec_add(v_diff##i, v_dcOffset); \ const vector signed short v_comp##i = \ (vector signed short)vec_cmplt((vector unsigned short)v_sum##i, \ v_dcThreshold); \ const vector signed short v_part##i = vec_and(mask, v_comp##i);
Referenced by dering_altivec(), and vertClassify_altivec().
#define LOAD_DOUBLE_LINE | ( | i, | |||
j | ) |
Value:
vector unsigned char src##i = vec_ld(i * 16, src); \ vector unsigned char src##j = vec_ld(j * 16, src)
#define LOAD_DOUBLE_LINE | ( | i, | |||
j | ) |
Value:
vector unsigned char perm1##i = vec_lvsl(i * stride, src); \ vector unsigned char perm2##i = vec_lvsl(j * stride, src); \ vector unsigned char srcA##i = vec_ld(i * stride, src); \ vector unsigned char srcB##i = vec_ld(i * stride + 16, src); \ vector unsigned char srcC##i = vec_ld(j * stride, src); \ vector unsigned char srcD##i = vec_ld(j * stride+ 16, src); \ vector unsigned char src##i = vec_perm(srcA##i, srcB##i, perm1##i); \ vector unsigned char src##j = vec_perm(srcC##i, srcD##i, perm2##i)
Referenced by transpose_16x8_char_toPackedAlign_altivec(), and transpose_8x16_char_fromPackedAlign_altivec().
#define LOAD_LINE | ( | src, | |||
i | ) |
Value:
register int j##src##i = i * stride; \ vector unsigned char perm##src##i = vec_lvsl(j##src##i, src); \ const vector unsigned char v_##src##A1##i = vec_ld(j##src##i, src); \ const vector unsigned char v_##src##A2##i = vec_ld(j##src##i + 16, src); \ const vector unsigned char v_##src##A##i = \ vec_perm(v_##src##A1##i, v_##src##A2##i, perm##src##i); \ vector signed short v_##src##Ass##i = \ (vector signed short)vec_mergeh((vector signed char)zero, \ (vector signed char)v_##src##A##i)
#define LOAD_LINE | ( | i | ) |
Value:
const vector unsigned char perm##i = \ vec_lvsl(i * stride, srcCopy); \ vector unsigned char sA##i = vec_ld(i * stride, srcCopy); \ vector unsigned char sB##i = vec_ld(i * stride + 16, srcCopy); \ vector unsigned char src##i = vec_perm(sA##i, sB##i, perm##i)
#define LOAD_LINE | ( | i | ) |
Value:
const vector unsigned char perm##i = \ vec_lvsl(i * stride, src2); \ const vector unsigned char vbA##i = \ vec_ld(i * stride, src2); \ const vector unsigned char vbB##i = \ vec_ld(i * stride + 16, src2); \ const vector unsigned char vbT##i = \ vec_perm(vbA##i, vbB##i, perm##i); \ const vector signed short vb##i = \ (vector signed short)vec_mergeh((vector unsigned char)zero, \ (vector unsigned char)vbT##i)
#define LOAD_LINE | ( | i | ) |
Value:
perml##i = vec_lvsl(i * stride, src2); \ vbA##i = vec_ld(i * stride, src2); \ vbB##i = vec_ld(i * stride + 16, src2); \ vbT##i = vec_perm(vbA##i, vbB##i, perml##i); \ vb##i = \ (vector signed short)vec_mergeh((vector unsigned char)zero, \ (vector unsigned char)vbT##i)
#define LOAD_LINE | ( | i | ) |
Value:
{ \ vector unsigned char perm##i = vec_lvsl(j##i, src2); \ vector unsigned char v_srcA2##i; \ vector unsigned char v_srcA1##i = vec_ld(j##i, src2); \ if (two_vectors) \ v_srcA2##i = vec_ld(j##i + 16, src2); \ v_srcA##i = \ vec_perm(v_srcA1##i, v_srcA2##i, perm##i); \ v_srcAss##i = \ (vector signed short)vec_mergeh((vector signed char)zero, \ (vector signed char)v_srcA##i); }
Referenced by dering_altivec(), doVertDefFilter_altivec(), doVertLowPass_altivec(), tempNoiseReducer_TMPL(), and vertClassify_altivec().
#define LOAD_LINE_ALIGNED | ( | i | ) |
Value:
vbT##i = vec_ld(j##i, src2); \ vb##i = \ (vector signed short)vec_mergeh((vector signed char)zero, \ (vector signed char)vbT##i)
#define LOAD_LINE_ALIGNED | ( | i | ) |
Value:
v_srcA##i = vec_ld(j##i, src2); \ v_srcAss##i = \ (vector signed short)vec_mergeh((vector signed char)zero, \ (vector signed char)v_srcA##i)
Referenced by doVertLowPass_altivec(), and vertClassify_altivec().
#define OP | ( | i | ) |
Value:
do { \ const vector signed short v_temp = \ vec_mladd(v_tempBlurredAss##i, vsint16_3, v_srcAss##i); \ const vector signed short v_temp2 = vec_add(v_temp, vsint16_2); \ v_tempBlurredAss##i = \ vec_sr(v_temp2, (vector unsigned short)vsint16_2); \ } while (0)
#define OP | ( | i | ) |
Value:
do { \ const vector signed short v_temp = \ vec_mladd(v_tempBlurredAss##i, vsint16_7, v_srcAss##i); \ const vector signed short v_temp2 = vec_add(v_temp, vsint16_4); \ v_tempBlurredAss##i = vec_sr(v_temp2, vuint16_3); \ } while (0)
#define OP | ( | i | ) | v_tempBlurredAss##i = v_srcAss##i; |
#define OP | ( | i | ) | v_tempBlurredAss##i = vec_avg(v_tempBlurredAss##i, v_srcAss##i); |
#define PACK_AND_STORE | ( | src, | |||
i | ) |
Value:
do { \ const vector unsigned char perms = vec_lvsr(i * stride, src); \ const vector unsigned char vf = \ vec_packsu(v_tempBlurredAss##1, (vector signed short)zero); \ const vector unsigned char vg = vec_perm(vf, v_##src##A##i, permHH); \ const vector unsigned char mask = \ vec_perm((vector unsigned char)zero, (vector unsigned char)neg1, perms); \ const vector unsigned char vg2 = vec_perm(vg, vg, perms); \ const vector unsigned char svA = vec_sel(v_##src##A1##i, vg2, mask); \ const vector unsigned char svB = vec_sel(vg2, v_##src##A2##i, mask); \ vec_st(svA, i * stride, src); \ vec_st(svB, i * stride + 16, src); \ } while (0)
#define PACK_AND_STORE | ( | i | ) |
Value:
{ const vector unsigned char perms##i = \ vec_lvsr(i * stride, src2); \ const vector unsigned char vf##i = \ vec_packsu(vr##i, (vector signed short)zero); \ const vector unsigned char vg##i = \ vec_perm(vf##i, vbT##i, permHH); \ const vector unsigned char mask##i = \ vec_perm((vector unsigned char)zero, (vector unsigned char)neg1, perms##i); \ const vector unsigned char vg2##i = \ vec_perm(vg##i, vg##i, perms##i); \ const vector unsigned char svA##i = \ vec_sel(vbA##i, vg2##i, mask##i); \ const vector unsigned char svB##i = \ vec_sel(vg2##i, vbB##i, mask##i); \ vec_st(svA##i, i * stride, src2); \ vec_st(svB##i, i * stride + 16, src2);}
Referenced by doVertLowPass_altivec(), and tempNoiseReducer_TMPL().
#define PACK_AND_STORE_ALIGNED | ( | i | ) |
Value:
{ const vector unsigned char vf##i = \ vec_packsu(vr##i, (vector signed short)zero); \ const vector unsigned char vg##i = \ vec_perm(vf##i, vbT##i, permHH); \ vec_st(vg##i, i * stride, src2);}
Referenced by doVertLowPass_altivec().
#define STORE | ( | i | ) |
Value:
{ const vector unsigned char perms##i = \ vec_lvsr(i * stride, src2); \ const vector unsigned char vg##i = \ vec_perm(st##i, vbT##i, permHH); \ const vector unsigned char mask##i = \ vec_perm((vector unsigned char)zero, (vector unsigned char)neg1, perms##i); \ const vector unsigned char vg2##i = \ vec_perm(vg##i, vg##i, perms##i); \ const vector unsigned char svA##i = \ vec_sel(vbA##i, vg2##i, mask##i); \ const vector unsigned char svB##i = \ vec_sel(vg2##i, vbB##i, mask##i); \ vec_st(svA##i, i * stride, src2); \ vec_st(svB##i, i * stride + 16, src2);}
#define STORE_DOUBLE_LINE | ( | i, | |||
j | ) |
Value:
do { \ vector unsigned char dstAi = vec_ld(i * stride, dst); \ vector unsigned char dstBi = vec_ld(i * stride + 16, dst); \ vector unsigned char dstAj = vec_ld(j * stride, dst); \ vector unsigned char dstBj = vec_ld(j * stride+ 16, dst); \ vector unsigned char aligni = vec_lvsr(i * stride, dst); \ vector unsigned char alignj = vec_lvsr(j * stride, dst); \ vector unsigned char maski = \ vec_perm(zero, (vector unsigned char)neg1, aligni); \ vector unsigned char maskj = \ vec_perm(zero, (vector unsigned char)neg1, alignj); \ vector unsigned char dstRi = vec_perm(temp##i, temp##i, aligni); \ vector unsigned char dstRj = vec_perm(temp##j, temp##j, alignj); \ vector unsigned char dstAFi = vec_sel(dstAi, dstRi, maski); \ vector unsigned char dstBFi = vec_sel(dstRi, dstBi, maski); \ vector unsigned char dstAFj = vec_sel(dstAj, dstRj, maskj); \ vector unsigned char dstBFj = vec_sel(dstRj, dstBj, maskj); \ vec_st(dstAFi, i * stride, dst); \ vec_st(dstBFi, i * stride + 16, dst); \ vec_st(dstAFj, j * stride, dst); \ vec_st(dstBFj, j * stride + 16, dst); \ } while (0)
Referenced by transpose_8x16_char_fromPackedAlign_altivec().
#define STORE_LINE | ( | i | ) |
Value:
do { \ const vector unsigned char permST = \ vec_lvsr(i * stride, srcCopy); \ const vector unsigned char maskST = \ vec_perm((vector unsigned char)zero, \ (vector unsigned char)neg1, permST); \ src##i = vec_perm(src##i ,src##i, permST); \ sA##i= vec_sel(sA##i, src##i, maskST); \ sB##i= vec_sel(src##i, sB##i, maskST); \ vec_st(sA##i, i * stride, srcCopy); \ vec_st(sB##i, i * stride + 16, srcCopy); \ } while (0)
Referenced by dering_altivec().
Definition at line 532 of file postprocess_altivec_template.c.
static void tempNoiseReducer_TMPL | ( | uint8_t * | src, | |
int | stride, | |||
uint8_t * | tempBlurred, | |||
uint32_t * | tempBlurredPast, | |||
int * | maxNoise | |||
) | [inline, static] |
Definition at line 828 of file postprocess_altivec_template.c.
static void transpose_16x8_char_toPackedAlign_altivec | ( | unsigned char * | dst, | |
unsigned char * | src, | |||
int | stride | |||
) | [inline, static] |
static void transpose_8x16_char_fromPackedAlign_altivec | ( | unsigned char * | dst, | |
unsigned char * | src, | |||
int | stride | |||
) | [inline, static] |