FFmpeg
Loading...
Searching...
No Matches
me_cmp.c File Reference
#include <stddef.h>
#include "libavutil/attributes.h"
#include "libavutil/internal.h"
#include "libavutil/mem_internal.h"
#include "avcodec.h"
#include "copy_block.h"
#include "mathops.h"
#include "simple_idct.h"
#include "me_cmp.h"
#include "mpegvideoenc.h"
#include "config.h"
#include "config_components.h"

Go to the source code of this file.

Macros

#define avg2(a, b)
 
#define avg4(a, b, c, d)
 
#define V(x)
 
#define V(x)
 
#define ENTRY(CMP_FLAG, ARRAY, MPVENC_ONLY)
 
#define BUTTERFLY2(o1, o2, i1, i2)
 
#define BUTTERFLY1(x, y)
 
#define BUTTERFLYA(x, y)
 
#define VSAD_INTRA(size)
 
#define VSAD(size)
 
#define SQ(a)
 
#define VSSE_INTRA(size)
 
#define VSSE(size)
 
#define WRAPPER8_16_SQ(name8, name16)
 
#define SET_CMP_FUNC(name)
 

Functions

static int sse4_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int sse8_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int sse16_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int sum_abs_dctelem_c (const int16_t *block)
 
static int pix_abs16_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int pix_median_abs16_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int pix_abs16_x2_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int pix_abs16_y2_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int pix_abs16_xy2_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int pix_abs8_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int pix_median_abs8_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int pix_abs8_x2_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int pix_abs8_y2_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int pix_abs8_xy2_c (MPVEncContext *unused, const uint8_t *pix1, const uint8_t *pix2, ptrdiff_t stride, int h)
 
static int nsse16_c (MPVEncContext *const c, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride, int h)
 
static int nsse8_c (MPVEncContext *const c, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride, int h)
 
static int zero_cmp (MPVEncContext *s, const uint8_t *a, const uint8_t *b, ptrdiff_t stride, int h)
 
av_cold int ff_set_cmp (const MECmpContext *c, me_cmp_func *cmp, int type, int mpvenc)
 Fill the function pointer array cmp[6] with me_cmp_funcs from c based upon type.
 
static int hadamard8_diff8x8_c (MPVEncContext *unused, const uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h)
 
static int hadamard8_intra8x8_c (MPVEncContext *unused, const uint8_t *src, const uint8_t *dummy, ptrdiff_t stride, int h)
 
static int dct_sad8x8_c (MPVEncContext *const s, const uint8_t *src1, const uint8_t *src2, ptrdiff_t stride, int h)
 
static int dct_max8x8_c (MPVEncContext *const s, const uint8_t *src1, const uint8_t *src2, ptrdiff_t stride, int h)
 
static int quant_psnr8x8_c (MPVEncContext *const s, const uint8_t *src1, const uint8_t *src2, ptrdiff_t stride, int h)
 
static int rd8x8_c (MPVEncContext *const s, const uint8_t *src1, const uint8_t *src2, ptrdiff_t stride, int h)
 
static int bit8x8_c (MPVEncContext *const s, const uint8_t *src1, const uint8_t *src2, ptrdiff_t stride, int h)
 
av_cold void ff_me_cmp_init (MECmpContext *c, AVCodecContext *avctx)
 

Macro Definition Documentation

◆ avg2

#define avg2 ( a,
b )
Value:
(((a) + (b) + 1) >> 1)
int a
#define b
Definition input.c:43

Definition at line 114 of file me_cmp.c.

Referenced by pix_abs16_x2_c(), pix_abs16_y2_c(), pix_abs8_x2_c(), and pix_abs8_y2_c().

◆ avg4

#define avg4 ( a,
b,
c,
d )
Value:
(((a) + (b) + (c) + (d) + 2) >> 2)
static double c[64]

Definition at line 115 of file me_cmp.c.

Referenced by pix_abs16_xy2_c(), and pix_abs8_xy2_c().

◆ V [1/2]

#define V ( x)
Value:
(pix1[x] - pix2[x])

Referenced by pix_median_abs16_c(), and pix_median_abs8_c().

◆ V [2/2]

#define V ( x)
Value:
(pix1[x] - pix2[x])

◆ ENTRY

#define ENTRY ( CMP_FLAG,
ARRAY,
MPVENC_ONLY )
Value:
[FF_CMP_ ## CMP_FLAG] = { \
.offset = offsetof(MECmpContext, ARRAY), \
.mpv_only = MPVENC_ONLY, \
.available = 1, \
}

Referenced by ff_set_cmp().

◆ BUTTERFLY2

#define BUTTERFLY2 ( o1,
o2,
i1,
i2 )
Value:
o1 = (i1) + (i2); \
o2 = (i1) - (i2);

Definition at line 499 of file me_cmp.c.

Referenced by hadamard8_diff8x8_c(), and hadamard8_intra8x8_c().

◆ BUTTERFLY1

#define BUTTERFLY1 ( x,
y )
Value:
{ \
int a, b; \
a = x; \
b = y; \
x = a + b; \
y = a - b; \
}

Definition at line 503 of file me_cmp.c.

Referenced by hadamard8_diff8x8_c(), and hadamard8_intra8x8_c().

◆ BUTTERFLYA

#define BUTTERFLYA ( x,
y )
Value:
(FFABS((x) + (y)) + FFABS((x) - (y)))
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
Definition common.h:74

Definition at line 512 of file me_cmp.c.

Referenced by hadamard8_diff8x8_c(), and hadamard8_intra8x8_c().

◆ VSAD_INTRA

#define VSAD_INTRA ( size)
Value:
static int vsad_intra ## size ## _c(MPVEncContext *unused, \
const uint8_t *s, const uint8_t *dummy, \
ptrdiff_t stride, int h) \
{ \
int score = 0, x, y; \
\
for (y = 1; y < h; y++) { \
for (x = 0; x < size; x += 4) { \
score += FFABS(s[x] - s[x + stride]) + \
FFABS(s[x + 1] - s[x + stride + 1]) + \
FFABS(s[x + 2] - s[x + 2 + stride]) + \
FFABS(s[x + 3] - s[x + 3 + stride]); \
} \
s += stride; \
} \
\
return score; \
}
#define s(width, name)
Definition cbs_vp9.c:198
static int dummy
Definition ffplay.c:3754
#define stride
int size

Definition at line 851 of file me_cmp.c.

◆ VSAD

#define VSAD ( size)
Value:
static int vsad ## size ## _c(MPVEncContext *unused, \
const uint8_t *s1, const uint8_t *s2, \
ptrdiff_t stride, int h) \
{ \
int score = 0, x, y; \
\
for (y = 1; y < h; y++) { \
for (x = 0; x < size; x++) \
score += FFABS(s1[x] - s2[x] - s1[x + stride] + s2[x + stride]); \
s1 += stride; \
s2 += stride; \
} \
\
return score; \
}

Definition at line 873 of file me_cmp.c.

Referenced by ff_set_cmp().

◆ SQ

#define SQ ( a)
Value:
((a) * (a))

Definition at line 892 of file me_cmp.c.

◆ VSSE_INTRA

#define VSSE_INTRA ( size)
Value:
static int vsse_intra ## size ## _c(MPVEncContext *unused, \
const uint8_t *s, const uint8_t *dummy, \
ptrdiff_t stride, int h) \
{ \
int score = 0, x, y; \
\
for (y = 1; y < h; y++) { \
for (x = 0; x < size; x += 4) { \
score += SQ(s[x] - s[x + stride]) + \
SQ(s[x + 1] - s[x + stride + 1]) + \
SQ(s[x + 2] - s[x + stride + 2]) + \
SQ(s[x + 3] - s[x + stride + 3]); \
} \
s += stride; \
} \
\
return score; \
}
#define SQ(a)
Definition me_cmp.c:892

Definition at line 893 of file me_cmp.c.

◆ VSSE

#define VSSE ( size)
Value:
static int vsse ## size ## _c(MPVEncContext *unused, const uint8_t *s1, \
const uint8_t *s2, ptrdiff_t stride, int h) \
{ \
int score = 0, x, y; \
\
for (y = 1; y < h; y++) { \
for (x = 0; x < size; x++) \
score += SQ(s1[x] - s2[x] - s1[x + stride] + s2[x + stride]); \
s1 += stride; \
s2 += stride; \
} \
\
return score; \
}

Definition at line 915 of file me_cmp.c.

Referenced by ff_set_cmp().

◆ WRAPPER8_16_SQ

#define WRAPPER8_16_SQ ( name8,
name16 )
Value:
static int name16(MPVEncContext *const s, const uint8_t *dst, \
const uint8_t *src, ptrdiff_t stride, int h) \
{ \
int score = 0; \
\
score += name8(s, dst, src, stride, 8); \
score += name8(s, dst + 8, src + 8, stride, 8); \
if (h == 16) { \
dst += 8 * stride; \
src += 8 * stride; \
score += name8(s, dst, src, stride, 8); \
score += name8(s, dst + 8, src + 8, stride, 8); \
} \
return score; \
}
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
#define src
Definition vp8dsp.c:248

Definition at line 933 of file me_cmp.c.

◆ SET_CMP_FUNC

#define SET_CMP_FUNC ( name)
Value:
c->name[0] = name ## 16_c; \
c->name[1] = name ## 8x8_c;
const char * name
Definition qsvenc.c:142

Referenced by ff_me_cmp_init().

Function Documentation

◆ sse4_c()

static int sse4_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
static

Definition at line 37 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ sse8_c()

static int sse8_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
static

Definition at line 54 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ sse16_c()

static int sse16_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
static

Definition at line 75 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ sum_abs_dctelem_c()

static int sum_abs_dctelem_c ( const int16_t * block)
static

Definition at line 105 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ pix_abs16_c()

static int pix_abs16_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
inlinestatic

Definition at line 117 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ pix_median_abs16_c()

static int pix_median_abs16_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
inlinestatic

Definition at line 145 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ pix_abs16_x2_c()

static int pix_abs16_x2_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
static

Definition at line 184 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ pix_abs16_y2_c()

static int pix_abs16_y2_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
static

Definition at line 212 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ pix_abs16_xy2_c()

static int pix_abs16_xy2_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
static

Definition at line 242 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ pix_abs8_c()

static int pix_abs8_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
inlinestatic

Definition at line 272 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ pix_median_abs8_c()

static int pix_median_abs8_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
inlinestatic

Definition at line 292 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ pix_abs8_x2_c()

static int pix_abs8_x2_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
static

Definition at line 323 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ pix_abs8_y2_c()

static int pix_abs8_y2_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
static

Definition at line 343 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ pix_abs8_xy2_c()

static int pix_abs8_xy2_c ( MPVEncContext * unused,
const uint8_t * pix1,
const uint8_t * pix2,
ptrdiff_t stride,
int h )
static

Definition at line 365 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ nsse16_c()

static int nsse16_c ( MPVEncContext *const c,
const uint8_t * s1,
const uint8_t * s2,
ptrdiff_t stride,
int h )
static

Definition at line 387 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ nsse8_c()

static int nsse8_c ( MPVEncContext *const c,
const uint8_t * s1,
const uint8_t * s2,
ptrdiff_t stride,
int h )
static

Definition at line 412 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ zero_cmp()

static int zero_cmp ( MPVEncContext * s,
const uint8_t * a,
const uint8_t * b,
ptrdiff_t stride,
int h )
static

Definition at line 437 of file me_cmp.c.

Referenced by ff_me_init(), and ff_set_cmp().

◆ ff_set_cmp()

av_cold int ff_set_cmp ( const MECmpContext * c,
me_cmp_func * cmp,
int type,
int mpvenc )

Fill the function pointer array cmp[6] with me_cmp_funcs from c based upon type.

If mpvenc is not set, an error is returned if the type of comparison functions requires an initialized MPVEncContext.

Definition at line 443 of file me_cmp.c.

Referenced by dvvideo_encode_init(), ff_me_init(), and me_cmp_init().

◆ hadamard8_diff8x8_c()

static int hadamard8_diff8x8_c ( MPVEncContext * unused,
const uint8_t * dst,
const uint8_t * src,
ptrdiff_t stride,
int h )
static

Definition at line 514 of file me_cmp.c.

◆ hadamard8_intra8x8_c()

static int hadamard8_intra8x8_c ( MPVEncContext * unused,
const uint8_t * src,
const uint8_t * dummy,
ptrdiff_t stride,
int h )
static

Definition at line 564 of file me_cmp.c.

Referenced by ff_me_cmp_init().

◆ dct_sad8x8_c()

static int dct_sad8x8_c ( MPVEncContext *const s,
const uint8_t * src1,
const uint8_t * src2,
ptrdiff_t stride,
int h )
static

Definition at line 614 of file me_cmp.c.

◆ dct_max8x8_c()

static int dct_max8x8_c ( MPVEncContext *const s,
const uint8_t * src1,
const uint8_t * src2,
ptrdiff_t stride,
int h )
static

Definition at line 678 of file me_cmp.c.

◆ quant_psnr8x8_c()

static int quant_psnr8x8_c ( MPVEncContext *const s,
const uint8_t * src1,
const uint8_t * src2,
ptrdiff_t stride,
int h )
static

Definition at line 693 of file me_cmp.c.

◆ rd8x8_c()

static int rd8x8_c ( MPVEncContext *const s,
const uint8_t * src1,
const uint8_t * src2,
ptrdiff_t stride,
int h )
static

Definition at line 717 of file me_cmp.c.

◆ bit8x8_c()

static int bit8x8_c ( MPVEncContext *const s,
const uint8_t * src1,
const uint8_t * src2,
ptrdiff_t stride,
int h )
static

Definition at line 792 of file me_cmp.c.

◆ ff_me_cmp_init()