1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (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 GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 /**
20  * @file
21  * Scene SAD functions
22  */
23 
24 #include "scene_sad.h"
25 
ff_scene_sad16_c(SCENE_SAD_PARAMS)26 void ff_scene_sad16_c(SCENE_SAD_PARAMS)
27 {
28     uint64_t sad = 0;
29     const uint16_t *src1w = (const uint16_t *)src1;
30     const uint16_t *src2w = (const uint16_t *)src2;
31     int x, y;
32 
33     stride1 /= 2;
34     stride2 /= 2;
35 
36     for (y = 0; y < height; y++) {
37         for (x = 0; x < width; x++)
38             sad += FFABS(src1w[x] - src2w[x]);
39         src1w += stride1;
40         src2w += stride2;
41     }
42     *sum = sad;
43 }
44 
ff_scene_sad_c(SCENE_SAD_PARAMS)45 void ff_scene_sad_c(SCENE_SAD_PARAMS)
46 {
47     uint64_t sad = 0;
48     int x, y;
49 
50     for (y = 0; y < height; y++) {
51         for (x = 0; x < width; x++)
52             sad += FFABS(src1[x] - src2[x]);
53         src1 += stride1;
54         src2 += stride2;
55     }
56     *sum = sad;
57 }
58 
ff_scene_sad_get_fn(int depth)59 ff_scene_sad_fn ff_scene_sad_get_fn(int depth)
60 {
61     ff_scene_sad_fn sad = NULL;
62     if (ARCH_X86)
63         sad = ff_scene_sad_get_fn_x86(depth);
64     if (!sad) {
65         if (depth == 8)
66             sad = ff_scene_sad_c;
67         if (depth == 16)
68             sad = ff_scene_sad16_c;
69     }
70     return sad;
71 }
72 
73