/* mnote-olympus-entry.c
*
* Copyright � 2002 Lutz M�ller <lutz@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#include <config.h>
#include "mnote-olympus-entry.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libexif/exif-format.h>
#include <libexif/exif-utils.h>
#include <libexif/exif-entry.h>
#include <libexif/i18n.h>
#define CF(format,target,v,maxlen) \
{ \
if (format != target) { \
snprintf (v, maxlen, \
_("Invalid format '%s', " \
"expected '%s'."), \
exif_format_get_name (format), \
exif_format_get_name (target)); \
break; \
} \
}
#define CC(number,target,v,maxlen) \
{ \
if (number != target) { \
snprintf (v, maxlen, \
_("Invalid number of components (%i, " \
"expected %i)."), (int) number, (int) target); \
break; \
} \
}
#define CC2(number,t1,t2,v,maxlen) \
{ \
if ((number != t1) && (number != t2)) { \
snprintf (v, maxlen, \
_("Invalid number of components (%i, " \
"expected %i or %i)."), (int) number, \
(int) t1, (int) t2); \
break; \
} \
}
static struct {
ExifTag tag;
ExifFormat fmt;
struct {
int index;
const char *string;
} elem[10];
} items[] = {
{ MNOTE_NIKON_TAG_LENSTYPE, EXIF_FORMAT_BYTE,
{ {0, N_("AF non D Lens")},
{1, N_("Manual")},
{2, N_("AF-D or AF-S Lens")},
{6, N_("AF-D G Lens")},
{10, N_("AF-D VR Lens")},
{0, NULL}}},
{ MNOTE_NIKON_TAG_FLASHUSED, EXIF_FORMAT_BYTE,
{ {0, N_("Flash did not fire")},
{4, N_("Flash unit unknown")},
{7, N_("Flash is external")},
{9, N_("Flash is on Camera")},
{0, NULL}}},
{ MNOTE_NIKON1_TAG_QUALITY, EXIF_FORMAT_SHORT,
{ {1, N_("VGA Basic")},
{2, N_("VGA Normal")},
{3, N_("VGA Fine")},
{4, N_("SXGA Basic")},
{5, N_("SXGA Normal")},
{6, N_("SXGA Fine")},
{10, N_("2 MPixel Basic")},
{11, N_("2 MPixel Normal")},
{12, N_("2 MPixel Fine")},
{0, NULL}}},
{ MNOTE_NIKON1_TAG_COLORMODE, EXIF_FORMAT_SHORT,
{ {1, N_("Color")},
{2, N_("Monochrome")},
{0, NULL}}},
{ MNOTE_NIKON1_TAG_IMAGEADJUSTMENT, EXIF_FORMAT_SHORT,
{ {0, N_("Normal")},
{1, N_("Bright+")},
{2, N_("Bright-")},
{3, N_("Contrast+")},
{4, N_("Contrast-")},
{0, NULL}}},
{ MNOTE_NIKON1_TAG_CCDSENSITIVITY, EXIF_FORMAT_SHORT,
{ {0, N_("ISO80")},
{2, N_("ISO160")},
{4, N_("ISO320")},
{5, N_("ISO100")},
{0, NULL}}},
{ MNOTE_NIKON1_TAG_WHITEBALANCE, EXIF_FORMAT_SHORT,
{ {0, N_("Auto")},
{1, N_("Preset")},
{2, N_("Daylight")},
{3, N_("Incandescense")},
{4, N_("Fluorescence")},
{5, N_("Cloudy")},
{6, N_("SpeedLight")},
{0, NULL}}},
{ MNOTE_NIKON1_TAG_CONVERTER, EXIF_FORMAT_SHORT,
{ {0, N_("No Fisheye")},
{1, N_("Fisheye On")},
{0, NULL}}},
{ MNOTE_OLYMPUS_TAG_QUALITY, EXIF_FORMAT_SHORT,
{ {1, N_("SQ")},
{2, N_("HQ")},
{3, N_("SHQ")},
{0, NULL}}},
{ MNOTE_OLYMPUS_TAG_MACRO, EXIF_FORMAT_SHORT,
{ {0, N_("No")},
{1, N_("Yes")},
{0, NULL}}},
{ MNOTE_OLYMPUS_TAG_DIGIZOOM, EXIF_FORMAT_SHORT,
{ {0, N_("1x")},
{2, N_("2x")},
{0, NULL}}},
{ MNOTE_OLYMPUS_TAG_FLASHMODE, EXIF_FORMAT_SHORT,
{ {0, N_("Auto")},
{1, N_("Red-eye reduction")},
{2, N_("Fill")},
{3, N_("Off")},
{0, NULL}}},
{ MNOTE_OLYMPUS_TAG_SHARPNESS, EXIF_FORMAT_SHORT,
{ {0, N_("Normal")},
{1, N_("Hard")},
{2, N_("Soft")},
{0, NULL}}},
{ MNOTE_OLYMPUS_TAG_CONTRAST, EXIF_FORMAT_SHORT,
{ {0, N_("Hard")},
{1, N_("Normal")},
{2, N_("Soft")},
{0, NULL}}},
{ MNOTE_OLYMPUS_TAG_MANFOCUS, EXIF_FORMAT_SHORT,
{ {0, N_("No")},
{1, N_("Yes")},
{0, NULL}}},
{ 0, }
};
char *
mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int maxlen)
{
char buf[30];
ExifLong vl;
ExifShort vs = 0;
ExifRational vr;
int i, j;
double r, b;
if (!entry)
return (NULL);
memset (v, 0, maxlen);
maxlen--;
if ((!entry->data) && (entry->components > 0)) return (v);
switch (entry->tag) {
/* Nikon */
case MNOTE_NIKON_TAG_FIRMWARE:
CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen);
CC (entry->components, 4, v, maxlen);
vl = exif_get_long (entry->data, entry->order);
if ((vl & 0xF0F0F0F0) == 0x30303030) {
memcpy (v, entry->data, MIN (maxlen, 4));
} else {
snprintf (v, maxlen, "%04lx", (long unsigned int) vl);
}
break;
case MNOTE_NIKON_TAG_ISO:
CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen);
CC (entry->components, 2, v, maxlen);
//vs = exif_get_short (entry->data, entry->order);
vs = exif_get_short (entry->data + 2, entry->order);
snprintf (v, maxlen, "ISO %hd", vs);
break;
case MNOTE_NIKON_TAG_ISO2:
CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen);
CC (entry->components, 2, v, maxlen);
//vs = exif_get_short (entry->data, entry->order);
vs = exif_get_short (entry->data + 2, entry->order);
snprintf (v, maxlen, "ISO2 %hd", vs);
break;
case MNOTE_NIKON_TAG_QUALITY:
CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen);
//CC (entry->components, 8, v, maxlen);
//vl = exif_get_long (entry->data , entry->order);
//printf("-> 0x%04x\n",entry->data);
//printf("-> 0x%s<\n",entry->data - 0);
memcpy(v, entry->data ,entry->components);
//snprintf (v, maxlen, "%s<", ( entry->data - 9 );
break;
case MNOTE_NIKON_TAG_COLORMODE:
case MNOTE_NIKON_TAG_COLORMODE1:
case MNOTE_NIKON_TAG_WHITEBALANCE:
case MNOTE_NIKON_TAG_SHARPENING:
case MNOTE_NIKON_TAG_FOCUSMODE:
case MNOTE_NIKON_TAG_FLASHSETTING:
case MNOTE_NIKON_TAG_ISOSELECTION:
case MNOTE_NIKON_TAG_FLASHMODE:
case MNOTE_NIKON_TAG_IMAGEADJUSTMENT:
case MNOTE_NIKON_TAG_ADAPTER:
CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen);
memcpy(v, entry->data, MIN (maxlen, entry-
olympus.zip_olympus
版权申诉
185 浏览量
2022-09-23
12:22:58
上传
评论
收藏 12KB ZIP 举报
周楷雯
- 粉丝: 79
- 资源: 1万+
最新资源
- 基于matlab实现恒模算法的简介,它适用于信道的盲均衡 Matlab程序提供基本的框架,可以修该里面的参数以测试该算法.rar
- 基于C# WinForm框架开发的图书管理系统源码+sql文件.zip
- 基于matlab实现快速样本熵算法,能够提高5倍,数据长度越长,提高越明显.rar
- 基于matlab实现频谱分析,用于对等时间间距的序列进行频谱分析.rar
- 基于matlab实现实现了基于项目的协同过滤代码,MATLAB实现.rar
- 华为 OD 机考攻略-加强版
- 大学生竞赛平台源代码 springboot
- 基于VS+QT开发的FTP服务器源码+项目说明.zip
- 基于matlab实现心电信号预处理 滤波 去噪 QRs波检测 P波,T波检测.rar
- 华为 OD 机考攻略-加强版
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈