You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
6.1 KiB
151 lines
6.1 KiB
/*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
|