FFmpeg
vf_hflip.c
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18 
19 #include <string.h>
20 #include "checkasm.h"
21 #include "libavfilter/hflip.h"
22 #include "libavutil/intreadwrite.h"
23 
24 #define WIDTH 256
25 #define WIDTH_PADDED 256 + 32
26 
27 #define randomize_buffers(buf, size) \
28  do { \
29  int j; \
30  uint8_t *tmp_buf = (uint8_t *)buf;\
31  for (j = 0; j < size; j++) \
32  tmp_buf[j] = rnd() & 0xFF; \
33  } while (0)
34 
35 static void check_hflip(int step, const char * report_name){
39  int w = WIDTH;
40  int i;
41  int step_array[4] = {1, 1, 1, 1};
42  FlipContext s;
43 
44  declare_func(void, const uint8_t *src, uint8_t *dst, int w);
45 
46  memset(src, 0, WIDTH_PADDED);
47  memset(dst_ref, 0, WIDTH_PADDED);
48  memset(dst_new, 0, WIDTH_PADDED);
50 
51  if (step == 2) {
52  w /= 2;
53  for (i = 0; i < 4; i++)
54  step_array[i] = step;
55  }
56 
57  ff_hflip_init(&s, step_array, 4);
58 
59  if (check_func(s.flip_line[0], "hflip_%s", report_name)) {
60  for (i = 1; i < w; i++) {
61  call_ref(src + (w - 1) * step, dst_ref, i);
62  call_new(src + (w - 1) * step, dst_new, i);
63  if (memcmp(dst_ref, dst_new, i * step))
64  fail();
65  }
66  bench_new(src + (w - 1) * step, dst_new, w);
67  }
68 }
70 {
71  check_hflip(1, "byte");
72  report("hflip_byte");
73 
74  check_hflip(2, "short");
75  report("hflip_short");
76 }
#define randomize_buffers(buf, size)
Definition: vf_hflip.c:27
void checkasm_check_vf_hflip(void)
Definition: vf_hflip.c:69
#define WIDTH_PADDED
Definition: vf_hflip.c:25
#define src
Definition: vp8dsp.c:254
#define report
Definition: checkasm.h:125
uint8_t
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:259
#define declare_func(ret,...)
Definition: checkasm.h:117
#define fail()
Definition: checkasm.h:122
uint8_t w
Definition: llviddspenc.c:38
#define s(width, name)
Definition: cbs_vp9.c:257
#define call_ref(...)
Definition: checkasm.h:128
#define WIDTH
Definition: vf_hflip.c:24
int ff_hflip_init(FlipContext *s, int step[4], int nb_planes)
Definition: vf_hflip.c:147
#define check_func(func,...)
Definition: checkasm.h:113
void(* flip_line[4])(const uint8_t *src, uint8_t *dst, int w)
Definition: hflip.h:33
#define LOCAL_ALIGNED_32(t, v,...)
Definition: internal.h:137
static void check_hflip(int step, const char *report_name)
Definition: vf_hflip.c:35
#define bench_new(...)
Definition: checkasm.h:255
#define call_new(...)
Definition: checkasm.h:195
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step