com.drew.metadata.exif.makernotes.SonyTag9050bDirectory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of metadata-extractor Show documentation
Show all versions of metadata-extractor Show documentation
Java library for extracting EXIF, IPTC, XMP, ICC and other metadata from image and video files.
The newest version!
package com.drew.metadata.exif.makernotes;
import com.drew.lang.ByteArrayReader;
import com.drew.lang.annotations.NotNull;
import java.io.IOException;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.HashMap;
public class SonyTag9050bDirectory extends SonyEncodedDataDirectoryBase
{
public static final int TAG_SHUTTER = 0x0026;
public static final int TAG_FLASH_STATUS = 0x0039;
public static final int TAG_SHUTTER_COUNT = 0x003a;
public static final int TAG_SONY_EXPOSURE_TIME = 0x0046;
public static final int TAG_SONY_F_NUMBER = 0x0048;
public static final int TAG_RELEASE_MODE_2 = 0x006d;
public static final int TAG_INTERNAL_SERIAL_NUMBER = 0x0088;
public static final int TAG_LENS_MOUNT = 0x0105;
public static final int TAG_LENS_FORMAT = 0x0106;
public static final int TAG_LENS_TYPE_2 = 0x0107;
public static final int TAG_DISTORTION_CORR_PARAMS_PRESENT = 0x010b;
public static final int TAG_APS_C_SIZE_CAPTURE = 0x0114;
public static final int TAG_LENS_SPEC_FEATURES = 0x0116;
public static final int TAG_SHUTTER_COUNT_3 = 0x019f;
@NotNull
private static final HashMap _tagNameMap = new HashMap();
static {
_tagNameMap.put(TAG_SHUTTER, "Shutter");
_tagNameMap.put(TAG_FLASH_STATUS, "Flash Status");
_tagNameMap.put(TAG_SHUTTER_COUNT, "Shutter Count");
_tagNameMap.put(TAG_SONY_EXPOSURE_TIME, "Sony Exposure Time");
_tagNameMap.put(TAG_SONY_F_NUMBER, "Sony F Number");
_tagNameMap.put(TAG_RELEASE_MODE_2, "Release Mode 2");
_tagNameMap.put(TAG_INTERNAL_SERIAL_NUMBER, "Internal Serial Number");
_tagNameMap.put(TAG_LENS_MOUNT, "Lens Mount");
_tagNameMap.put(TAG_LENS_FORMAT, "Lens Format");
_tagNameMap.put(TAG_LENS_TYPE_2, "Lens Type 2");
_tagNameMap.put(TAG_DISTORTION_CORR_PARAMS_PRESENT, "Distortion Corr Params Present");
_tagNameMap.put(TAG_APS_C_SIZE_CAPTURE, "APS-C Size Capture");
_tagNameMap.put(TAG_LENS_SPEC_FEATURES, "Lens Spec Features");
_tagNameMap.put(TAG_SHUTTER_COUNT_3, "Shutter Count 3");
}
public SonyTag9050bDirectory()
{
this.setDescriptor(new SonyTag9050bDescriptor(this));
}
@Override
@NotNull
public String getName()
{
return "Sony 9050B";
}
@Override
@NotNull
protected HashMap getTagNameMap()
{
return _tagNameMap;
}
public static SonyTag9050bDirectory read(byte[] bytes)
{
SonyTag9050bDirectory dir = new SonyTag9050bDirectory();
try {
// First, decipher the bytes
decipherInPlace(bytes);
ByteArrayReader reader = new ByteArrayReader(bytes);
reader.setMotorolaByteOrder(false);
// Shutter
int offset = TAG_SHUTTER;
int shutter0 = reader.getUInt16(offset);
int shutter1 = reader.getUInt16(offset + 2);
int shutter2 = reader.getUInt16(offset + 4);
dir.setIntArray(TAG_SHUTTER, new int[]{shutter0, shutter1, shutter2});
// FlashStatus
offset = TAG_FLASH_STATUS;
int flashStatus = reader.getUInt8(offset);
dir.setInt(TAG_FLASH_STATUS, flashStatus);
// ShutterCount
offset = TAG_SHUTTER_COUNT;
long shutterCount = reader.getUInt32(offset);
dir.setLong(TAG_SHUTTER_COUNT, shutterCount);
// SonyExposureTime
offset = TAG_SONY_EXPOSURE_TIME;
int expTime = reader.getUInt16(offset);
float expTimeFlt = (float)Math.pow(2, 16 - (expTime / 256));
DecimalFormat format = new DecimalFormat("0.#############");
format.setRoundingMode(RoundingMode.HALF_UP);
dir.setFloat(TAG_SONY_EXPOSURE_TIME, expTimeFlt);
// SonyFNumber
offset = TAG_SONY_F_NUMBER;
int fNumber = reader.getUInt16(offset);
dir.setInt(TAG_SONY_F_NUMBER, fNumber);
// ReleaseMode2
// ReleaseMode2
offset = TAG_INTERNAL_SERIAL_NUMBER;
int serialNum0 = reader.getUInt8(offset);
int serialNum1 = reader.getUInt8(offset + 1);
int serialNum2 = reader.getUInt8(offset + 2);
int serialNum3 = reader.getUInt8(offset + 3);
int serialNum4 = reader.getUInt8(offset + 4);
int serialNum5 = reader.getUInt8(offset + 5);
int[] serialNumber =
new int[]{serialNum0, serialNum1, serialNum2, serialNum3, serialNum4, serialNum5};
dir.setIntArray(TAG_INTERNAL_SERIAL_NUMBER, serialNumber);
// LensMount
offset = TAG_LENS_MOUNT;
int lensMount = reader.getUInt8(offset);
dir.setInt(TAG_LENS_MOUNT, lensMount);
// LensFormat
offset = TAG_LENS_FORMAT;
int lensFormat = reader.getUInt8(offset);
dir.setInt(TAG_LENS_FORMAT, lensFormat);
// LensType2
offset = TAG_LENS_TYPE_2;
int lensType2 = reader.getUInt16(offset);
dir.setInt(TAG_LENS_TYPE_2, lensType2);
// DistortionCorrParamsPresent
offset = TAG_DISTORTION_CORR_PARAMS_PRESENT;
int distortCorrParamsPresent = reader.getUInt8(offset);
dir.setInt(TAG_DISTORTION_CORR_PARAMS_PRESENT, distortCorrParamsPresent);
// APS-CSizeCapture
offset = TAG_APS_C_SIZE_CAPTURE;
int apsCSizeCapture = reader.getUInt8(offset);
dir.setInt(TAG_APS_C_SIZE_CAPTURE, apsCSizeCapture);
// LensSpecFeatures
offset = TAG_LENS_SPEC_FEATURES;
byte[] lensSpecFeatures = reader.getBytes(offset, 2);
dir.setByteArray(TAG_APS_C_SIZE_CAPTURE, lensSpecFeatures);
// ShutterCount3
// APS-CSizeCapture
// LensSpecFeatures
} catch (IOException e) {
dir.addError(e.getMessage());
}
return dir;
}
}