32 #define randomize_buffers(buf, size) \
35 for (j = 0; j < size; j+=4) \
36 AV_WN32(buf + j, rnd()); \
46 d = ((filterSize - 1) * 8 +
dither[0]) >> 4;
47 for (
i = 0;
i < dstW;
i++) {
54 for (j = 0; j < filterSize; j++){
65 int fsi, osi, isi,
i, j;
67 #define LARGEST_FILTER 16
68 #define FILTER_SIZES 4
69 static const int filter_sizes[
FILTER_SIZES] = {1, 4, 8, 16};
70 #define LARGEST_INPUT_SIZE 512
72 static const int input_sizes[
INPUT_SIZES] = {8, 24, 128, 144, 256, 512};
75 int filterSize,
const int16_t **
src,
uint8_t *dest,
98 dstW = input_sizes[isi];
99 for(osi = 0; osi < 64; osi += 16){
102 vFilterData =
av_malloc((filter_sizes[fsi] + 2) *
sizeof(
union VFilterData));
103 memset(vFilterData, 0, (filter_sizes[fsi] + 2) *
sizeof(
union VFilterData));
104 for(
i = 0;
i < filter_sizes[fsi]; ++
i){
106 vFilterData[
i].src =
src[
i];
107 for(j = 0; j < 4; ++j)
108 vFilterData[
i].
coeff[j + 4] = filter_coeff[
i];
110 if (
check_func(
ctx->yuv2planeX,
"yuv2yuvX_%d_%d_%d", filter_sizes[fsi], osi, dstW)){
120 if(
ctx->use_mmx_vfilter){
121 call_new((
const int16_t*)vFilterData, filter_sizes[fsi],
src, dst1, dstW - osi,
dither, osi);
125 bench_new((
const int16_t*)vFilterData, filter_sizes[fsi],
src, dst1, dstW - osi,
dither, osi);
138 #define SRC_PIXELS 128
142 #define MAX_FILTER_WIDTH 40
143 #define FILTER_SIZES 5
144 static const int filter_sizes[
FILTER_SIZES] = { 4, 8, 16, 32, 40 };
146 #define HSCALE_PAIRS 2
152 int i, j, fsi, hpi,
width;
168 const int32_t *filterPos,
int filterSize);
178 width = filter_sizes[fsi];
180 ctx->srcBpc = hscale_pairs[hpi][0];
181 ctx->dstBpc = hscale_pairs[hpi][1];
200 for (j = 0; j <
width; j++) {
216 memset(dst0, 0,
SRC_PIXELS *
sizeof(dst0[0]));
217 memset(dst1, 0,
SRC_PIXELS *
sizeof(dst1[0]));
221 if (memcmp(dst0, dst1,
SRC_PIXELS *
sizeof(dst0[0])))
static double val(void *priv, double ch)
static av_always_inline void filter(int16_t *output, ptrdiff_t out_stride, const int16_t *low, ptrdiff_t low_stride, const int16_t *high, ptrdiff_t high_stride, int len, int clip)
#define declare_func_emms(cpu_flags, ret,...)
#define check_func(func,...)
common internal and external API header
#define AV_CPU_FLAG_MMX
standard MMX
av_warn_unused_result int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter)
Initialize the swscaler context sws_context.
struct SwsContext * sws_alloc_context(void)
Allocate an empty SwsContext.
void sws_freeContext(struct SwsContext *swsContext)
Free the swscaler context swsContext.
Memory handling functions.
#define LOCAL_ALIGNED_32(t, v,...)
#define LOCAL_ALIGNED_8(t, v,...)
int dstW
Width of destination luma/alpha planes.
static void check_yuv2yuvX(void)
static void ref_function(const int16_t *filter, int filterSize, const int16_t **src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
static void check_hscale(void)
#define randomize_buffers(buf, size)
void checkasm_check_sw_scale(void)
#define LARGEST_INPUT_SIZE
SwsFunc ff_getSwsFunc(SwsContext *c)
Return function pointer to fastest main scaler path function depending on architecture and available ...
static const uint8_t dither[8][8]
static const double coeff[2][5]
static const uint8_t offset[127][2]