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

📄 exifhdr.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
     hdr1->ODD_COM.Length = (0x0002 + (USHORT)(Length_Text_ThumbOdd_Comment & 0x0000ffff));

     EXIFHDR_Fill_Text(Text_Comment,hdr1->ODD_COM.Content,Length_Text_ThumbOdd_Comment);
}

//-----------------------------------------------------------------------------
//EXIFHDR_ThumbEven_COM
//-----------------------------------------------------------------------------
void EXIFHDR_ThumbEven_COM(struct Exif_Header2 *hdr2) USING_0
{
     hdr2->EVEN_COM.Marker[0] = 0xff;
     hdr2->EVEN_COM.Marker[1] = 0xfe;

     hdr2->EVEN_COM.Length = (0x0002 + (USHORT)(Length_Text_ThumbEven_Comment & 0x0000ffff));

     EXIFHDR_Fill_Text(Text_Comment,hdr2->EVEN_COM.Content,Length_Text_ThumbEven_Comment);
}

//-----------------------------------------------------------------------------
//EXIFHDR_Fill_Text
//-----------------------------------------------------------------------------
void EXIFHDR_Fill_Text(PUCHAR Srctable,PUCHAR Desttable,ULONG i) USING_0
{
     UCHAR j;

     for (j = 0; j < i; j++)
     {
          *(Desttable + j) = *(Srctable + j);
     }
}

//-----------------------------------------------------------------------------
//EXIFHDR_DQT
//-----------------------------------------------------------------------------
void EXIFHDR_DQT(UCHAR qindex,struct HDR3 *table) USING_0
{
     UCHAR *pQTable;

     table->Marker[0] = 0xff;
     table->Marker[1] = 0xdb;

     table->Length = (USHORT) ((K_HDR3_SIZE - 2) & 0x0000ffff);

     table->PqTq0 = 0x00;

     table->PqTq1 = 0x01;

        pQTable = File_GetQTable(qindex);

        File_JpgConvertToZizag(pQTable,&table->Content0[0]);
     File_JpgConvertToZizag((pQTable+64),&table->Content1[0]);
}

//-----------------------------------------------------------------------------
//EXIFHDR_DHT
//-----------------------------------------------------------------------------
void EXIFHDR_DHT(struct HDR4 *table) USING_0
{
     UCHAR i;

     table->Marker[0] = 0xff;
     table->Marker[1] = 0xc4;

     table->Length = (USHORT) ((K_HDR4_SIZE - 2) & 0x0000ffff);

     table->TcTh0 = 0x00;   //YDC
     table->TcTh1 = 0x10;   //YAC
     table->TcTh2 = 0x01;   //UVDC
     table->TcTh3 = 0x11;   //UVAC

     for (i = 0; i < 28; i++)
     {
          table->Content0[i] = DHT_YDC[i];
          table->Content2[i] = DHT_UVDC[i];
     }

     for (i = 0; i < 178; i++)
     {
          table->Content1[i] = DHT_YAC[i];
          table->Content3[i] = DHT_UVAC[i];
     }
}

//-----------------------------------------------------------------------------
//EXIFHDR_SOF
//-----------------------------------------------------------------------------
void EXIFHDR_SOF(struct HDR2 *softable,USHORT width,USHORT height) USING_0
{
     UCHAR i;

     softable->Marker[0] = 0xff;
     softable->Marker[1] = 0xc0;

     softable->Length = 0x0011;

     for (i = 0; i < 15; i++)
     {
          softable->Content[i] = SOFT[i];
     }

     if (G_Image_SrcDataType == K_File_DataType_YUV411)
     {
                softable->Content[7] = 0x22;
     }
     else
     {
                softable->Content[7] = 0x21;
     }

        softable->Content[1] = (UCHAR) ((height & 0xff00) >> 8);
        softable->Content[2] = (UCHAR) (height & 0x00ff);
        softable->Content[3] = (UCHAR) ((width & 0xff00) >> 8);
        softable->Content[4] = (UCHAR) (width & 0x00ff);
}

//-----------------------------------------------------------------------------
//EXIFHDR_SOS
//-----------------------------------------------------------------------------
void EXIFHDR_SOS(struct HDR5 *sostable) USING_0
{
     UCHAR i;

     sostable->Marker[0] = 0xff;
     sostable->Marker[1] = 0xda;

     sostable->Length = 0x000c;

     for (i = 0; i < 10; i++)
     {
          sostable->Content[i] = SOST[i];
     }
}

//-----------------------------------------------------------------------------
//EXIFHDR_Parsing_ExifFile
//-----------------------------------------------------------------------------
//patch3.2@ada@0401 For EXIF
UCHAR EXIFHDR_Parsing_ExifFile(ULONG DramAddr,BIT ShowThumb,UCHAR *DateTime,struct Exif_Decompress_Parameter *ImagePara,struct Exif_Decompress_Parameter *ThumbPara) USING_0
{
     UCHAR sts = TRUE;

     Extract_Finished = 0;
     Extract_Thumbnail = 0;
     ByteOrder = 0;
     ByteOrderOffset = 0;
     IFD_ThumbnaiFrameOffset = 0;
     IFD_ThumbnaiFrameLength = 0;
     IFD_Number = 0;
     Tiff_ID = 0;
     Tiff_IFDOffset = 0;
     NextIFDOffset = 0;
     IFD_DateTime_Offset = 0;
     Jpeg_Exif_Format = 0;
     HeaderLength = 0;
     ExifTmpDramAddr = 0;
     Parsing_Marker = 0;
     HeaderLength = 0;
     APP0Length = 0;
     APP1Length = 0;
     APPnLength = 0;
     ThumbAPPnLength = 0;
     TotalThumbAPPnLength = 0;
     TotalAPPnLength = 0;
     COMLength = 0;
     DQTLength = 0;
     DHTLength = 0;
     SOFLength = 0;
     SOSLength = 0;
     DRILength = 0;

     while ((!Extract_Finished) && (sts == TRUE))
     {
          ExifTmpDramAddr = (DramAddr + (HeaderLength >> 1));

          if (HeaderLength & 0x00000001)
          {
               SDRAM_Dram2Sram(ExifTmpDramAddr,G_ucDataBuffer,8);
               Parsing_Marker = G_ucStorData[2];
          }
          else
          {
               SDRAM_Dram2Sram(ExifTmpDramAddr,G_ucDataBuffer,8);
               Parsing_Marker = G_ucStorData[1];
          }

          switch (Parsing_Marker)
          {
               case K_SOI_MARKER:   //Check SOI
                    //printf("SOI is found!\n");
                    sts = EXIFHDR_Parsing_SOI();
                    break;

               case K_APP0_MARKER:   //Check APP0
                    //printf("APP0 is found!\n");
                    sts = EXIFHDR_Parsing_APP0(DramAddr,ShowThumb);
                    break;

               case K_APP1_MARKER:   //Check APP1
                    //printf("APP1 is found!\n");
                    sts = EXIFHDR_Parsing_APP1(DramAddr,ShowThumb,DateTime);
                    break;

               case K_APP2_MARKER:   //Check APPn
               case K_APP3_MARKER:
               case K_APP4_MARKER:
               case K_APP5_MARKER:
               case K_APP6_MARKER:
               case K_APP7_MARKER:
               case K_APP8_MARKER:
               case K_APP9_MARKER:
               case K_APP10_MARKER:
               case K_APP11_MARKER:
               case K_APP12_MARKER:
               case K_APP13_MARKER:
               case K_APP14_MARKER:
               case K_APP15_MARKER:
                    //printf("APPn is found!\n");
                    sts = EXIFHDR_Parsing_APPn();
                    break;

               case K_DQT_MARKER:   //Check DQT
                    //printf("DQT is found!\n");
                    //version4.0@ada@0513 for EXIF
                    //sts = EXIFHDR_Parsing_DQT(ShowThumb);
                    sts = EXIFHDR_Parsing_DQT();
                    break;

               case K_DHT_MARKER:   //Check DHT
                    //printf("DHT is found!\n");
                    sts = EXIFHDR_Parsing_DHT();
                    break;

               case K_SOF_MARKER:   //Check SOF
                    //printf("SOF is found!\n");
                    sts = EXIFHDR_Parsing_SOF(ThumbPara,ImagePara);
                    break;

               case K_SOS_MARKER:   //Check SOS
                    //printf("SOS is found!\n");

				//patch4.5@ada@Fix EXIF bug begin
                    sts = EXIFHDR_Parsing_SOS(DramAddr,ShowThumb,ThumbPara,ImagePara);
                    //sts = EXIFHDR_Parsing_SOS(DramAddr,ThumbPara,ImagePara);
				//patch4.5@ada@Fix EXIF bug end

                    break;

               case K_EOI_MARKER:   //Check EOI
                    //printf("EOI is found!\n");
                    sts = EXIFHDR_Parsing_EOI(DramAddr,ShowThumb);
                    break;

               case K_COM_MARKER:   //Check COM
                    //printf("COM is found!\n");
                    sts = EXIFHDR_Parsing_COM();
                    break;

               case K_DRI_MARKER:   //Check DRI
                    //printf("DRI is found!\n");
                    sts = EXIFHDR_Parsing_DRI();
                    break;

               default:   //Other marker
                    //printf("Unknown marker field is found!\n");
                    Jpeg_Exif_Format = 0;
                    Extract_Finished = 1;
                    sts = FALSE;
                    break;
          }
     }

     return sts;
}

//-----------------------------------------------------------------------------
//EXIFHDR_Parsing_SOI
//-----------------------------------------------------------------------------
//patch3.2@ada@0401 For EXIF
UCHAR EXIFHDR_Parsing_SOI(void) USING_0
{
     UCHAR sts = TRUE;

     if (Jpeg_Exif_Format == K_EXIF_IMAGE_FORMAT)     //EXIF file format
     {
     	//richie@si0419
////printf("HeaderLength=%lx\n",HeaderLength);
	  G_ulExifThumbAddr = HeaderLength;

	  Extract_Thumbnail++;
     }
     else
     {
          Extract_Thumbnail = 0;
     }

     HeaderLength += 2;

⌨️ 快捷键说明

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