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 )