📄 exifhdr.c
字号:
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 + -