Kstars

bayer.h
1 /*
2  1394-Based Digital Camera Control Library
3 
4  Bayer pattern decoding functions
5 
6  Written by Damien Douxchamps and Frederic Devernay
7  The original VNG and AHD Bayer decoding are from Dave Coffin's DCRAW.
8 
9  SPDX-License-Identifier: LGPL-2.1-or-later
10 */
11 
12 #pragma once
13 
14 #include <stdint.h>
15 
16 /**
17  * Error codes returned by most libdc1394 functions.
18  *
19  * General rule: 0 is success, negative denotes a problem.
20  */
21 typedef enum
22 {
23  DC1394_SUCCESS = 0,
24  DC1394_FAILURE = -1,
25  DC1394_NOT_A_CAMERA = -2,
26  DC1394_FUNCTION_NOT_SUPPORTED = -3,
27  DC1394_CAMERA_NOT_INITIALIZED = -4,
28  DC1394_MEMORY_ALLOCATION_FAILURE = -5,
29  DC1394_TAGGED_REGISTER_NOT_FOUND = -6,
30  DC1394_NO_ISO_CHANNEL = -7,
31  DC1394_NO_BANDWIDTH = -8,
32  DC1394_IOCTL_FAILURE = -9,
33  DC1394_CAPTURE_IS_NOT_SET = -10,
34  DC1394_CAPTURE_IS_RUNNING = -11,
35  DC1394_RAW1394_FAILURE = -12,
36  DC1394_FORMAT7_ERROR_FLAG_1 = -13,
37  DC1394_FORMAT7_ERROR_FLAG_2 = -14,
38  DC1394_INVALID_ARGUMENT_VALUE = -15,
39  DC1394_REQ_VALUE_OUTSIDE_RANGE = -16,
40  DC1394_INVALID_FEATURE = -17,
41  DC1394_INVALID_VIDEO_FORMAT = -18,
42  DC1394_INVALID_VIDEO_MODE = -19,
43  DC1394_INVALID_FRAMERATE = -20,
44  DC1394_INVALID_TRIGGER_MODE = -21,
45  DC1394_INVALID_TRIGGER_SOURCE = -22,
46  DC1394_INVALID_ISO_SPEED = -23,
47  DC1394_INVALID_IIDC_VERSION = -24,
48  DC1394_INVALID_COLOR_CODING = -25,
49  DC1394_INVALID_COLOR_FILTER = -26,
50  DC1394_INVALID_CAPTURE_POLICY = -27,
51  DC1394_INVALID_ERROR_CODE = -28,
52  DC1394_INVALID_BAYER_METHOD = -29,
53  DC1394_INVALID_VIDEO1394_DEVICE = -30,
54  DC1394_INVALID_OPERATION_MODE = -31,
55  DC1394_INVALID_TRIGGER_POLARITY = -32,
56  DC1394_INVALID_FEATURE_MODE = -33,
57  DC1394_INVALID_LOG_TYPE = -34,
58  DC1394_INVALID_BYTE_ORDER = -35,
59  DC1394_INVALID_STEREO_METHOD = -36,
60  DC1394_BASLER_NO_MORE_SFF_CHUNKS = -37,
61  DC1394_BASLER_CORRUPTED_SFF_CHUNK = -38,
62  DC1394_BASLER_UNKNOWN_SFF_CHUNK = -39
63 } dc1394error_t;
64 #define DC1394_ERROR_MIN DC1394_BASLER_UNKNOWN_SFF_CHUNK
65 #define DC1394_ERROR_MAX DC1394_SUCCESS
66 #define DC1394_ERROR_NUM (DC1394_ERROR_MAX - DC1394_ERROR_MIN + 1)
67 
68 /**
69  * Enumeration of video modes. Note that the notion of IIDC "format" is not present here, except in the format_7 name.
70  */
71 typedef enum
72 {
73  DC1394_VIDEO_MODE_160x120_YUV444 = 64,
74  DC1394_VIDEO_MODE_320x240_YUV422,
75  DC1394_VIDEO_MODE_640x480_YUV411,
76  DC1394_VIDEO_MODE_640x480_YUV422,
77  DC1394_VIDEO_MODE_640x480_RGB8,
78  DC1394_VIDEO_MODE_640x480_MONO8,
79  DC1394_VIDEO_MODE_640x480_MONO16,
80  DC1394_VIDEO_MODE_800x600_YUV422,
81  DC1394_VIDEO_MODE_800x600_RGB8,
82  DC1394_VIDEO_MODE_800x600_MONO8,
83  DC1394_VIDEO_MODE_1024x768_YUV422,
84  DC1394_VIDEO_MODE_1024x768_RGB8,
85  DC1394_VIDEO_MODE_1024x768_MONO8,
86  DC1394_VIDEO_MODE_800x600_MONO16,
87  DC1394_VIDEO_MODE_1024x768_MONO16,
88  DC1394_VIDEO_MODE_1280x960_YUV422,
89  DC1394_VIDEO_MODE_1280x960_RGB8,
90  DC1394_VIDEO_MODE_1280x960_MONO8,
91  DC1394_VIDEO_MODE_1600x1200_YUV422,
92  DC1394_VIDEO_MODE_1600x1200_RGB8,
93  DC1394_VIDEO_MODE_1600x1200_MONO8,
94  DC1394_VIDEO_MODE_1280x960_MONO16,
95  DC1394_VIDEO_MODE_1600x1200_MONO16,
96  DC1394_VIDEO_MODE_EXIF,
97  DC1394_VIDEO_MODE_FORMAT7_0,
98  DC1394_VIDEO_MODE_FORMAT7_1,
99  DC1394_VIDEO_MODE_FORMAT7_2,
100  DC1394_VIDEO_MODE_FORMAT7_3,
101  DC1394_VIDEO_MODE_FORMAT7_4,
102  DC1394_VIDEO_MODE_FORMAT7_5,
103  DC1394_VIDEO_MODE_FORMAT7_6,
104  DC1394_VIDEO_MODE_FORMAT7_7
105 } dc1394video_mode_t;
106 #define DC1394_VIDEO_MODE_MIN DC1394_VIDEO_MODE_160x120_YUV444
107 #define DC1394_VIDEO_MODE_MAX DC1394_VIDEO_MODE_FORMAT7_7
108 #define DC1394_VIDEO_MODE_NUM (DC1394_VIDEO_MODE_MAX - DC1394_VIDEO_MODE_MIN + 1)
109 
110 /* Special min/max are defined for Format_7 */
111 #define DC1394_VIDEO_MODE_FORMAT7_MIN DC1394_VIDEO_MODE_FORMAT7_0
112 #define DC1394_VIDEO_MODE_FORMAT7_MAX DC1394_VIDEO_MODE_FORMAT7_7
113 #define DC1394_VIDEO_MODE_FORMAT7_NUM (DC1394_VIDEO_MODE_FORMAT7_MAX - DC1394_VIDEO_MODE_FORMAT7_MIN + 1)
114 
115 /**
116  * Enumeration of colour codings. For details on the data format please read the IIDC specifications.
117  */
118 typedef enum
119 {
120  DC1394_COLOR_CODING_MONO8 = 352,
121  DC1394_COLOR_CODING_YUV411,
122  DC1394_COLOR_CODING_YUV422,
123  DC1394_COLOR_CODING_YUV444,
124  DC1394_COLOR_CODING_RGB8,
125  DC1394_COLOR_CODING_MONO16,
126  DC1394_COLOR_CODING_RGB16,
127  DC1394_COLOR_CODING_MONO16S,
128  DC1394_COLOR_CODING_RGB16S,
129  DC1394_COLOR_CODING_RAW8,
130  DC1394_COLOR_CODING_RAW16
131 } dc1394color_coding_t;
132 #define DC1394_COLOR_CODING_MIN DC1394_COLOR_CODING_MONO8
133 #define DC1394_COLOR_CODING_MAX DC1394_COLOR_CODING_RAW16
134 #define DC1394_COLOR_CODING_NUM (DC1394_COLOR_CODING_MAX - DC1394_COLOR_CODING_MIN + 1)
135 
136 /**
137  * RAW sensor filters. These elementary tiles tesselate the image plane in RAW modes. RGGB should be interpreted in 2D as
138  *
139  * RG
140  * GB
141  *
142  * and similarly for other filters.
143  */
144 typedef enum
145 {
146  DC1394_COLOR_FILTER_RGGB = 512,
147  DC1394_COLOR_FILTER_GBRG,
148  DC1394_COLOR_FILTER_GRBG,
149  DC1394_COLOR_FILTER_BGGR
150 } dc1394color_filter_t;
151 #define DC1394_COLOR_FILTER_MIN DC1394_COLOR_FILTER_RGGB
152 #define DC1394_COLOR_FILTER_MAX DC1394_COLOR_FILTER_BGGR
153 #define DC1394_COLOR_FILTER_NUM (DC1394_COLOR_FILTER_MAX - DC1394_COLOR_FILTER_MIN + 1)
154 
155 /**
156  * Byte order for YUV formats (may be expanded to RGB in the future)
157  *
158  * IIDC cameras always return data in UYVY order, but conversion functions can change this if requested.
159  */
160 typedef enum { DC1394_BYTE_ORDER_UYVY = 800, DC1394_BYTE_ORDER_YUYV } dc1394byte_order_t;
161 #define DC1394_BYTE_ORDER_MIN DC1394_BYTE_ORDER_UYVY
162 #define DC1394_BYTE_ORDER_MAX DC1394_BYTE_ORDER_YUYV
163 #define DC1394_BYTE_ORDER_NUM (DC1394_BYTE_ORDER_MAX - DC1394_BYTE_ORDER_MIN + 1)
164 
165 /**
166  * A struct containing a list of color codings
167  */
168 typedef struct
169 {
170  uint32_t num;
171  dc1394color_coding_t codings[DC1394_COLOR_CODING_NUM];
173 
174 /**
175  * A struct containing a list of video modes
176  */
177 typedef struct
178 {
179  uint32_t num;
180  dc1394video_mode_t modes[DC1394_VIDEO_MODE_NUM];
182 
183 /**
184  * Yet another boolean data type
185  */
186 typedef enum { DC1394_FALSE = 0, DC1394_TRUE } dc1394bool_t;
187 
188 /**
189  * Yet another boolean data type, a bit more oriented towards electrical-engineers
190  */
191 typedef enum { DC1394_OFF = 0, DC1394_ON } dc1394switch_t;
192 
193 /**
194  * A list of de-mosaicing techniques for Bayer-patterns.
195  *
196  * The speed of the techniques can vary greatly, as well as their quality.
197  */
198 typedef enum
199 {
200  DC1394_BAYER_METHOD_NEAREST = 0,
201  DC1394_BAYER_METHOD_SIMPLE,
202  DC1394_BAYER_METHOD_BILINEAR,
203  DC1394_BAYER_METHOD_HQLINEAR,
204  DC1394_BAYER_METHOD_DOWNSAMPLE,
205  DC1394_BAYER_METHOD_EDGESENSE,
206  DC1394_BAYER_METHOD_VNG,
207  DC1394_BAYER_METHOD_AHD
208 } dc1394bayer_method_t;
209 #define DC1394_BAYER_METHOD_MIN DC1394_BAYER_METHOD_NEAREST
210 #define DC1394_BAYER_METHOD_MAX DC1394_BAYER_METHOD_AHD
211 #define DC1394_BAYER_METHOD_NUM (DC1394_BAYER_METHOD_MAX - DC1394_BAYER_METHOD_MIN + 1)
212 
213 typedef struct
214 {
215  dc1394bayer_method_t method; /* Debayer method */
216  dc1394color_filter_t filter; /* Debayer pattern */
217  int offsetX, offsetY; /* Debayer offset */
218 } BayerParams;
219 
220 /************************************************************************************************
221  * *
222  * Color conversion functions for cameras that can output raw Bayer pattern images (color *
223  * codings DC1394_COLOR_CODING_RAW8 and DC1394_COLOR_CODING_RAW16). *
224  * *
225  * Credits and sources: *
226  * - Nearest Neighbor : OpenCV library *
227  * - Bilinear : OpenCV library *
228  * - HQLinear : High-Quality Linear Interpolation For Demosaicing Of Bayer-Patterned *
229  * Color Images, by Henrique S. Malvar, Li-wei He, and Ross Cutler, *
230  * in Proceedings of the ICASSP'04 Conference. *
231  * - Edge Sense II : Laroche, Claude A. "Apparatus and method for adaptively interpolating *
232  * a full color image utilizing chrominance gradients" *
233  * U.S. Patent 5,373,322. Based on the code found on the website *
234  * http://www-ise.stanford.edu/~tingchen/ Converted to C and adapted to *
235  * all four elementary patterns. *
236  * - Downsample : "Known to the Ancients" *
237  * - Simple : Implemented from the information found in the manual of Allied Vision *
238  * Technologies (AVT) cameras. *
239  * - VNG : Variable Number of Gradients, a method described in *
240  * http://www-ise.stanford.edu/~tingchen/algodep/vargra.html *
241  * Sources import from DCRAW by Frederic Devernay. DCRAW is a RAW *
242  * converter program by Dave Coffin. URL: *
243  * https://dechifro.org/dcraw/ *
244  * - AHD : Adaptive Homogeneity-Directed Demosaicing Algorithm, by K. Hirakawa *
245  * and T.W. Parks, IEEE Transactions on Image Processing, Vol. 14, Nr. 3, *
246  * March 2005, pp. 360 - 369. *
247  * *
248  ************************************************************************************************/
249 
250 #ifdef __cplusplus
251 extern "C" {
252 #endif
253 
254 /**
255  * Perform de-mosaicing on an 8-bit image buffer
256  */
257 dc1394error_t dc1394_bayer_decoding_8bit(const uint8_t *bayer, uint8_t *rgb, uint32_t width, uint32_t height,
258  dc1394color_filter_t tile, dc1394bayer_method_t method);
259 
260 /**
261  * Perform de-mosaicing on an 16-bit image buffer
262  */
263 dc1394error_t dc1394_bayer_decoding_16bit(const uint16_t *bayer, uint16_t *rgb, uint32_t width, uint32_t height,
264  dc1394color_filter_t tile, dc1394bayer_method_t method, uint32_t bits);
265 
266 /* Bayer to RGBX */
267 dc1394error_t dc1394_bayer16_RGBX_NearestNeighbor(const uint16_t *bayer, uint16_t *rgbx, int sx, int sy, int tile);
268 #ifdef __cplusplus
269 }
270 #endif
QFuture< void > filter(Sequence &sequence, KeepFunctor filterFunction)
A struct containing a list of video modes.
Definition: bayer.h:177
A struct containing a list of color codings.
Definition: bayer.h:168
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Fri Aug 12 2022 04:00:52 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.