Go to the documentation of this file.
74 #define hadamard_func(cpu) \
75 int ff_hadamard8_diff_ ## cpu(MPVEncContext *s, const uint8_t *src1, \
76 const uint8_t *src2, ptrdiff_t stride, int h); \
77 int ff_hadamard8_diff16_ ## cpu(MPVEncContext *s, const uint8_t *src1, \
78 const uint8_t *src2, ptrdiff_t stride, int h);
83 static int nsse16_ssse3(
MPVEncContext *
c,
const uint8_t *pix1,
const uint8_t *pix2,
91 return score1 +
FFABS(score2) *
c->c.avctx->nsse_weight;
93 return score1 +
FFABS(score2) * 8;
104 return score1 +
FFABS(score2) *
c->c.avctx->nsse_weight;
106 return score1 +
FFABS(score2) * 8;
139 c->hadamard8_diff[0] = ff_hadamard8_diff16_sse2;
140 c->hadamard8_diff[1] = ff_hadamard8_diff_sse2;
166 c->nsse[0] = nsse16_ssse3;
170 c->hadamard8_diff[0] = ff_hadamard8_diff16_ssse3;
171 c->hadamard8_diff[1] = ff_hadamard8_diff_ssse3;
int ff_sad16_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_vsad_intra16_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
static int nsse8_ssse3(MPVEncContext *c, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_vsad_intra8_mmxext(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_sad8_x2_mmxext(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
static atomic_int cpu_flags
int ff_vsad16_approx_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_hf_noise16_ssse3(const uint8_t *pix1, ptrdiff_t stride, int h)
int ff_vsad8_approx_mmxext(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_sum_abs_dctelem_ssse3(const int16_t *block)
int flags
AV_CODEC_FLAG_*.
int ff_hf_noise8_ssse3(const uint8_t *pix1, ptrdiff_t stride, int h)
int ff_sad16_xy2_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_sad8_y2_mmxext(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
av_cold void ff_me_cmp_init_x86(MECmpContext *c, AVCodecContext *avctx)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
int ff_sad8_mmxext(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_sad16u_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_sse16_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_sad16_x2_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_sad16_approx_xy2_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
int ff_sad8_xy2_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_vsad_intra16u_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_vsad16u_approx_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
#define EXTERNAL_SSE2(flags)
#define hadamard_func(cpu)
main external API structure.
int ff_sad16_y2_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_sad8_approx_xy2_mmxext(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
int ff_sse8_sse2(MPVEncContext *v, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
int ff_sum_abs_dctelem_sse2(const int16_t *block)
The exact code depends on how similar the blocks are and how related they are to the block
#define EXTERNAL_SSSE3(flags)
#define EXTERNAL_MMXEXT(flags)