Image-EXIF
view release on metacpan or search on metacpan
panasonic.c view on Meta::CPAN
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "makers.h"
/* Image quality. */
static struct descrip panasonic_quality[] = {
{ 2, "Fine" },
{ 3, "Standard" },
{ -1, "Unknown" },
};
/* White balance. */
static struct descrip panasonic_whitebal[] = {
{ 1, "Auto" },
{ 2, "Daylight" },
{ 3, "Cloudy" },
{ 4, "Halogen" },
{ 5, "Manual" },
{ 8, "Flash" },
{ -1, "Unknown" },
};
/* Focus mode. */
static struct descrip panasonic_focus[] = {
{ 1, "Auto" },
{ 2, "Manual" },
{ -1, "Unknown" },
};
/* Spot mode. */
static struct descrip panasonic_spot[] = {
{ 256, "On" },
{ 4096, "Off" },
{ -1, "Unknown" },
};
/* Optical Image Stabilizer mode. */
static struct descrip panasonic_ois[] = {
{ 2, "Mode 1" },
{ 3, "Off" },
{ 4, "Mode 2" },
{ -1, "Unknown" },
};
/* Macro. */
static struct descrip panasonic_macro[] = {
{ 1, "Macro" },
{ 2, "Normal" },
{ -1, "Unknown" },
};
/* Shooting mode. */
static struct descrip panasonic_shoot[] = {
{ 2, "Portrait" },
{ 3, "Scenery" },
{ 4, "Sports" },
{ 5, "Night Portrait" },
{ 6, "Program" },
{ 7, "Aperture Priority" },
{ 8, "Shutter Priority" },
{ 9, "Macro" },
{ 11, "Manual" },
{ 13, "Panning" },
{ 18, "Fireworks" },
{ 19, "Party" },
{ 20, "Snow" },
{ 21, "Night Scenery" },
{ -1, "Unknown" },
};
/* Audio. */
static struct descrip panasonic_audio[] = {
{ 1, "Yes" },
{ 2, "No" },
{ -1, "Unknown" },
};
/* Color effect. */
static struct descrip panasonic_color[] = {
{ 1, "Off" },
{ 2, "Warm" },
{ 3, "Cool" },
{ 4, "Black & White" },
{ 5, "Sepia" },
{ -1, "Unknown" },
};
/* Contrast & noise. */
static struct descrip panasonic_range[] = {
{ 0, "Standard" },
{ 1, "Low" },
{ 2, "High" },
{ -1, "Unknown" },
};
/* Maker note IFD tags. */
static struct exiftag panasonic_tags0[] = {
{ 0x0001, TIFF_SHORT, 1, ED_IMG, "PanasonicQuality",
"Image Quality", panasonic_quality },
{ 0x0003, TIFF_SHORT, 1, ED_IMG, "PanasonicWhiteB",
"White Balance", panasonic_whitebal },
{ 0x0007, TIFF_SHORT, 1, ED_IMG, "PanasonicFocus",
"Focus Mode", panasonic_focus },
{ 0x000f, TIFF_BYTE, 1, ED_IMG, "PanasonicSpotMode",
"Spot Mode", panasonic_spot },
{ 0x001a, TIFF_SHORT, 1, ED_IMG, "PanasonicOIS",
"Image Stabilizer", panasonic_ois },
{ 0x001c, TIFF_SHORT, 1, ED_IMG, "PanasonicMacroMode",
"Macro Mode", panasonic_macro },
{ 0x001f, TIFF_SHORT, 1, ED_IMG, "PanasonicShootMode",
"Shooting Mode", panasonic_shoot },
{ 0x0020, TIFF_SHORT, 1, ED_IMG, "PanasonicAudio",
"Audio", panasonic_audio },
{ 0x0023, TIFF_SHORT, 1, ED_UNK, "PanasonicWBAdjust",
"White Balance Adjust", NULL },
{ 0x0024, TIFF_SSHORT, 1, ED_IMG, "PanasonicFlashBias",
"Flash Bias", NULL },
{ 0x0028, TIFF_SHORT, 1, ED_IMG, "PanasonicColorEffect",
"Color Effect", panasonic_color },
{ 0x002c, TIFF_SHORT, 1, ED_IMG, "PanasonicContrast",
"Contrast", panasonic_range },
{ 0x002d, TIFF_SHORT, 1, ED_IMG, "PanasonicNoiseReduce",
"Noise Reduction", panasonic_range },
{ 0xffff, TIFF_UNKN, 0, ED_UNK, "PanasonicUnknown",
"Panasonic Unknown", NULL },
};
/*
* Process Panasonic maker note tags.
*/
void
panasonic_prop(struct exifprop *prop, struct exiftags *t)
{
switch (prop->tag) {
/* White balance. */
case 0x0003:
prop->override = EXIF_T_WHITEBAL;
break;
/* White balance adjust (unknown). */
case 0x0023:
exifstralloc(&prop->str, 10);
snprintf(prop->str, 9, "%d", (int16_t)prop->value);
break;
/* Flash bias. */
case 0x0024:
exifstralloc(&prop->str, 10);
snprintf(prop->str, 9, "%.2f EV", (int16_t)prop->value / 3.0);
break;
/* Contrast. */
case 0x002c:
prop->override = EXIF_T_CONTRAST;
break;
}
}
/*
* Try to read a Panasonic maker note IFD.
*/
( run in 0.732 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )