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_ */
96