blob: 3025fd35a98a4fede0efeade47fdb4b33aa0dd9a [file] [log] [blame]
/*
* 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 <stdint.h>
#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_ */