⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exifhdr.h

📁 台湾凌阳方案300万数码相机源代码
💻 H
字号:
/*++

Copyright (c) 2001 Sunplus Technology Co., Ltd.

Module Name:

        exifhdr.h

Abstract:

        Header file related to exif header

Environment:

        Keil C51 Compiler

Revision History:

        02/22/2002      Leeada    created                 

--*/

//------------------------------------------------------------------------------
//Type and Constant Definition
//------------------------------------------------------------------------------

//structure IFD
#define K_IFD_SIZE  ((ULONG)0x0000000c)

struct IFD
{
     USHORT    tag;
     USHORT    type;   
     ULONG     count;
     ULONG     valueoffset;
};

//structure EXIF header 0,SOI,thumb SOI,thumb EOI
#define K_HDR0_SIZE   ((ULONG)0x00000002)

struct HDR0
{
     UCHAR     Marker[2];
};
 
//structure EXIF Header1,APP1
#define K_HDR1_SIZE   ((ULONG)0x000002c9)

struct HDR1
{
     UCHAR     Marker[2];
     USHORT    Length;
     UCHAR     ExifString[5];
     UCHAR     Pad;
     USHORT    Tiff_ByteOrder;
     USHORT    Tiff_ID;
     ULONG     Tiff_IFD0Offset;
     USHORT    IFD0_NumberOfInteroperability;
     struct IFD       IFD0_ImageDescriptionTag;
     struct IFD       IFD0_MakeTag;
     struct IFD       IFD0_ModelTag;
     struct IFD       IFD0_OrientationTag;
     struct IFD       IFD0_XResolutionTag;
     struct IFD       IFD0_YResolutionTag;
     struct IFD       IFD0_ResolutionUnitTag;
     struct IFD       IFD0_DateTimeTag;
     struct IFD       IFD0_YCbCrPositionTag;
     struct IFD       IFD0_ExifIFDPointerTag;
     ULONG     IFD0_NextIFDOffset;
     UCHAR     IFD0_ImageDescriptionValue[9];
     UCHAR     IFD0_MakeValue[9];
     UCHAR     IFD0_ModelValue[9];
     ULONG     IFD0_XResolutionValue[2];
     ULONG     IFD0_YResolutionValue[2];
     UCHAR     IFD0_DateTimeValue[20];
     USHORT    Exif_IFDNumber;
     struct IFD       Exif_ExposureTimeTag;
     struct IFD       Exif_FNumberTag;
     struct IFD       Exif_ExposureProgramTag;
     struct IFD       Exif_ISOSpeedRatingsTag;
     struct IFD       Exif_ExifVersionTag;
     struct IFD       Exif_DateTimeOriginalTag;
     struct IFD       Exif_DateTimeDigitilizedTag;
     struct IFD       Exif_ComponentsConfigurationTag;
     struct IFD       Exif_CompressedBitsPerPixelTag;
     struct IFD       Exif_ExposureBiasTag;
     struct IFD       Exif_MaxApertureTag;
     struct IFD       Exif_MeteringModeTag;
     struct IFD       Exif_LightSourceTag;
     struct IFD       Exif_FlashTag;
     struct IFD       Exif_FocalLengthTag;
     struct IFD       Exif_FlashPixVersiontTag;
     struct IFD       Exif_ColorSpaceTag;
     struct IFD       Exif_PixelXDimensionTag;
     struct IFD       Exif_PixelYDimensionTag;
     struct IFD       Exif_InteroperabilityIFDPointerTag;
     struct IFD       Exif_FileSourceTag;
     struct IFD       Exif_SceneTypeTag;
     ULONG     Exif_NextIFDOffset; 
     ULONG     Exif_ExposureTimeValue[2];
     ULONG     Exif_FNumberValue[2];
     UCHAR     Exif_DateTimeOriginalValue[20];
     UCHAR     Exif_DateTimeDigitilizedValue[20];
     ULONG     Exif_CompressedBitsPerPixelValue[2];
     ULONG     Exif_ExposureBiasValue[2];
     ULONG     Exif_MaxApertureValue[2];
     ULONG     Exif_FocalLengthValue[2];
     USHORT    NumberOfInteroperability;
     struct IFD       InteroperabilityIndexTag;
     struct IFD       InteroperabilityVersionTag;
     ULONG     NextInteroperabilityIFDOffset;
     USHORT    IFD1_NumberOfInteroperability;
     struct IFD       IFD1_CompressionTag;
     struct IFD       IFD1_OrientationTag;
     struct IFD       IFD1_XResolutionTag;
     struct IFD       IFD1_YResolutionTag;
     struct IFD       IFD1_ResolutionUnitTag;
     struct IFD       IFD1_JPEGInterChangeFormatTag;
     struct IFD       IFD1_JPEGInterChangeFormatLengthTag;
     struct IFD       IFD1_YCbCrPositioningTag;
     ULONG     IFD1_NextIFDOffset;
     ULONG     IFD1_XResolutionValue[2];
     ULONG     IFD1_YResolutionValue[2];
};

//structure EXIF Header2 for COM(Thumbnail odd) & SOF
#define K_HDR2_SIZE   ((ULONG)0x00000013)

struct HDR2
{
     UCHAR     Marker[2];
     USHORT    Length;
     UCHAR     Content[15];
};

//structure EXIF Header3 for DQT
#define K_HDR3_SIZE   ((ULONG)0x00000086)

struct HDR3
{
     UCHAR     Marker[2];
     USHORT    Length;
     UCHAR     PqTq0;
     UCHAR     Content0[64];  //Y
     UCHAR     PqTq1;
     UCHAR     Content1[64];  //UV
};

//structure EXIF Header4 for DHT(DC)
#define K_HDR4_SIZE   ((ULONG)0x000001a4)

struct HDR4
{
     UCHAR     Marker[2];
     USHORT    Length;
     //Y
     UCHAR     TcTh0;
     UCHAR     Content0[28];   //DC
     UCHAR     TcTh1;
     UCHAR     Content1[178];  //AC
     //UV
     UCHAR     TcTh2;
     UCHAR     Content2[28];   //DC
     UCHAR     TcTh3;
     UCHAR     Content3[178];  //AC
};

//structure EXIF Header5 for SOS
#define K_HDR5_SIZE   ((ULONG)0x0000000e)

struct HDR5
{
     UCHAR     Marker[2];
     USHORT    Length;
     UCHAR     Content[10];
};

//structure EXIF Header6 for COM(Thumbnail even)
#define K_HDR6_SIZE   ((ULONG)0x00000014)

struct HDR6
{
     UCHAR     Marker[2];
     USHORT    Length;
     UCHAR     Content[16];
};

#define K_EXIF_STRUCTURE0_SIZE     ((ULONG) ((K_HDR0_SIZE * 2) + K_HDR1_SIZE + K_HDR2_SIZE + K_HDR3_SIZE + K_HDR4_SIZE + K_HDR5_SIZE))

struct Exif_Header0
{
//----- K_STRUCTURE0_SIZE -----
     struct HDR0      SOI;
     struct HDR1      APP1;
     struct HDR0      THUMB_SOI;
     struct HDR3      THUMB_DQT;
     struct HDR4      THUMB_DHT;
     struct HDR2      THUMB_SOF;
     struct HDR5      THUMB_SOS;     
};

#define K_EXIF_STRUCTURE1_SIZE     ((ULONG)K_HDR6_SIZE)   //thumbnail even size

struct Exif_Header1
{
//----- K_STRUCTURE1_SIZE -----
     struct HDR6      ODD_COM;
};

#define K_EXIF_STRUCTURE2_SIZE     ((ULONG)K_HDR2_SIZE)   //thumbnail odd size

struct Exif_Header2
{
//----- K_STRUCTURE2_SIZE -----
     struct HDR2      EVEN_COM;
};

#define K_EXIF_STRUCTURE3_SIZE     ((ULONG) (K_HDR2_SIZE + K_HDR3_SIZE + K_HDR4_SIZE + K_HDR5_SIZE))  //thumbnail even size                                    

struct Exif_Header3
{
//----- K_STRUCTURE3_SIZE -----
     struct HDR3      DQT;
     struct HDR4      DHT;
     struct HDR2      SOF;
     struct HDR5      SOS;
};

#define K_TOTAL_EXIF_STRUCTURE_SIZE     ((ULONG) (K_EXIF_STRUCTURE0_SIZE + K_EXIF_STRUCTURE1_SIZE + K_EXIF_STRUCTURE2_SIZE + K_EXIF_STRUCTURE3_SIZE))

#define K_THUMBNAIL_STRUCTURE_SIZE      ((ULONG) (0x02 + 0x02 + 0x84 + 0x02 + 0x01a2 + 0x02 + 0x11 + 0x02 + 0x0c + 0x02))
                                        //        SOI    DQT           DHT             SOF           SOS           EOI   

struct Exif_Decompress_Parameter
{
     ULONG     Addr;
     USHORT    Height;
     USHORT    Width;
     ULONG     Size;
     UCHAR     DataType;
};

//ada@0509 for EXIF
//#define K_JFIF_IMAGE_FORMAT   (UCHAR)1
//#define K_EXIF_IMAGE_FORMAT   (UCHAR)2 
#define K_JFIF_IMAGE_FORMAT   (UCHAR)6
#define K_EXIF_IMAGE_FORMAT   (UCHAR)4

//patch3.2@ada@0401 For EXIF
#define K_BIG_ENDIAN          (USHORT)0x4d4d
#define K_LITTLE_ENDIAN       (USHORT)0x4949

#define K_SOI_MARKER          (UCHAR)0xd8
#define K_APP0_MARKER         (UCHAR)0xe0
#define K_APP1_MARKER         (UCHAR)0xe1
#define K_APP2_MARKER         (UCHAR)0xe2
#define K_APP3_MARKER         (UCHAR)0xe3
#define K_APP4_MARKER         (UCHAR)0xe4
#define K_APP5_MARKER         (UCHAR)0xe5
#define K_APP6_MARKER         (UCHAR)0xe6
#define K_APP7_MARKER         (UCHAR)0xe7
#define K_APP8_MARKER         (UCHAR)0xe8
#define K_APP9_MARKER         (UCHAR)0xe9
#define K_APP10_MARKER        (UCHAR)0xea
#define K_APP11_MARKER        (UCHAR)0xeb
#define K_APP12_MARKER        (UCHAR)0xec
#define K_APP13_MARKER        (UCHAR)0xed
#define K_APP14_MARKER        (UCHAR)0xee
#define K_APP15_MARKER        (UCHAR)0xef
#define K_DQT_MARKER          (UCHAR)0xdb
#define K_DHT_MARKER          (UCHAR)0xc4
#define K_SOF_MARKER          (UCHAR)0xc0
#define K_SOS_MARKER          (UCHAR)0xda
#define K_EOI_MARKER          (UCHAR)0xd9
#define K_COM_MARKER          (UCHAR)0xfe
#define K_DRI_MARKER          (UCHAR)0xdd


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -