Imported Debian version 1.0~trusty
[deb_vid.stab.git] / src / vidstabdefines.h
1 /*
2 * vidstabdefines.h
3 *
4 * Created on: Feb 23, 2011
5 * Author: georg
6 *
7 * This file is part of vid.stab video stabilization library
8 *
9 * vid.stab is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License,
11 * as published by the Free Software Foundation; either version 2, or
12 * (at your option) any later version.
13 *
14 * vid.stab is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with GNU Make; see the file COPYING. If not, write to
21 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
22 *
23 *
24 */
25
26 #ifndef VIDSTABDEFINES_H_
27 #define VIDSTABDEFINES_H_
28
29 #include <stddef.h>
30 #include <stdlib.h>
31
32 #ifdef __GNUC__
33 #define likely(x) __builtin_expect(!!(x), 1)
34 #define unlikely(x) __builtin_expect(!!(x), 0)
35 #else
36 #define likely(x) (x)
37 #define unlikely(x) (x)
38 #endif
39
40 #define VS_MAX(a, b) (((a) > (b)) ?(a) :(b))
41 #define VS_MIN(a, b) (((a) < (b)) ?(a) :(b))
42 /* clamp x between a and b */
43 #define VS_CLAMP(x, a, b) VS_MIN(VS_MAX((a), (x)), (b))
44
45 #define VS_DEBUG 2
46
47 /// pixel in single layer image
48 #define PIXEL(img, linesize, x, y, w, h, def) \
49 (((x) < 0 || (y) < 0 || (x) >= (w) || (y) >= (h)) ? (def) : img[(x) + (y) * (linesize)])
50 /// pixel in single layer image without rangecheck
51 #define PIX(img, linesize, x, y) (img[(x) + (y) * (linesize)])
52 /// pixel in N-channel image. channel in {0..N-1}
53 #define PIXELN(img, linesize, x, y, w, h, N, channel, def) \
54 (((x) < 0 || (y) < 0 || (x) >= (w) || (y) >= (h)) ? (def) : img[((x) + (y) * (linesize))*(N) + (channel)])
55 /// pixel in N-channel image without rangecheck. channel in {0..N-1}
56 #define PIXN(img, linesize, x, y, N, channel) (img[((x) + (y) * (linesize))*(N) + (channel)])
57
58 /**** Configurable memory and logging functions. Defined in libvidstab.c ****/
59
60 typedef void* (*vs_malloc_t) (size_t size);
61 typedef void* (*vs_realloc_t) (void* ptr, size_t size);
62 typedef void (*vs_free_t) (void* ptr);
63 typedef void* (*vs_zalloc_t) (size_t size);
64
65 typedef int (*vs_log_t) (int type, const char* tag, const char* format, ...);
66
67 typedef char* (*vs_strdup_t) (const char* s);
68
69 extern vs_log_t vs_log;
70
71 extern vs_malloc_t vs_malloc;
72 extern vs_realloc_t vs_realloc;
73 extern vs_free_t vs_free;
74 extern vs_zalloc_t vs_zalloc;
75
76 extern vs_strdup_t vs_strdup;
77
78 extern int VS_ERROR_TYPE;
79 extern int VS_WARN_TYPE;
80 extern int VS_INFO_TYPE;
81 extern int VS_MSG_TYPE;
82
83 extern int VS_ERROR;
84 extern int VS_OK;
85
86 #define vs_log_error(tag, format, args...) \
87 vs_log(VS_ERROR_TYPE, tag, format , ## args)
88 #define vs_log_warn(tag, format, args...) \
89 vs_log(VS_WARN_TYPE, tag, format , ## args)
90 #define vs_log_info(tag, format, args...) \
91 vs_log(VS_INFO_TYPE, tag, format , ## args)
92 #define vs_log_msg(tag, format, args...) \
93 vs_log(VS_MSG_TYPE, tag, format , ## args)
94
95 #endif /* VIDSTABDEFINES_H_ */