📄 jpgapi.c
字号:
if(RGBSize > MAX_RGB_WIDTH*MAX_RGB_HEIGHT*2){
RETAILMSG(1, (TEXT("API :: RGB width and height is too big\r\n")));
return NULL;
}
hJpegDrv = DeviceIoControl(openHandle, IOCTL_JPG_GET_RGBBUF, NULL, 0, &addr_rgb, sizeof(addr_rgb), NULL, NULL);
if(hJpegDrv == INVALID_HANDLE_VALUE){
RETAILMSG(1, (TEXT("API :: IOCTL_JPG_GET_RGBBUF failed\r\n")));
return NULL;
}
printD("addr_rgb : 0x%x\n", addr_rgb);
return addr_rgb;
}
/*----------------------------------------------------------------------------
*Function: SsbSipJPEGGetRGBPhyBuf
*Parameters: *openHandle : openhandle from SsbSipJPEGEncodeInit
*Return Value: True/False
*Implementation Notes: Deinitialize JPEG Encoder Device Driver
-----------------------------------------------------------------------------*/
void *SsbSipJPEGGetRGBPhyBuf(void *openHandle, INT32 width, INT32 height)
{
HANDLE hJpegDrv = INVALID_HANDLE_VALUE;
char *phy_addr_rgb;
INT32 RGBSize;
RGBSize = width*height*2;
if(RGBSize > MAX_RGB_WIDTH*MAX_RGB_HEIGHT*2){
RETAILMSG(1, (TEXT("API :: RGB width and height is too big\r\n")));
return NULL;
}
hJpegDrv = DeviceIoControl(openHandle, IOCTL_JPG_GET_PHY_RGBBUF, NULL, 0, &phy_addr_rgb, sizeof(phy_addr_rgb), NULL, NULL);
if(hJpegDrv == INVALID_HANDLE_VALUE){
RETAILMSG(1, (TEXT("API :: IOCTL_JPG_GET_PHY_RGBBUF failed\r\n")));
return NULL;
}
printD("phy_addr_rgb : 0x%x\n", phy_addr_rgb);
return phy_addr_rgb;
}
/*----------------------------------------------------------------------------
*Function: makeExifFile
*Parameters: *jCtx : Exif file information & thumbnail data
*ExifOut : result buffer of Exif file
*totalLen : the length of Exif file
*Return Value:
*Implementation Notes: make Exif file
-----------------------------------------------------------------------------*/
static JPEG_ERRORTYPE makeExifFile(char *ExifOut, UINT *totalLen)
{
UCHAR *ExifInitialCount;
UCHAR *tempExif = ExifOut;
UINT ExifSize;
UINT santemp;
UCHAR * startoftiff;
UCHAR * IFD1OffsetAddress;
UCHAR APP1Marker[2]= {0xff,0xe1};
UCHAR ExifLen[4]={0};
UCHAR Nentries[2]={8,0};
UCHAR SubIFDNentries[2]={18,0};
UCHAR IFD1Nentries[2]={6,0};
UCHAR EndOfEntry[4]={0};
//VARIABLES FOR THE MAKE OF THE CAMERA
UCHAR maketag[2]={0xf,0x1};
UCHAR makeformat[2]={0x2,0x0};
UCHAR Ncomponent[4]={32,0x0,0x0,0x0};
char make[32];
UCHAR makeoffchar[4];
UCHAR * offset;
//VARIABLES FOR THE MODEL OF THE CAMERA
UCHAR modeltag[2]={0x10,0x1};
UCHAR modelformat[2]={0x2,0x0};
UCHAR NcomponentModel[4]={32,0x0,0x0,0x0};
char model[32];
UCHAR modeloffchar[4];
//VARIABLES FOR THE ORIENTATION OF THE CAMERA
UCHAR orientationtag[2]={0x12,0x1};
UCHAR orientationformat[2]={0x3,0x0};
UCHAR NcomponentOrientation[4]={0x1,0x0,0x0,0x0};
UINT Orientation[1];
UCHAR Orient[4] = {0};
//VARIABLES FOR THE JPEG PROCESS
UCHAR Processtag[2]={0x00,0x02};
UCHAR Processformat[2]={0x3,0x0};
UCHAR NcomponentProcess[4]={0x1,0x0,0x0,0x0};
UINT Process[1];
UCHAR Proc[4] = {0};
//VARIABLES FOR THE X-RESOLUTION OF THE IMAGE
UCHAR XResolutiontag[2]={0x1A,0x1};
UCHAR XResolutionformat[2]={0x5,0x0};
UCHAR NcomponentXResolution[4]={0x1,0x0,0x0,0x0};
UINT XResolutionNum[1];//={0x00000048};
UINT XResolutionDen[1];//={0x00000001};
UCHAR XResolutionoffchar[4];
UCHAR XResolutionNumChar[4];
UCHAR XResolutionDenChar[4];
//VARIABLES FOR THE Y-RESOLUTION OF THE IMAGE
UCHAR YResolutiontag[2]={0x1B,0x1};
UCHAR YResolutionformat[2]={0x5,0x0};
UCHAR NcomponentYResolution[4]={0x1,0x0,0x0,0x0};
UINT YResolutionNum[1];//={0x00000048};
UINT YResolutionDen[1];//={0x00000001};
UCHAR YResolutionoffchar[4];
UCHAR YResolutionNumChar[4];
UCHAR YResolutionDenChar[4];
//VARIABLES FOR THE RESOLUTION UNIT OF THE CAMERA
UCHAR RUnittag[2]={0x28,0x1};
UCHAR RUnitformat[2]={0x3,0x0};
UCHAR NcomponentRUnit[4]={0x1,0x0,0x0,0x0};
UINT RUnit[1];
UCHAR RUnitChar[4] = {0};
//VARIABLES FOR THE VERSION NO OF THE SOFTWARE
UCHAR Versiontag[2]={0x31,0x1};
UCHAR Versionformat[2]={0x2,0x0};
UCHAR NcomponentVersion[4]={32,0x0,0x0,0x0};
char Version[32];//="version 1.2";
UCHAR Versionoffchar[4];
//VARIABLES FOR THE DATE/TIME
UCHAR DateTimetag[2]={0x32,0x1};
UCHAR DateTimeformat[2]={0x2,0x0};
UCHAR NcomponentDateTime[4]={20,0,0,0};
UCHAR DateTime[32];//="2006:6:09 15:17:32";
char DateTimeClose[1]={0};
UCHAR DateTimeoffchar[4];
//VARIABLES FOR THE COPYRIGHT
UCHAR CopyRighttag[2]={0x98,0x82};
UCHAR CopyRightformat[2]={0x2,0x0};
UCHAR NcomponentCopyRight[4]={32,0x0,0x0,0x0};
char CopyRight[32];
UCHAR CopyRightoffchar[4];
//VARIABLES FOR THE OFFSET TO SUBIFD
UCHAR SubIFDOffsettag[2]={0x69,0x87};
UCHAR SubIFDOffsetformat[2]={0x4,0x0};
UCHAR NcomponentSubIFDOffset[4]={0x1,0x0,0x0,0x0};
UCHAR SubIFDOffsetChar[4] = {0};
//VARIABLES FOR THE EXPOSURE TIME
UCHAR ExposureTimetag[2]={0x9A,0x82};
UCHAR ExposureTimeformat[2]={0x5,0x0};
UCHAR NcomponentExposureTime[4]={0x1,0x0,0x0,0x0};
UINT ExposureTimeNum[1];
UINT ExposureTimeDen[1];
UCHAR ExposureTimeoffchar[4];
UCHAR ExposureTimeNumChar[4];
UCHAR ExposureTimeDenChar[4];
//VARIABLES FOR THE FNUMBER
UCHAR FNumbertag[2]={0x9D,0x82};
UCHAR FNumberformat[2]={0x5,0x0};
UCHAR NcomponentFNumber[4]={0x1,0x0,0x0,0x0};
UINT FNumberNum[1];
UINT FNumberDen[1];
UCHAR FNumberoffchar[4];
UCHAR FNumberNumChar[4];
UCHAR FNumberDenChar[4];
//VARIABLES FOR THE EXPOSURE PROGRAM OF THE CAMERA
UCHAR ExposureProgramtag[2]={0x22,0x88};
UCHAR ExposureProgramformat[2]={0x3,0x0};
UCHAR NcomponentExposureProgram[4]={0x1,0x0,0x0,0x0};
UINT ExposureProgram[1];
UCHAR ExposureProgramChar[4] = {0};
//VARIABLES FOR THE ISO SPEED RATINGS OF THE CAMERA
UCHAR ISOSpeedRatingstag[2]={0x27,0x88};
UCHAR ISOSpeedRatingsformat[2]={0x3,0x0};
UCHAR NcomponentISOSpeedRatings[4]={0x2,0x0,0x0,0x0};
unsigned short ISOSpeedRatings[2];
UCHAR ISOSpeedRatingsChar[4] = {0};
//VARIABLES FOR THE BRIGHTNESS OF THE IMAGE
UCHAR Brightnesstag[2]={0x03,0x92};
UCHAR Brightnessformat[2]={0xA,0x0};
UCHAR NcomponentBrightness[4]={0x1,0x0,0x0,0x0};
int BrightnessNum[1];
int BrightnessDen[1];
UCHAR Brightnessoffchar[4];
UCHAR BrightnessNumChar[4];
UCHAR BrightnessDenChar[4];
//VARIABLES FOR THE EXPOSURE Bias
UCHAR ExposureBiastag[2]={0x04,0x92};
UCHAR ExposureBiasformat[2]={0xA,0x0};
UCHAR NcomponentExposureBias[4]={0x1,0x0,0x0,0x0};
int ExposureBiasNum[1];//={-8};
int ExposureBiasDen[1];//={1};
UCHAR ExposureBiasoffchar[4];
UCHAR ExposureBiasNumChar[4];
UCHAR ExposureBiasDenChar[4];
//VARIABLES FOR THE SUBJECT DISTANCE OF THE IMAGE
UCHAR SubjectDistancetag[2]={0x06,0x92};
UCHAR SubjectDistanceformat[2]={0xA,0x0};
UCHAR NcomponentSubjectDistance[4]={0x1,0x0,0x0,0x0};
int SubjectDistanceNum[1];
int SubjectDistanceDen[1];
UCHAR SubjectDistanceoffchar[4];
UCHAR SubjectDistanceNumChar[4];
UCHAR SubjectDistanceDenChar[4];
//VARIABLES FOR THE METERING MODE
UCHAR MeteringModetag[2]={0x07,0x92};
UCHAR MeteringModeformat[2]={0x3,0x0};
UCHAR NcomponentMeteringMode[4]={0x1,0x0,0x0,0x0};
UINT MeteringMode[1];
UCHAR MeteringModeChar[4] = {0};
//VARIABLES FOR THE FLASH
UCHAR Flashtag[2]={0x09,0x92};
UCHAR Flashformat[2]={0x3,0x0};
UCHAR NcomponentFlash[4]={0x1,0x0,0x0,0x0};
UINT Flash[1]={1};
UCHAR FlashChar[4] = {0};
//VARIABLES FOR THE FOCAL LENGTH
UCHAR FocalLengthtag[2]={0x0A,0x92};
UCHAR FocalLengthformat[2]={0x5,0x0};
UCHAR NcomponentFocalLength[4]={0x1,0x0,0x0,0x0};
UINT FocalLengthNum[1];
UINT FocalLengthDen[1];
UCHAR FocalLengthoffchar[4];
UCHAR FocalLengthNumChar[4];
UCHAR FocalLengthDenChar[4];
//VARIABLES FOR THE ISO WIDTH OF THE MAIN IMAGE
UCHAR Widthtag[2]={0x02,0xA0};
UCHAR Widthformat[2]={0x3,0x0};
UCHAR NcomponentWidth[4]={0x1,0x0,0x0,0x0};
UINT Width[1];
UCHAR WidthChar[4] = {0};
//VARIABLES FOR THE ISO HEIGHT OF THE MAIN IMAGE
UCHAR Heighttag[2]={0x03,0xA0};
UCHAR Heightformat[2]={0x3,0x0};
UCHAR NcomponentHeight[4]={0x1,0x0,0x0,0x0};
UINT Height[1];
UCHAR HeightChar[4] = {0};
//VARIABLES FOR THE COLORSPACE
UCHAR ColorSpacetag[2]={0x01,0xA0};
//char ColorSpacetag[2]={0x54,0x56};
UCHAR ColorSpaceformat[2]={0x3,0x0};
UCHAR NcomponentColorSpace[4]={0x1,0x0,0x0,0x0};
UINT ColorSpace[1];//={1};
UCHAR ColorSpaceChar[4] = {0};
//VARIABLES FOR THE FocalPlaneXResolution
UCHAR FocalPlaneXResolutiontag[2]={0x0E,0xA2};
UCHAR FocalPlaneXResolutionformat[2]={0x5,0x0};
UCHAR NcomponentFocalPlaneXResolution[4]={0x1,0x0,0x0,0x0};
UINT FocalPlaneXResolutionNum[1];
UINT FocalPlaneXResolutionDen[1];
UCHAR FocalPlaneXResolutionoffchar[4];
UCHAR FocalPlaneXResolutionNumChar[4];
UCHAR FocalPlaneXResolutionDenChar[4];
//VARIABLES FOR THE FocalPlaneYResolution
UCHAR FocalPlaneYResolutiontag[2]={0x0F,0xA2};
UCHAR FocalPlaneYResolutionformat[2]={0x5,0x0};
UCHAR NcomponentFocalPlaneYResolution[4]={0x1,0x0,0x0,0x0};
UINT FocalPlaneYResolutionNum[1];
UINT FocalPlaneYResolutionDen[1];
UCHAR FocalPlaneYResolutionoffchar[4];
UCHAR FocalPlaneYResolutionNumChar[4];
UCHAR FocalPlaneYResolutionDenChar[4];
//VARIABLES FOR THE FocalPlaneResolutionUnit
UCHAR FocalPlaneResolutionUnittag[2]={0x10,0xA2};
UCHAR FocalPlaneResolutionUnitformat[2]={0x3,0x0};
UCHAR NcomponentFocalPlaneResolutionUnit[4]={0x1,0x0,0x0,0x0};
UINT FocalPlaneResolutionUnit[1];
UCHAR FocalPlaneResolutionUnitChar[4] = {0};
//VARIABLES FOR THE WHITE BALANCE PROGRAM OF THE CAMERA
UCHAR WhiteBalancetag[2]={0x07,0x00};
UCHAR WhiteBalanceformat[2]={0x3,0x0};
UCHAR NcomponentWhiteBalance[4]={0x1,0x0,0x0,0x0};
UINT WhiteBalance[1];
UCHAR WhiteBalanceChar[4] = {0};
//VARIABLES FOR THE USER COMMENTS
UCHAR UserCommentstag[2]={0x86,0x92};
UCHAR UserCommentsformat[2]={0x7,0x0};
UCHAR NcomponentUserComments[4]={150,0x0,0x0,0x0};
UCHAR UserComments[150];
UCHAR UserCommentsoffchar[4];
//VARIABLES FOR THE COMPRESSION TYPE
UCHAR Compressiontag[2]={0x03,0x01};
UCHAR Compressionformat[2]={0x3,0x0};
UCHAR NcomponentCompression[4]={0x1,0x0,0x0,0x0};
UINT Compression[1]={6};
UCHAR CompressionChar[4] = {0};
//VARIABLES FOR THE JpegIFOffset
UCHAR JpegIFOffsettag[2]={0x01,0x02};
UCHAR JpegIFOffsetformat[2]={0x4,0x0};
UCHAR NcomponentJpegIFOffset[4]={0x1,0x0,0x0,0x0};
UCHAR JpegIFOffsetChar[4] = {0};
//VARIABLES FOR THE JpegIFByteCount
UCHAR JpegIFByteCounttag[2]={0x02,0x02};
UCHAR JpegIFByteCountformat[2]={0x4,0x0};
UCHAR NcomponentJpegIFByteCount[4]={0x1,0x0,0x0,0x0};
UCHAR JpegIFByteCountChar[4] = {0};
//END OF THE VARIABLES
printD("makeExif\n");
ExifInitialCount=tempExif;
//for APP1 Marker(2 byte) and length(2 byte)
tempExif += 4;
//write an exif header
memcpy (tempExif, ExifHeader, 6);
tempExif += 6 ;
//write a tiff header
memcpy (tempExif, TIFFHeader, 8);
startoftiff=tempExif;
tempExif += 8 ;
//write no of entries in 1d0
memcpy (tempExif, Nentries, 2);
tempExif += 2 ;
///////////////ENTRY NO 1 :MAKE OF CAMERA////////////////////////
//write make tag
memcpy (tempExif, maketag, 2);
tempExif += 2 ;
//write format
memcpy (tempExif, makeformat, 2);
tempExif += 2 ;
//write no of component
memcpy (tempExif, Ncomponent, 4);
tempExif += 4 ;
//write make
//strcpy(make,tpJEInfo->Make);
memcpy(make, jCtx->ExifInfo->Make,32);
offset =(char*) 0x200;
santemp=(int)(offset);
makeoffchar[0]=(unsigned char)santemp;
makeoffchar[1]=(unsigned char)(santemp>>8);
makeoffchar[2]=(unsigned char)(santemp>>16);
makeoffchar[3]=(unsigned char)(santemp>>24);
//write the make offset into the bitstream
memcpy (tempExif, makeoffchar, 4);
tempExif += 4 ;
memcpy (startoftiff+santemp, make, 32);
offset+=32;
///////////////ENTRY NO 2 :MODEL OF CAMERA////////////////////////
//write model tag
memcpy (tempExif, modeltag, 2);
tempExif += 2 ;
//write format
memcpy (tempExif, modelformat, 2);
tempExif += 2 ;
//write no of component
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -