/* * 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. */ /*! * \file ia_mkn_types.h * \brief Enumerations, structures and definitions used in the Maker Note System. */ #ifndef _IA_MKN_TYPES_H_ #define _IA_MKN_TYPES_H_ #include #ifdef __cplusplus extern "C" { #endif /*! * \brief combines 4 chars into one unsigned long integer. */ #define IA_MKN_CHTOUL(a,b,c,d) \ ( (uint32_t)(a) | ((uint32_t)(b)<<8) | ((uint32_t)(c)<<16) | ((uint32_t)(d)<<24) ) /*! * \brief Makernote tag. 4 first bytes of the makernote data. */ #define IA_MKN_TAG IA_MKN_CHTOUL('M','K','N','T') /*! * \brief Definition of ia_mkn handle. * Definition to clarify when ia_mkn handle is expected to be used. */ typedef struct ia_mkn_t ia_mkn; /*! * Start of MKN System enumeration set. * \brief Enumerations set for Maker Note System. * This part contatins two enumerations: * - 'ia_mkn_dfid', describes data type of the 'Data' field in the MKN record; * - 'ia_mkn_dnid',describes a name (or functionality) of data in the 'Data' field. * To modify this file a following procedure is used: * a) Add new enum members of ia_mkn_dfid or ia_mkn_dnid * b) Update MKN_ENUMS_DATA_REVISION accordingly. */ /*! * Revision of MKN System enumeration set, format 0xYYMMDDVV, where: * - YY: year, * - MM: month, * - DD: day, * - VV: version ('01','02' etc.) */ #define IA_MKN_ENUMS_DATA_REVISION 0x14012702 /*! * \brief Data Format ID (DFID) enumeration describes data type of the 'Data' field in the MKN record. */ typedef enum { ia_mkn_dfid_dummy, /*!< Used for dummy records (no actual data). */ /*! Standard integer data types */ ia_mkn_dfid_signed_char, /*!< 8-bit, int. values, range: -128 to 127 */ ia_mkn_dfid_unsigned_char, /*!< 8-bit, int. values, range: 0 to 255 */ ia_mkn_dfid_signed_short, /*!< 16-bit, int. values, range: -32768 to 32767 */ ia_mkn_dfid_unsigned_short, /*!< 16-bit, int. values, range: 0 to 65535 */ ia_mkn_dfid_signed_int, /*!< 32-bit, int. values, range: -2147483648 to 2147483647 */ ia_mkn_dfid_unsigned_int, /*!< 32-bit, int. values, range: 0 to 4294967295 */ ia_mkn_dfid_signed_long_long, /*!< 64-bit, int. values, range: -9223372036854775808 to 9223372036854775807 */ ia_mkn_dfid_unsigned_long_long, /*!< 64-bit, int. values, range: 0 to 18446744073709551615 */ ia_mkn_dfid_string, /*!< 8-bit chars which are converted to ASCII. */ /*! Floating point numbers. */ ia_mkn_dfid_float = 14, /*!< IEEE-754 floating point single precision */ ia_mkn_dfid_double, /*!< IEEE-754 floating point double precision */ /*! Fixed point fractional data types */ ia_mkn_dfid_unsigned_q16_16, /*!< 32-bit, Unsigned fixed point fractional value, 16 bits integer, 16 bits fractional */ ia_mkn_dfid_signed_q15_16, /*!< 32-bit, Signed fixed point fractional value, 1 bit sign, 15 bits integer, 16 bits fractional */ ia_mkn_dfid_unsigned_q8_8, /*!< 16-bit, Unsigned fixed point fractional value, 8 bits integer, 8 bits fractional */ ia_mkn_dfid_signed_q7_8, /*!< 16-bit, Signed fixed point fractional value, 1 bit sign, 7 bits integer, 8 bits fractional */ ia_mkn_dfid_last /*!< Total number of data types, keep this enum member as a last one!. */ } ia_mkn_dfid; /*! * \brief Data Name ID (DNID) enumeration describes a name (or functionality) of data in the 'Data' field. */ typedef enum { ia_mkn_dnid_dummy, /*!< Used for dummy records (no actual data). */ ia_mkn_dnid_ia_aiq_records = 1, /*!< ia_aiq library internal records. */ ia_mkn_dnid_hal_records = 256, /*!< HAL records. */ ia_mkn_dnid_ia_isp_records = 512, /*!< ia_isp library internal records. */ ia_mkn_dnid_free_records = 768, /*!< Next free block of records - replace this when assigned. */ ia_mkn_dnid_last /*!< Total number of data names, keep this enum member as a last one!. */ } ia_mkn_dnid; /*! * \brief Bitfield to enable makernote features. */ typedef enum { ia_mkn_cfg_compression = 1, /*!< Enable compression of maker note data */ ia_mkn_cfg_imported = 1 << 1, /*!< Shows that MKN has been imported from binary container */ } ia_mkn_config_bits; /*! * \brief Target of the makernote data: Section 1 or 2 (which could represent e.g. JPEG EXIF or RAW Header data). * Notice that if Section 2 is selected, an output makernote data will contain both Section 1 and Section 2 parts. * Bitwise OR'd with DNID when set for the target sections. */ typedef enum { ia_mkn_trg_section_1 = 0, /*!< Extensions ('or'-ed to ia_mkn_dnid) */ ia_mkn_trg_section_2 = 0x10000 /*!< Extensions ('or'-ed to ia_mkn_dnid) */ } ia_mkn_trg; /*! * \brief Makernote header structure. Records (ia_mkn_record_header) are followed after this header. */ typedef struct { uint32_t tag; /*!< Tag in the beginning of makernote data. It also can be used to determine endianness. */ uint32_t size; /*!< Size of the actual makernote records data (including ia_mkn_header) */ uint32_t system_version; /*!< Version of makernote system, format 0xYYMMDDVV */ uint32_t enum_revision; /*!< Revision of makernote enumerations set, format 0xYYMMDDVV */ uint32_t config_bits; /*!< Configuration flag bits set */ uint32_t checksum; /*!< Global checksum of all bytes from the maker note buffer */ } ia_mkn_header; /*! * \brief Record header structure. Data is followed after this header. */ typedef struct { uint32_t size; /*!< Size of record including header */ uint8_t data_format_id; /*!< ia_mkn_dfid enumeration values used */ uint8_t key_id; /*!< Packing key ID. If 0 - no packing */ uint16_t data_name_id; /*!< ia_mkn_dnid enumeration values used */ } ia_mkn_record_header; #ifdef __cplusplus } #endif #endif /* _IA_MKN_TYPES_H_ */