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

📄 format_canon.c

📁 Gqview,Linux下基于GTK+库写成的轻量级而能丰富的图像浏览程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
static ExifTextList CanonSet1ConSatSharp[] = {	{ 0,	"normal" },	{ 1,	"high" },	{ 65535,"low" },	EXIF_TEXT_LIST_END};static ExifTextList CanonSet1ISOSpeed[] = {/*	{ 0,	"not set/see EXIF tag" }, */	{ 15,	"auto" },	{ 16,	"50" },	{ 17,	"100" },	{ 18,	"200" },	{ 19,	"400" },	EXIF_TEXT_LIST_END};static ExifTextList CanonSet1MeteringMode[] = {	{ 0,	"default" },	{ 1,	"spot" },	{ 3,	"evaluative" },	{ 4,	"partial" },	{ 5,	"center-weighted" },	EXIF_TEXT_LIST_END};static ExifTextList CanonSet1FocusType[] = {	{ 0,	"manual" },	{ 1,	"auto" },	{ 2,	"auto" },	{ 3,	"macro" },	{ 7,	"infinity" },	{ 8,	"locked" },	EXIF_TEXT_LIST_END};static ExifTextList CanonSet1AutoFocusPoint[] = {	{ 0x2005,	"manual AF point selection" },	{ 0x3000,	"manual focus" },	{ 0x3001,	"auto" },	{ 0x3002,	"right" },	{ 0x3003,	"center" },	{ 0x3004,	"left" },	{ 0x4001,	"auto AF point selection" },	EXIF_TEXT_LIST_END};static ExifTextList CanonSet1ExposureMode[] = {	{ 0,	"auto" },	{ 1,	"program" },	{ 2,	"Tv priority" },	{ 3,	"Av priority" },	{ 4,	"manual" },	{ 5,	"A-DEP" },	EXIF_TEXT_LIST_END};static ExifTextList CanonSet1FlashFired[] = {	{ 0,	"no" },	{ 1,	"yes" },	EXIF_TEXT_LIST_END};static ExifTextList CanonSet1FocusCont[] = {	{ 0,	"no (single)" },	{ 1,	"yes" },	EXIF_TEXT_LIST_END};static ExifMarker CanonSet1[] = {/* 0 is length of array in bytes (2 x array size) */{ 1,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.MacroMode",	"Macro mode",		CanonSet1MacroMode },{ 2,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.SelfTimer",	"Self timer (10ths of second)", NULL },{ 3,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.Quality",	"Quality",		CanonSet1Quality },{ 4,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.FlashMode",	"Flash mode",		CanonSet1FlashMode },{ 5,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.DriveMode",	"Drive mode",		CanonSet1DriveMode },{ 7,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.FocusMode",	"Focus mode",		CanonSet1FocusMode },{ 10,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.ImageSize",	"Image size",		CanonSet1ImageSize },{ 11,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.ShootingMode","Shooting mode",	CanonSet1ShootingMode }, { 11,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "ExposureProgram",	"ExposureProgram",	CanonSet1ShootingMode },{ 12,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.DigitalZoom",	"Digital zoom",		CanonSet1DigitalZoom },{ 13,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.Contrast",	"Contrast",		CanonSet1ConSatSharp },{ 14,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.Saturation",	"Saturation",		CanonSet1ConSatSharp },{ 15,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.Sharpness",	"Sharpness",		CanonSet1ConSatSharp },{ 16,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.ISOSpeed",	"ISO speed",		CanonSet1ISOSpeed }, { 16,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "ISOSpeedRatings",	"ISO speed",		CanonSet1ISOSpeed },{ 17,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.MeteringMode","Metering mode",	CanonSet1MeteringMode },{ 18,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.FocusType",	"Focus type",		CanonSet1FocusType },{ 19,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.AutoFocus",	"AutoFocus point",	CanonSet1AutoFocusPoint },{ 20,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.ExposureMode","Exposure mode",	CanonSet1ExposureMode }, { 20,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "ExposureMode",		"Exposure mode",	CanonSet1ExposureMode },{ 23,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.FocalLengthLong","Long focal length", NULL },{ 24,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.FocalLengthShort","Short focal length", NULL },{ 25,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.FocalLengthUnits","Focal units per mm", NULL },{ 28,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.FlashFired",	"Flash fired",		CanonSet1FlashFired },{ 29,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.FlashDetails","Flash details",	NULL },{ 32,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.ContinuousFocus","Continuous focus",	CanonSet1FocusCont },EXIF_MARKER_LIST_END};static ExifTextList CanonSet2WhiteBalance[] = {	{ 0,	"auto" },	{ 1,	"sunny" },	{ 2,	"cloudy" },	{ 3,	"tungsten" },	{ 4,	"fluorescent" },	{ 5,	"flash" },	{ 6,	"custom" },	{ 7,	"black and white" },	{ 8,	"shade" },	{ 9,	"manual" },	{ 14,	"daylight fluorescent" },	{ 17,	"underwater" },	EXIF_TEXT_LIST_END};static ExifTextList CanonSet2FlashBias[] = {	{ 0x0000,	"0" },	{ 0x000c,	"0.33" },	{ 0x0010,	"0.5" },	{ 0x0014,	"0.67" },	{ 0x0020,	"1" },	{ 0x002c,	"1.33" },	{ 0x0030,	"1.5" },	{ 0x0034,	"1.67" },	{ 0x0040,	"2" },	{ 0xffc0,	"-2" },	{ 0xffcc,	"-1.67" },	{ 0xffd0,	"-1.5" },	{ 0xffd4,	"-1.33" },	{ 0xffe0,	"-1" },	{ 0xffec,	"-0.67" },	{ 0xfff0,	"-0.5" },	{ 0xfff4,	"-0.33" },	EXIF_TEXT_LIST_END};static ExifMarker CanonSet2[] = {/* 0 is length of array in bytes (2 x array size) */{ 7,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.WhiteBalance","White balance",	CanonSet2WhiteBalance }, { 7,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "LightSource",		"White balance",	CanonSet2WhiteBalance },{ 9,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.SequenceNumber","Sequence number",	NULL },{ 15,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.FlashBias",	"Flash bias",		CanonSet2FlashBias },/* distance needs more than just this (metric) value */{ 19,	EXIF_FORMAT_SHORT_UNSIGNED, 1, "MkN.Canon.SubjectDistance",	"Subject Distance", NULL },EXIF_MARKER_LIST_END};#if 0static ExifTextList CanonCustomEnable[] = {	{ 0,	"off" },	{ 1,	"on" },	EXIF_TEXT_LIST_END};static ExifTextList CanonCustomEnableInvert[] = {	{ 0,	"on" },	{ 1,	"off" },	EXIF_TEXT_LIST_END};static ExifTextList CanonCustomExposureLevel[] = {	{ 0,	"1/2 stop" },	{ 1,	"1/3 stop" },	EXIF_TEXT_LIST_END};static ExifTextList CanonCustomAVShutterSpeed[] = {	{ 0,	"auto" },	{ 1,	"1/200 (fixed)" },	EXIF_TEXT_LIST_END};static ExifTextList CanonCustomShutterCurtainSync[] = {	{ 0,	"1st" },	{ 1,	"2nd" },	EXIF_TEXT_LIST_END};static ExifMarker CanonCustom[] = {{ 1,	EXIF_FORMAT_SHORT_UNSIGNED, 1,	"MkN.Canon.NoiseReduction", "Noise reduction",	CanonCustomEnable },/*{ 2,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.BtnFuncShutter",						"Shutter/Auto exposure button function",CanonCustomBTNShutter }, */{ 3,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.MirrorLockup", "Mirror lockup",	CanonCustomEnable },{ 4,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.TvAvExposureLevel",							"Tv/Av and exposure level",	CanonCustomExposureLevel },{ 5,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.AFAssistLight", "AF assist light",	CanonCustomEnableInvert },{ 6,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.AvShutterSpeed",							"Shutter speed in Av mode",	CanonCustomAVShutterSpeed },/*{ 7,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.AutoBracket",				"Auto-Exposure bracketting sequence/auto cancellation",	CanonCustom }, */{ 8,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.ShutterSync", "Shutter sync",	CanonCustomShutterCurtainSync },/* { 9,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.BtnFuncAF",	"AF button function",	CanonCustom }, */{ 10,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.FillFlashReduction",							"Fill flash auto reduction",	CanonCustomEnableInvert },/*{ 11,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.BtnFuncMenu",							"Menu button function",		CanonCustom }, *//*{ 12,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.BtnFuncSet", "Set button function",	CanonCustom }, */{ 13,	EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.SensorCleaning", "Sensor cleaning",	CanonCustomEnable },EXIF_MARKER_LIST_END};#endifstatic ExifMarker CanonExifMarkersList[] = { 	{ 1,	EXIF_FORMAT_SHORT_UNSIGNED, -1, "MkN.Canon.Settings1",		NULL, NULL },	{ 4,	EXIF_FORMAT_SHORT_UNSIGNED, -1, "MkN.Canon.Settings2",		NULL, NULL },	{ 6,	EXIF_FORMAT_STRING, -1,		"MkN.Canon.ImageType",		"Image type", NULL },	{ 7,	EXIF_FORMAT_STRING, -1,		"MkN.Canon.FirmwareVersion",	"Firmware version", NULL },	{ 8,	EXIF_FORMAT_LONG_UNSIGNED, 1,	"MkN.Canon.ImageNumber",	"Image number", NULL },	{ 9,	EXIF_FORMAT_STRING, -1,		"MkN.Canon.OwnerName",		"Owner name", NULL },	{ 12,	EXIF_FORMAT_LONG_UNSIGNED, -1,	"MkN.Canon.SerialNumber",	"Camera serial number", NULL },	{ 15,	EXIF_FORMAT_SHORT_UNSIGNED, -1,	"MkN.Canon.CustomFunctions",	NULL, NULL },	EXIF_MARKER_LIST_END};static void canon_mknote_parse_settings(ExifData *exif,					guint16 *data, guint32 len, ExifByteOrder bo,					ExifMarker *list){	gint i;	i = 0;	while (list[i].tag != 0)		{		if (list[i].tag < len)			{			ExifItem *item;			item = exif_item_new(EXIF_FORMAT_SHORT_UNSIGNED, list[i].tag, 1, &list[i]);			exif_item_copy_data(item, &data[list[i].tag], 2, EXIF_FORMAT_SHORT_UNSIGNED, bo);			exif->items = g_list_prepend(exif->items, item);			}		i++;		}}#if 0static void canon_mknote_parse_convert(ExifData *exif){	gint value;	ExifItem *result;	/* seems we need more than only this value for distance */	if (exif_get_integer(exif, "MkN.Canon.SubjectDistance", &value))		{		static ExifMarker marker= { 0x9206, EXIF_FORMAT_RATIONAL_UNSIGNED, 1,					    "SubjectDistance", "Subject distance", NULL };		ExifItem *item;		ExifRational *rational;		item = exif_item_new(marker.format, marker.tag, 1, &marker);		rational = item->data;		rational->num = value;		rational->den = 100;		exif->items = g_list_prepend(exif->items, item);		}	result = exif_get_item(exif, "MkN.Canon.SerialNumber");	if (result && result->format == EXIF_FORMAT_LONG_UNSIGNED && result->data_len == 4)		{		static ExifMarker marker= { 12, EXIF_FORMAT_STRING, -1,					    "SerialNumber", "Camera serial number", NULL };		ExifItem *item;		gchar *text;		gint l;		guint32 n;		n = (guint32)((guint32 *)(result->data))[0];		text = g_strdup_printf("%04X%05d", n & 0xffff0000 >> 8, n & 0x0000ffff);		l = strlen(text) + 1;		item = exif_item_new(marker.format, marker.tag, l, &marker);		memcpy(item->data, text, l);		g_free(text);		exif->items = g_list_prepend(exif->items, item);		}}#endifgint format_canon_makernote(ExifData *exif, unsigned char *tiff, guint offset,			    guint size, ExifByteOrder bo){	ExifItem *item;	if (exif_parse_IFD_table(exif, tiff, offset, size, bo, 0, CanonExifMarkersList) != 0)		{		return FALSE;		}	item = exif_get_item(exif, "MkN.Canon.Settings1");	if (item)		{		canon_mknote_parse_settings(exif, item->data, item->data_len, bo, CanonSet1);		}	item = exif_get_item(exif, "MkN.Canon.Settings2");	if (item)		{		canon_mknote_parse_settings(exif, item->data, item->data_len, bo, CanonSet2);		}#if 0	canon_mknote_parse_convert(exif);#endif	return TRUE;}

⌨️ 快捷键说明

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