| /*Copyright (c) 2015, The Linux Foundation. All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions are |
| met: |
| * Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| * Redistributions in binary form must reproduce the above |
| copyright notice, this list of conditions and the following |
| disclaimer in the documentation and/or other materials provided |
| with the distribution. |
| * Neither the name of The Linux Foundation nor the names of its |
| contributors may be used to endorse or promote products derived |
| from this software without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED |
| WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT |
| ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS |
| BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
| BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE |
| OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN |
| IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/ |
| |
| #ifndef __QMPO_H__ |
| #define __QMPO_H__ |
| |
| #include <stdio.h> |
| #include <qexif.h> |
| |
| //Length of MPO header fields |
| #define MP_APP2_FIELD_LENGTH_BYTES 2 |
| #define MP_FORMAT_IDENTIFIER_BYTES 4 |
| #define MP_ENDIAN_BYTES 4 |
| #define MP_HEADER_OFFSET_TO_FIRST_IFD_BYTES 4 |
| #define MP_INDEX_COUNT_BYTES 2 |
| #define MP_INDEX_VERSION_BYTES 12 |
| #define MP_INDEX_NUMBER_OF_IMAGES_BYTES 12 |
| #define MP_INDEX_ENTRY_BYTES 12 |
| #define MP_INDEX_IMAGE_UNIQUE_ID_LIST_BYTES 12 |
| #define MP_INDEX_TOTAL_CAPURED_FRAMES 12 |
| #define MP_INDEX_OFFSET_OF_NEXT_IFD_BYTES 4 |
| #define MP_INDEX_ENTRY_VALUE_BYTES 16 |
| #define MP_INDEX_ENTRY_INDIVIDUAL_IMAGE_ATTRIBUTE_BYTES 4 |
| #define MP_INDEX_ENTRY_INDIVIDUAL_IMAGE_SIZE_BYTES 4 |
| #define MP_INDEX_ENTRY_INDIVIDUAL_IMAGE_DATA_OFFSET_BYTES 4 |
| #define MP_ATTRIBUTE_COUNT_BYTES 2 |
| #define MP_ATTRIBUTE_OFFSET_OF_NEXT_IFD_BYTES 4 |
| #define MP_TAG_BYTES 12 |
| #define MP_INDIVIDUAL_IMAGE_ID_BYTES 33 |
| #define MP_INDEX_IFD_START 2 |
| |
| #define MPO_BIG_ENDIAN 0x4D4D002A |
| #define MPO_LITTLE_ENDIAN 0x49492A00 |
| |
| /* MPO Dependent Type */ |
| typedef enum |
| { |
| NON_DEPENDENT_IMAGE = 0x00000000, // Non dependent image |
| DEPENDENT_CHILD_IMAGE = 0x40000000, // Dependent child image flag |
| DEPENDENT_PARENT_IMAGE = 0x80000000, // Dependent parent image flag |
| DEPENDENT_MASK = 0xc0000000, // Dependent mask |
| DEPENDENT_MAX, |
| } qmpo_dependent_t; |
| |
| /* MPO Representative Type */ |
| typedef enum |
| { |
| NOT_REPRESENTATIVE_IMAGE = 0x00000000, // Not a representative image |
| REPRESENTATIVE_IMAGE = 0x20000000, // Representative image flag |
| REPRESENTATIVE_MASK = 0x20000000, // Representative mask |
| REPRESENTATIVE_MAX, |
| } qmpo_representative_t; |
| |
| /* MPO Image Data Format Type */ |
| typedef enum |
| { |
| JPEG = 0x00000000, // Image is in JPEG format |
| NON_JPEG = 0x07000000, // Image is not JPEG |
| IMAGE_DATA_FORMAT_MASK = 0x07000000, // Image mask |
| IMAGE_DATA_FORMAT_MAX, |
| } qmpo_image_data_format_t; |
| |
| /* MPO Type */ |
| typedef enum |
| { |
| UNDEFINED = 0x00000000, // MP types undefined |
| LARGE_TN_CLASS_1 = 0x00010001, // Large thumbnail class 1 image |
| LARGE_TN_CLASS_2 = 0x00010002, // Large thumbnail class 2 image |
| MULTI_VIEW_PANORAMA = 0x00020001, // Multi-view Panorama image |
| MULTI_VIEW_DISPARITY = 0x00020002, // Multi-view Disparity image |
| MULTI_VIEW_MULTI_ANGLE = 0x00020003, // Multi-view Multi-angle image |
| BASELINE_PRIMARY = 0x00030000, // Baseline MP Primary image |
| TYPE_MASK = 0x00ffffff, // Type mask |
| TYPE_MAX, |
| } qmpo_type_t; |
| |
| // MP Format Version |
| // Use MPOTAGTYPE_MP_F_VERSION as the exif_tag_type (EXIF_UNDEFINED) |
| // Count should be 4 |
| #define _ID_MP_F_VERSION_FIRST 0xb000 |
| #define MPOTAGID_MP_F_VERSION_FIRST CONSTRUCT_TAGID(MP_F_VERSION_FIRST, _ID_MP_F_VERSION_FIRST) |
| #define MPOTAGTYPE_MP_F_VERSION_FIRST EXIF_UNDEFINED |
| |
| // Number of Images |
| // Use MPOTAGTYPE_NUMBER_OF_IMAGES as the exif_tag_type (EXIF_LONG) |
| // Count should be 1 |
| #define _ID_NUMBER_OF_IMAGES 0xb001 |
| #define MPOTAGID_NUMBER_OF_IMAGES CONSTRUCT_TAGID(NUMBER_OF_IMAGES, _ID_NUMBER_OF_IMAGES) |
| #define MPOTAGTYPE_NUMBER_OF_IMAGES EXIF_LONG |
| |
| // MP Entry |
| // Use MPOTAGTYPE_MP_ENTRY as the exif_tag_type (EXIF_UNDEFINED) |
| // Count should be 16 x NumberOfImages |
| #define _ID_MP_ENTRY 0xb002 |
| #define MPOTAGID_MP_ENTRY CONSTRUCT_TAGID(MP_ENTRY, _ID_MP_ENTRY) |
| #define MPOTAGTYPE_MP_ENTRY EXIF_UNDEFINED |
| |
| // Individual Image Unique ID List |
| // Use MPOTAGTYPE_IMAGE_UID_LIST as the exif_tag_type (EXIF_UNDEFINED) |
| // Count should be 33 x NumberOfImages |
| #define _ID_IMAGE_UID_LIST 0xb003 |
| #define MPOTAGID_IMAGE_UID_LIST CONSTRUCT_TAGID(IMAGE_UID_LIST, _ID_IMAGE_UID_LIST) |
| #define MPOTAGTYPE_IMAGE_UID_LIST EXIF_UNDEFINED |
| |
| // Total Number of Camptured Frames |
| // Use MPOTAGTYPE_TOTAL_FRAMES as the exif_tag_type (EXIF_LONG) |
| // Count should be 1 |
| #define _ID_TOTAL_FRAMES 0xb004 |
| #define MPOTAGID_TOTAL_FRAMES CONSTRUCT_TAGID(TOTAL_FRAMES, _ID_TOTAL_FRAMES) |
| #define MPOTAGTYPE_TOTAL_FRAMES EXIF_LONG |
| |
| // MP Format Version |
| // Use MPOTAGTYPE_MP_F_VERSION as the exif_tag_type (EXIF_UNDEFINED) |
| // Count should be 4 |
| #define _ID_MP_F_VERSION 0xb000 |
| #define MPOTAGID_MP_F_VERSION CONSTRUCT_TAGID(MP_F_VERSION, _ID_MP_F_VERSION) |
| #define MPOTAGTYPE_MP_F_VERSION EXIF_UNDEFINED |
| |
| // MP Individual Image Number |
| // Use MPOTAGTYPE_MP_INDIVIDUAL_NUM as the exif_tag_type (EXIF_LONG) |
| // Count should be 1 |
| #define _ID_MP_INDIVIDUAL_NUM 0xb101 |
| #define MPOTAGID_MP_INDIVIDUAL_NUM CONSTRUCT_TAGID(MP_INDIVIDUAL_NUM, _ID_MP_INDIVIDUAL_NUM) |
| #define MPOTAGTYPE_MP_INDIVIDUAL_NUM EXIF_LONG |
| |
| #endif |