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 #include "libavutil/mem_internal.h"
24 
25 #define WIDTH 256
26 #define WIDTH_PADDED 256 + 32
27 
28 #define randomize_buffers(buf, size) \
29  do { \
30  int j; \
31  uint8_t *tmp_buf = (uint8_t *)buf;\
32  for (j = 0; j < size; j++) \
33  tmp_buf[j] = rnd() & 0xFF; \
34  } while (0)
35 
36 static void check_hflip(int step, const char * report_name){
37  LOCAL_ALIGNED_32(uint8_t, src, [WIDTH_PADDED]);
38  LOCAL_ALIGNED_32(uint8_t, dst_ref, [WIDTH_PADDED]);
39  LOCAL_ALIGNED_32(uint8_t, dst_new, [WIDTH_PADDED]);
40  int w = WIDTH;
41  int i;
42  int step_array[4] = {1, 1, 1, 1};
43  FlipContext s;
44 
45  declare_func(void, const uint8_t *src, uint8_t *dst, int w);
46 
47  s.bayer_plus1 = 1;
48  memset(src, 0, WIDTH_PADDED);
49  memset(dst_ref, 0, WIDTH_PADDED);
50  memset(dst_new, 0, WIDTH_PADDED);
52 
53  if (step == 2) {
54  w /= 2;
55  for (i = 0; i < 4; i++)
56  step_array[i] = step;
57  }
58 
59  ff_hflip_init(&s, step_array, 4);
60 
61  if (check_func(s.flip_line[0], "hflip_%s", report_name)) {
62  for (i = 1; i < w; i++) {
63  call_ref(src + (w - 1) * step, dst_ref, i);
64  call_new(src + (w - 1) * step, dst_new, i);
65  if (memcmp(dst_ref, dst_new, i * step))
66  fail();
67  }
68  bench_new(src + (w - 1) * step, dst_new, w);
69  }
70 }
72 {
73  check_hflip(1, "byte");
74  report("hflip_byte");
75 
76  check_hflip(2, "short");
77  report("hflip_short");
78 }
mem_internal.h
step
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
Definition: rate_distortion.txt:58
w
uint8_t w
Definition: llviddspenc.c:38
check_func
#define check_func(func,...)
Definition: checkasm.h:118
call_ref
#define call_ref(...)
Definition: checkasm.h:133
fail
#define fail()
Definition: checkasm.h:127
checkasm.h
intreadwrite.h
s
#define s(width, name)
Definition: cbs_vp9.c:257
call_new
#define call_new(...)
Definition: checkasm.h:205
LOCAL_ALIGNED_32
#define LOCAL_ALIGNED_32(t, v,...)
Definition: mem_internal.h:136
src
#define src
Definition: vp8dsp.c:255
check_hflip
static void check_hflip(int step, const char *report_name)
Definition: vf_hflip.c:36
hflip.h
WIDTH_PADDED
#define WIDTH_PADDED
Definition: vf_hflip.c:26
ff_hflip_init
int ff_hflip_init(FlipContext *s, int step[4], int nb_planes)
Definition: vf_hflip.c:148
checkasm_check_vf_hflip
void checkasm_check_vf_hflip(void)
Definition: vf_hflip.c:71
WIDTH
#define WIDTH
Definition: vf_hflip.c:25
report
#define report
Definition: checkasm.h:130
bench_new
#define bench_new(...)
Definition: checkasm.h:268
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:271
FlipContext
Definition: hflip.h:27
randomize_buffers
#define randomize_buffers(buf, size)
Definition: vf_hflip.c:28
declare_func
#define declare_func(ret,...)
Definition: checkasm.h:122