亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? exif.c

?? dm270 source code
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*-----------------------------------------------------------------------------\
@ModuleName  ::	EXIF.c
 
@Description ::	EXIF 2.1 Wrapper for JPEG bitstream

	For more info on EXIF refer EXIF 2.1 specification

	Assumptions :

	EXIF Writer
	1. Image JPEG
	2. No thumbnail
	3. Support all Mandatory tags and few optional tags.
	4. Make provision to extend support for thumbnails, other optional tags.	
	5. Generates Big Endian Data

	EXIF Reader
	1. Parse all tags.
	2. Evaluate all mandatory tags and the few optional tags supported by EXIF writer.
	3. Make provision to extend evaluation for thumbnails, other optional tags.	
	4. Will parse both Big and Little Endian Exif Files 


@Copyright	 ::	Copyright 2001- Texas Instruments, Inc.

@History     ::
-------------------------------------------------------------------------------

	Dec.  26, 2001	Kedar C (kedarc@ti.com)	Start
		

\-----------------------------------------------------------------------------*/



/*-----------------------------------------------------------------------------\
@Modification	:: Added Thumbnail to EXIF Wrapper

	May.  23, 2002  Manoj Gopalakrishnan

\-------------------------------------------------------------------------------*/	


/* include files	*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h> 

#include <demo/exif.h>


/* global variables	*/	

/* size of each EXIF data format type	*/
int EXIFTypeSize[] = {
	0, 1, 1, 2, 4, 8, 
	   0, 1, 0, 4, 8
};

/* Module Routines	*/

/*-----------------------------------------------------------------------------\
@RoutineName ::	EXIFInitParams

@Description ::
	Init EXIF Configuration structure

@Parameters  ::
	EXIFParams *prmExif	::	The EXIF Configuration structure
	Uint8 *jpegAddr		::	The JPEG Image Address
	Uint32 size			::	The size of JPEG Image

@Return		 ::
	E_PASS,		success
	E_DEVICE,	failure
\-----------------------------------------------------------------------------*/
STATUS EXIFInitParams( EXIFParams *prmExif, Uint8 *jpegAddr, Uint32 size,Uint8 *thumbAddr, Uint32 thumbSize) {
	prmExif->bswap			= FALSE;					/* by default big Endian code is generated	*/

	prmExif->make			= (Uint8*)malloc( strlen(EXIF_MAKE) + 1 );
	strcpy((char*)prmExif->make, EXIF_MAKE);

	prmExif->model			= (Uint8*)malloc( strlen(EXIF_MODEL) + 1 );
	strcpy((char*)prmExif->model, EXIF_MODEL);

	prmExif->copyright		= (Uint8*)malloc( strlen(EXIF_COPYRIGHT) + 1 );
	strcpy((char*)prmExif->copyright, EXIF_COPYRIGHT);

	prmExif->software		= (Uint8*)malloc( strlen(EXIF_SOFTWARE) + 1 );
	strcpy((char*)prmExif->software, EXIF_SOFTWARE);

	prmExif->XRes			= EXIF_XRES;					
	prmExif->YRes			= EXIF_YRES;					
	prmExif->ResUnit		= EXIF_RES_UNIT;
	prmExif->YCbCrPosition	= EXIF_YCrCb_POS;		
	prmExif->EXIFVersion	= EXIF_VERSION;			/*	'0210'	*/
	prmExif->CompConf		= EXIF_COMP_CONF;
	prmExif->ColorSpace		= EXIF_COLOR_SPACE;

	{	/* calculate height and width of the main image	*/
		Uint8 *ptr;	
		Uint16 word16;

		ptr=jpegAddr+2;
		word16=get_word16(ptr);
		while(     word16!=0xFFC0 && word16!=0xFFDA 
			   && (Uint32)(ptr-jpegAddr) < size && ( word16 & 0xFF00 )==0xFF00 
			
		) {
			ptr += (2+get_word16(ptr+2) );
			word16=get_word16(ptr);
		}
		if(word16==0xFFC0) {
			prmExif->PixXDim	= get_word16(ptr + 7);
			prmExif->PixYDim	= get_word16(ptr + 5);
		} else {
			prmExif->PixXDim	= 0;
			prmExif->PixYDim	= 0;
		}
	}

	prmExif->thumbPresent=TRUE;
	prmExif->thumbAddr=thumbAddr;
	prmExif->thumbSize=thumbSize;
	prmExif->IFD1OffsetField=0;
    prmExif->compression=6;
	prmExif->thumbDataOffsetField=0;

	return E_PASS;
}

/*-----------------------------------------------------------------------------\
@RoutineName ::	EXIFShowParams

@Description ::
	Displays EXIF Configuration structure on stdout

@Parameters  ::
	EXIFParams *prmExif	::	The EXIF Configuration structure

@Return		 ::
	E_PASS,		success
	E_DEVICE,	failure
\-----------------------------------------------------------------------------*/
STATUS EXIFShowParams( EXIFParams *prmExif) {
	printf("\n");
    printf("\nEXIF Parameters   :");
    printf("\n===================");

    printf("\nMake              : %s", prmExif->make );
    printf("\nModel             : %s", prmExif->model);
    printf("\nCopyright         : %s", prmExif->copyright);
    printf("\nSoftware          : %s", prmExif->software);
    printf("\nExif Version      : %c.%c", (char)(prmExif->EXIFVersion >> 16),	(char)(prmExif->EXIFVersion >> 8) );  
    printf("\nImage Width       : %d", prmExif->PixXDim);   
    printf("\nImage Height      : %d", prmExif->PixYDim);   
    printf("\nX Resolution      : %ld pixels/unit", prmExif->XRes);
    printf("\nY Resolution      : %ld pixels/unit", prmExif->YRes);
    printf("\nResolution Unit   : ");
    switch(prmExif->ResUnit) {
        case 2 :
            printf("inches");
            break;
        case 3 :
            printf("centimeters");
            break;
        default :
            printf("Unknown");
            break;
    }

    printf("\nYCbCr Positioning : ");
    switch(prmExif->YCbCrPosition) {
        case 1 :
            printf("center");
            break;
        case 2 :
            printf("co-site");
            break;
        default :
            printf("Unknown");
            break;
    }

    printf("\nColor Space       : ");
    switch(prmExif->ColorSpace) {
        case 1 :
            printf("sRGB");
            break;
        case 0xFFFF :
            printf("Uncalibrated");
            break;
        default :
            printf("Unknown");
            break;
    }

    printf("\nComponent Config  : %x %x %x %x", (Uint8)(prmExif->CompConf >> 24 ),
												(Uint8)(prmExif->CompConf >> 16 ),
												(Uint8)(prmExif->CompConf >> 8  ),
												(Uint8)(prmExif->CompConf )
												);    
    

    if(prmExif->thumbPresent){
		printf("\nThumbnail present" );
		printf("\nThumbnail offset from start of APP1 marker : %ld B",prmExif->thumbDataOffset+TIFF_HEADER_OFFSET);
		printf("\nThumbnail size : %ld B",prmExif->thumbSize);
    }else{
		printf("\nNo Thumbnail" );
    }
    
    return 1;
}

/*-----------------------------------------------------------------------------\
@RoutineName ::	EXIFFreeParams

@Description ::
	Free EXIF Configuration structure fields

@Parameters  ::
	EXIFParams *prmExif	::	The EXIF Configuration structure

@Return		 ::
	E_PASS,		success
	E_DEVICE,	failure
\-----------------------------------------------------------------------------*/
STATUS EXIFFreeParams( EXIFParams *prmExif) {
	if( prmExif->make != NULL )
		free( prmExif->make);
	if( prmExif->model != NULL )
		free( prmExif->model);
	if( prmExif->copyright != NULL )
		free( prmExif->copyright);
	if( prmExif->software != NULL )
		free( prmExif->software);
	return E_PASS;
}

/*-----------------------------------------------------------------------------\
@RoutineName ::	EXIFMakeHeader

@Description ::
	Creates the EXIF header based on the EXIF configuration structure

@Parameters  ::
	EXIFParams *prmExif	::	The EXIF Configuration structure
	Uint8 *exifHeader	::	The Address where the Header will stored	
	Uint32 *exifSize		::	The Size of the EXIF header

@Return		 ::
	E_PASS,		success
	E_DEVICE,	failure
\-----------------------------------------------------------------------------*/
STATUS EXIFMakeHeader( EXIFParams *prmExif, Uint8 *exifHeader, Uint32 *exifSize) {
	WordStream exif ;
	Uint32 app1_size_ptr;

	exif.addr = exifHeader;
	exif.ix	  = 0;	
	
	/* generate APP1 and TIFF header	*/
	/* APP1 Header	*/
	put_word16( &exif, EXIF_APP1_TAG );				/* 0xFFE1	*/
	app1_size_ptr = exif.ix;
	put_word16( &exif, 0 );							/* size, will be filled at the end	*/
	put_word32( &exif, MAKE_TAG('E','x','i','f'));	/*	'Exif'	*/
	put_word16( &exif, 0 );							/*	0x0000	*/
	
	/* TIFF Header	*/
	put_word16(&exif, ( 'M' << 8 ) + 'M' );			/* 'MM'	*/
	put_word16(&exif, 0x002a );						/* TIFF tag 0x002a	*/
	put_word32(&exif, 0x00000008 );					/* 0x00000008	*/


	/* generate IFD0 */
	EXIFMakeIFD0(prmExif, &exif );
	

	/* generate IFD EXIF */
	EXIFMakeIFDExif(prmExif, &exif );
 

	/* update the IFD1 offset field in IFD0 */
	{
		Uint32 temp;
		temp=exif.ix;
		exif.ix=prmExif->IFD1OffsetField;
		put_word32(&exif,temp-TIFF_HEADER_OFFSET);
		exif.ix=temp;
	}


    EXIFMakeIFD1(prmExif,&exif); 

	/* update the Thumbnail data offset field in IFD1 */
	{
		Uint32 temp;
		temp=exif.ix;
		exif.ix=prmExif->thumbDataOffsetField;
		put_word32(&exif,temp-TIFF_HEADER_OFFSET);
		prmExif->thumbDataOffset=temp-TIFF_HEADER_OFFSET;
		exif.ix=temp;
	}
	
	memcpy((exif.addr+exif.ix),prmExif->thumbAddr,prmExif->thumbSize);
	exif.ix+=prmExif->thumbSize;

	/* calculate APP1 size	*/
	{
		Uint32 size;

		size = exif.ix;
		exif.ix = app1_size_ptr;
		put_word16(&exif, size - 2);
		exif.ix = size;
	}

	*exifSize = exif.ix;

	return E_PASS;
}

/*-----------------------------------------------------------------------------\
@RoutineName ::	EXIFMakeIFD0

@Description ::
	Creates the EXIF IFD0 based on the EXIF configuration structure

@Parameters  ::
	EXIFParams *prmExif	::	The EXIF Configuration structure
	WordStream *exif	::	The EXIF Header data stream

@Return		 ::
	E_PASS,		success
	E_DEVICE,	failure
\-----------------------------------------------------------------------------*/
STATUS EXIFMakeIFD0(EXIFParams *prmExif, WordStream *exif ) {
	Uint16	tag_count;
	WordStream data;

	tag_count = 9;

	put_word16(exif, tag_count );

	/* point 'data' to IFD0 Value Area	*/
	data.addr = exif->addr + TIFF_HEADER_OFFSET;		/* Points to TIFF header	*/
	data.ix	  = 
				exif->ix				/* offset into data stream					*/
			+	tag_count*12			/* tag array size							*/
			-	TIFF_HEADER_OFFSET		/* offset of TIFF header from APP1 marker	*/
			+	4						/* skip over next IFD offset field			*/	
			;	


	/* Tag 1	*/
	ExifMakeTag(exif, EXIF_MAKE_TAG, EXIF_ASCII, strlen((char*)prmExif->make)+1, data.ix);
	put_str(&data, prmExif->make);

	/* Tag 2	*/
	ExifMakeTag(exif, EXIF_MODEL_TAG, EXIF_ASCII, strlen((char*)prmExif->model)+1, data.ix);
	put_str(&data, prmExif->model);
 
	/* Tag 3	*/
	ExifMakeTag(exif, EXIF_XRES_TAG, EXIF_RATIONAL, 1, data.ix);
	put_word32(&data,  prmExif->XRes);
	put_word32(&data,  1);

	/* Tag 4	*/
	ExifMakeTag(exif, EXIF_YRES_TAG, EXIF_RATIONAL, 1, data.ix);
	put_word32(&data,  prmExif->YRes);
	put_word32(&data,  1);

	/* Tag 5	*/
	ExifMakeTag(exif, EXIF_RES_UNIT_TAG, EXIF_SHORT, 1, prmExif->ResUnit << 16);

	/* Tag 6	*/
	ExifMakeTag(exif, EXIF_SOFTWARE_TAG, EXIF_ASCII, strlen((char*)prmExif->software)+1, data.ix);
	put_str(&data, prmExif->software);

	/* Tag 7	*/
	ExifMakeTag(exif, EXIF_YCBCR_POSITION_TAG, EXIF_SHORT, 1, prmExif->YCbCrPosition << 16);

	/* Tag 8	*/
	ExifMakeTag(exif, EXIF_COPYRIGHT_TAG, EXIF_ASCII, strlen((char*)prmExif->copyright)+1, data.ix);
	put_str(&data, prmExif->copyright);

	/* Tag 9	*/
	ExifMakeTag(exif, EXIF_EXIF_IFD_PTR_TAG, EXIF_LONG, 1, data.ix );

	/* store IFD1 offset to be filled later*/ //added by Manoj
	prmExif->IFD1OffsetField = exif->ix;
           
	/* put next IFD offset	*/
	put_word32(exif, 0);
	
	/* calculate offset into exif header	*/
	exif->ix = data.ix + TIFF_HEADER_OFFSET;
	
	return E_PASS;
}


/*-----------------------------------------------------------------------------\
@RoutineName ::	EXIFMakeIFDExif

@Description ::
	Creates the EXIF sub IFD ( EXIF specific IFD ) based on the EXIF configuration structure

@Parameters  ::
	EXIFParams *prmExif	::	The EXIF Configuration structure
	WordStream *exif	::	The EXIF Header data stream

@Return		 ::
	E_PASS,		success
	E_DEVICE,	failure
\-----------------------------------------------------------------------------*/
STATUS EXIFMakeIFDExif(EXIFParams *prmExif, WordStream *exif ) {
	Uint16	tag_count;
	WordStream data;

	tag_count = 5;

	put_word16(exif, tag_count );

	/* point 'data' to IFD0 Value Area	*/
	data.addr = exif->addr + TIFF_HEADER_OFFSET;		/* Points to TIFF header	*/
	data.ix	  = 
				exif->ix				/* offset into data stream					*/
			+	tag_count*12			/* tag array size							*/
			-	TIFF_HEADER_OFFSET		/* offset of TIFF header from APP1 marker	*/
			+	4						/* skip over next IFD offset field			*/	
			;	
	/* Tag 1	*/
	ExifMakeTag(exif, EXIF_EXIF_VERSION_TAG, EXIF_UNDEFINED, 4, prmExif->EXIFVersion);

	/* Tag 2	*/
	ExifMakeTag(exif, EXIF_COMP_CONF_TAG, EXIF_UNDEFINED, 4, prmExif->CompConf);
			

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久三级丝袜| 久草热8精品视频在线观看| 国产成人小视频| 久久久www免费人成精品| 精品一区二区三区在线观看| 日韩精品自拍偷拍| 国内精品伊人久久久久av影院| 久久人人爽人人爽| 国产成人精品亚洲午夜麻豆| 国产精品传媒视频| 欧美日韩高清不卡| 另类小说欧美激情| 久久久久综合网| 99久久精品一区二区| 樱花影视一区二区| 91精品国产综合久久精品麻豆| 久久精品国产第一区二区三区| 久久美女高清视频| 一本一本久久a久久精品综合麻豆| 亚洲综合在线第一页| 欧美电影影音先锋| 国产精品自拍一区| 亚洲自拍另类综合| 久久综合网色—综合色88| 波多野结衣在线一区| 视频一区视频二区在线观看| 欧美精品一区二区三区久久久| av日韩在线网站| 日韩电影在线观看网站| 久久久久久久免费视频了| 色婷婷久久99综合精品jk白丝| 日韩高清电影一区| 中文字幕一区二区在线观看| 在线播放视频一区| 成人激情小说乱人伦| 日韩国产精品久久久久久亚洲| 国产精品毛片大码女人| 日韩美女一区二区三区| 99久久精品国产导航| 老司机精品视频导航| 亚洲精品国产a| 国产日韩视频一区二区三区| 欧美私模裸体表演在线观看| 国产盗摄精品一区二区三区在线| 天堂成人免费av电影一区| 中文字幕精品一区二区精品绿巨人 | 欧美日韩日日摸| 成人免费高清视频| 久久9热精品视频| 亚洲观看高清完整版在线观看| 欧美国产国产综合| 日韩欧美aaaaaa| 欧美日韩视频在线一区二区| 91免费小视频| 成人av网在线| 国产mv日韩mv欧美| 国产一区欧美二区| 久久国产人妖系列| 日本欧美一区二区在线观看| 亚洲自拍都市欧美小说| 中文字幕日韩精品一区| 国产亚洲综合在线| wwwwxxxxx欧美| 欧美成人高清电影在线| 制服丝袜激情欧洲亚洲| 欧美视频精品在线观看| 欧美性大战xxxxx久久久| 99精品国产热久久91蜜凸| 成人精品视频一区二区三区尤物| 国内精品嫩模私拍在线| 久久99精品久久只有精品| 久久精品国产第一区二区三区| 日本视频中文字幕一区二区三区| 婷婷久久综合九色综合绿巨人| 亚洲无人区一区| 亚洲午夜精品在线| 亚洲成人免费在线观看| 亚洲高清免费观看| 日一区二区三区| 日韩国产欧美在线播放| 蜜桃视频一区二区三区在线观看| 日本美女一区二区三区| 麻豆精品视频在线观看视频| 麻豆精品久久精品色综合| 国内久久精品视频| 国产·精品毛片| kk眼镜猥琐国模调教系列一区二区| 成人精品国产免费网站| 色哦色哦哦色天天综合| 欧美日韩中文精品| 欧美喷水一区二区| 精品国产亚洲一区二区三区在线观看| 日韩欧美高清一区| 国产午夜久久久久| 中文字幕日韩欧美一区二区三区| 亚洲精品中文字幕在线观看| 香蕉成人伊视频在线观看| 免费成人av在线| 国产激情视频一区二区三区欧美| 不卡av电影在线播放| 欧美亚洲禁片免费| 精品国产乱码久久久久久影片| 中文字幕巨乱亚洲| 亚洲成va人在线观看| 国产一区二区三区四区在线观看 | 亚瑟在线精品视频| 久久草av在线| 不卡大黄网站免费看| 在线播放91灌醉迷j高跟美女| 日韩亚洲欧美中文三级| 国产精品第13页| 亚洲午夜电影在线| 国产美女在线观看一区| 欧美一a一片一级一片| 精品理论电影在线| 亚洲男人的天堂av| 精品一区二区三区在线播放视频| 成人免费观看男女羞羞视频| 欧美人与z0zoxxxx视频| 欧美激情在线观看视频免费| 一区二区三区四区亚洲| 国产主播一区二区三区| 91福利精品第一导航| 久久亚区不卡日本| 偷偷要91色婷婷| 成人伦理片在线| 欧美本精品男人aⅴ天堂| 亚洲精品国产第一综合99久久 | 日韩欧美亚洲国产另类| 欧美国产综合一区二区| 午夜欧美2019年伦理| 成人av小说网| 精品成人一区二区三区四区| **性色生活片久久毛片| 国产一区二区成人久久免费影院| 在线免费观看成人短视频| 中文字幕精品在线不卡| 久久91精品国产91久久小草| 欧美日韩一区精品| 亚洲特级片在线| 国产成人啪午夜精品网站男同| 91精品国产丝袜白色高跟鞋| 亚洲欧美日韩在线| 丁香天五香天堂综合| 精品国产一区a| 奇米色777欧美一区二区| 欧美色区777第一页| 亚洲欧美一区二区三区极速播放 | 国产精品三级在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 欧美精品色综合| 一区二区免费在线播放| 波多野结衣的一区二区三区| 久久这里都是精品| 国产呦精品一区二区三区网站| 欧美一卡二卡在线观看| 天堂蜜桃91精品| 欧美日韩精品一区二区三区四区| 亚洲视频网在线直播| 不卡一区二区三区四区| 久久精品亚洲精品国产欧美| 韩国午夜理伦三级不卡影院| 欧美电影免费提供在线观看| 视频一区在线播放| 欧美一区二区三区免费大片| 婷婷六月综合网| 3atv一区二区三区| 婷婷夜色潮精品综合在线| 欧美日韩国产乱码电影| 亚洲一二三四久久| 欧美日本乱大交xxxxx| 亚洲成av人影院在线观看网| 欧美久久久久中文字幕| 日本成人在线不卡视频| 欧美成人bangbros| 国产高清无密码一区二区三区| 国产日韩欧美高清| www.一区二区| 亚洲综合色成人| 91精品国产91久久久久久最新毛片| 日本一区中文字幕| 久久综合成人精品亚洲另类欧美| 国产福利电影一区二区三区| 国产精品人成在线观看免费| 99久久精品免费看| 一区二区三区欧美| 777欧美精品| 国产麻豆精品一区二区| 国产精品久线观看视频| 在线亚洲人成电影网站色www| 石原莉奈在线亚洲三区| 精品免费99久久| 白白色亚洲国产精品| 亚洲亚洲精品在线观看| 欧美成人精品1314www| 国产成人精品免费一区二区| 亚洲精选视频在线| 欧美电视剧在线看免费| 处破女av一区二区| 亚洲成人自拍网|