summaryrefslogtreecommitdiff
path: root/include/ia_imaging/ia_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/ia_imaging/ia_types.h')
-rw-r--r--include/ia_imaging/ia_types.h207
1 files changed, 207 insertions, 0 deletions
diff --git a/include/ia_imaging/ia_types.h b/include/ia_imaging/ia_types.h
new file mode 100644
index 0000000..c0becbf
--- /dev/null
+++ b/include/ia_imaging/ia_types.h
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2015 - 2017 Intel Corporation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _IA_TYPES_H_
+#define _IA_TYPES_H_
+
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include <stdbool.h>
+
+#define LIBEXPORT
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \brief Bundles binary data pointer with size.
+ */
+typedef struct
+{
+ void *data;
+ unsigned int size;
+} ia_binary_data; /* ia_binay_data owns data */
+
+/**
+ * \brief Defines a common record header.
+ */
+typedef struct
+{
+ unsigned int uuid;
+ unsigned int size;
+} ia_record_header;
+
+typedef struct {
+ int major;
+ int minor;
+} ia_version;
+
+typedef enum {
+ CAPTURE_OUTPUT,
+ CAPTURE_VFPP,
+ PREVIEW_VFPP,
+ ACC_QOS
+} ia_acceleration_fw_dst;
+
+typedef struct {
+ void *isp;
+ void *(*open_firmware) (const char *fw_path, unsigned *size);
+ int (*load_firmware) (void *isp, void *fw, unsigned size, unsigned *handle);
+ int (*unload_firmware) (void *isp, unsigned handle);
+ int (*map_firmware_arg) (void *isp, void *usr_ptr, size_t size, unsigned long *css_ptr);
+ int (*unmap_firmware_arg)(void *isp, unsigned long css_ptr, size_t size);
+ int (*set_firmware_arg) (void *isp, unsigned handle, unsigned num, void *val, size_t size);
+ int (*set_mapped_arg) (void *isp, unsigned handle, unsigned mem, unsigned long css_ptr, size_t size);
+ int (*start_firmware) (void *isp, unsigned handle);
+ int (*wait_for_firmware) (void *isp, unsigned handle);
+ int (*abort_firmware) (void *isp, unsigned handle, unsigned timeout);
+ ia_version version_isp;
+ ia_version version_css;
+ int (*set_stage_state) (void *isp, unsigned int handle, bool enable);
+ int (*wait_stage_update) (void *isp, unsigned int handle);
+ int (*load_firmware_ext) (void *isp, void *fw, unsigned size, unsigned *handle, int fw_dst);
+} ia_acceleration;
+
+typedef enum {
+ ia_frame_format_nv12, /* 12 bit YUV 420, Y, UV plane */
+ ia_frame_format_yuv420, /* 12 bit YUV 420, Y, U, V plane */
+ ia_frame_format_yuv444, /* 24 bit YUV 444, Y, U, V plane */
+ ia_frame_format_raw, /* RAW, 1 plane */
+ ia_frame_format_rgba32, /* RGBA 8 bits per channel */
+ ia_frame_format_yuy2, /* 16 bit YUV 422, YUYV plane */
+ ia_frame_format_raw16, /* 16 bit RAW, 1 plane */
+ ia_frame_format_rgb16p, /* 16 bits per channel, 3 planes */
+ ia_frame_format_yuv420sp16, /* 24 bit YUV 420, Y, UV plane */
+ ia_frame_format_yuv420p16, /* 24 bit YUV 420, Y, U, V plane */
+ ia_frame_format_yuv444p16, /* 48 bit YUV 444, Y, U, V plane */
+} ia_frame_format;
+
+typedef struct {
+ void *data; /**< Pointer to the image data, ia_ipf_buffer_container owns this */
+ int size; /**< Total number of bytes in data*/
+ int width; /**< Width of the frame in pixels */
+ int height; /**< Height of the frame in lines */
+ ia_frame_format format; /**< Frame format */
+ int stride; /**< Stride, bytes per line*/
+ int rotation; /**< degrees 0-360 */
+} ia_frame;
+
+/*!
+* \brief Raw image data format.
+*/
+typedef enum
+{
+ ia_image_data_format_rawplain16, /*!< Data is 16 bits per pixel. */
+ ia_image_data_format_rawplain8, /*!< Data is 8 bits per pixel. */
+ ia_image_data_format_rgb16, /*!< Data is in a buffer contaning planes: R, G and B one after another. Data size is 16 bits per pixel. */
+ ia_image_data_format_smia10, /*!< SMIA 10 format groups 4 pixels: MSBs of four pixels in 4 bytes + LSBs of same 4 pixels in 1 byte. */
+ ia_image_data_format_nv12, /*!< Data is 12 bit YUV 420, Y, UV plane. */
+ ia_image_data_format_yuv420_planar, /*!< Data is YUV 420 planar. */
+ ia_image_data_format_rawplain16_interleaved, /*!< Data is 16 bits per pixel interleaved so that all bayer quad pixels are one after another. Example: GRBGGRBG...*/
+} ia_image_data_format;
+
+/*!
+* \brief Raw image essential information.
+* If raw image data doesn't contain any extra bytes/lines/columns, the image can be decoded with this info.
+* For all signed values in the structs below, negative value indicates N/A.
+*/
+typedef struct
+{
+ unsigned char data_format; /*!< RawPlain16, RawPlain8 etc. as defined in the enum ia_image_data_format */
+ char bayer_order; /*!< GRBG, RGGB, BGGR or GBRG as defined in the enum cmc_bayer_order. -1 if N/A */
+ char data_format_bpp; /*!< Bits per pixel for a given data_format. eg. 16 for RawPlain16 etc. -1 if N/A*/
+ char data_bpp; /*!< Bits per pixel used by the image data. -1 if N/A */
+ unsigned int width_cols; /*!< Visible image width (640, 800, 1280, 1600, etc.) */
+ unsigned int height_lines; /*!< Visible image height (480, 600, 960, 1200, etc.) */
+} ia_image_info;
+
+/*!
+* \brief Raw image info with additional details about extra bytes/lines/columns to skip when decoding the raw image.
+*/
+typedef struct
+{
+ ia_image_info raw_image; /*!< Essential information needed to decode the image. */
+ unsigned int header_size_bytes; /*!< Variable size header */
+ unsigned int footer_size_bytes; /*!< Variable size footer */
+
+ unsigned short extra_bytes_left; /*!< e.g. CCP sync codes */
+ unsigned short extra_bytes_right; /*!< e.g. CCP sync codes */
+
+ unsigned short extra_lines_top; /*!< Non-image data, e.g. embedded data lines */
+ unsigned short extra_cols_left; /*!< Non-image data, extra columns at left */
+ unsigned short extra_cols_right; /*!< Non-image data, extra columns at right */
+ unsigned short extra_lines_bottom; /*!< Non-image data, e.g. embedded data lines */
+
+ char byte_order_xor; /*!< 0, 1 or 3 (for the cases when byte order has been modified for whatever reason) */
+ char spatial_sampling; /*!< 0 or 1 = Bayer or Co-sited */
+} ia_image_full_info;
+
+/** Floating point range struct. */
+typedef struct {
+ float min;
+ float max;
+} ia_float_range;
+
+/*!
+ * Needs to be agreed with ia_imaging error codes.
+ * \brief Error codes.
+*/
+typedef enum {
+ ia_err_none = 0, /*!< No errors*/
+ ia_err_general = (1 << 1), /*!< General error*/
+ ia_err_nomemory = (1 << 2), /*!< Out of memory*/
+ ia_err_data = (1 << 3), /*!< Corrupted data*/
+ ia_err_internal = (1 << 4), /*!< Error in code*/
+ ia_err_argument = (1 << 5), /*!< Invalid argument for a function*/
+ ia_err_disabled = (1 << 6) /*!< Functionality is disabled*/
+} ia_err;
+
+typedef struct {
+ int left;
+ int top;
+ int right;
+ int bottom;
+} ia_rectangle;
+
+/** Vector, used for image stabilization. */
+typedef struct {
+ int x;
+ int y;
+} ia_vector;
+
+/** Coordinate, used in red-eye correction. */
+typedef struct {
+ int x;
+ int y;
+} ia_coordinate;
+
+typedef struct {
+ void (*vdebug)(const char *fmt, ...);
+ void (*verror)(const char *fmt, ...);
+ void (*vinfo)(const char *fmt, ...);
+} ia_env;
+
+typedef struct {
+ void *(*alloc) (void *isp, size_t size);
+ void (*free) (void *isp, void *usr_ptr, size_t size);
+} ia_mem_env;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _IA_TYPES_H_ */