/*
* Copyright 2002-2016 Drew Noakes
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* More information about this project is available at:
*
* https://drewnoakes.com/code/exif/
* https://github.com/drewnoakes/metadata-extractor
*/
package com.drew.metadata.exif.makernotes;
import com.drew.lang.annotations.NotNull;
import com.drew.metadata.Directory;
import java.util.HashMap;
/**
* Describes tags specific to Nikon (type 2) cameras. Type-2 applies to the E990 and D-series cameras such as the E990, D1,
* D70 and D100.
* <p>
* Thanks to Fabrizio Giudici for publishing his reverse-engineering of the D100 makernote data.
* http://www.timelesswanderings.net/equipment/D100/NEF.html
* <p>
* Note that the camera implements image protection (locking images) via the file's 'readonly' attribute. Similarly
* image hiding uses the 'hidden' attribute (observed on the D70). Consequently, these values are not available here.
* <p>
* Additional sample images have been observed, and their tag values recorded in javadoc comments for each tag's field.
* New tags have subsequently been added since Fabrizio's observations.
* <p>
* In earlier models (such as the E990 and D1), this directory begins at the first byte of the makernote IFD. In
* later models, the IFD was given the standard prefix to indicate the camera models (most other manufacturers also
* provide this prefix to aid in software decoding).
*
* @author Drew Noakes https://drewnoakes.com
*/
public class NikonType2MakernoteDirectory extends Directory
{
/**
* Values observed
* - 0200 (D70)
* - 0200 (D1X)
*/
public static final int TAG_FIRMWARE_VERSION = 0x0001;
/**
* Values observed
* - 0 250
* - 0 400
*/
public static final int TAG_ISO_1 = 0x0002;
/**
* The camera's color mode, as an uppercase string. Examples include:
* <ul>
* <li><code>B & W</code></li>
* <li><code>COLOR</code></li>
* <li><code>COOL</code></li>
* <li><code>SEPIA</code></li>
* <li><code>VIVID</code></li>
* </ul>
*/
public static final int TAG_COLOR_MODE = 0x0003;
/**
* The camera's quality setting, as an uppercase string. Examples include:
* <ul>
* <li><code>BASIC</code></li>
* <li><code>FINE</code></li>
* <li><code>NORMAL</code></li>
* <li><code>RAW</code></li>
* <li><code>RAW2.7M</code></li>
* </ul>
*/
public static final int TAG_QUALITY_AND_FILE_FORMAT = 0x0004;
/**
* The camera's white balance setting, as an uppercase string. Examples include:
*
* <ul>
* <li><code>AUTO</code></li>
* <li><code>CLOUDY</code></li>
* <li><code>FLASH</code></li>
* <li><code>FLUORESCENT</code></li>
* <li><code>INCANDESCENT</code></li>
* <li><code>PRESET</code></li>
* <li><code>PRESET0</code></li>
* <li><code>PRESET1</code></li>
* <li><code>PRESET3</code></li>
* <li><code>SUNNY</code></li>
* <li><code>WHITE PRESET</code></li>
* <li><code>4350K</code></li>
* <li><code>5000K</code></li>
* <li><code>DAY WHITE FL</code></li>
* <li><code>SHADE</code></li>
* </ul>
*/
public static final int TAG_CAMERA_WHITE_BALANCE = 0x0005;
/**
* The camera's sharpening setting, as an uppercase string. Examples include:
*
* <ul>
* <li><code>AUTO</code></li>
* <li><code>HIGH</code></li>
* <li><code>LOW</code></li>
* <li><code>NONE</code></li>
* <li><code>NORMAL</code></li>
* <li><code>MED.H</code></li>
* <li><code>MED.L</code></li>
* </ul>
*/
public static final int TAG_CAMERA_SHARPENING = 0x0006;
/**
* The camera's auto-focus mode, as an uppercase string. Examples include:
*
* <ul>
* <li><code>AF-C</code></li>
* <li><code>AF-S</code></li>
* <li><code>MANUAL</code></li>
* <li><code>AF-A</code></li>
* </ul>
*/
public static final int TAG_AF_TYPE = 0x0007;
/**
* The camera's flash setting, as an uppercase string. Examples include:
*
* <ul>
* <li><code></code></li>
* <li><code>NORMAL</code></li>
* <li><code>RED-EYE</code></li>
* <li><code>SLOW</code></li>
* <li><code>NEW_TTL</code></li>
* <li><code>REAR</code></li>
* <li><code>REAR SLOW</code></li>
* </ul>
* Note: when TAG_AUTO_FLASH_MODE is blank (whitespace), Nikon Browser displays "Flash Sync Mode: Not Attached"
*/
public static final int TAG_FLASH_SYNC_MODE = 0x0008;
/**
* The type of flash used in the photograph, as a string. Examples include:
*
* <ul>
* <li><code></code></li>
* <li><code>Built-in,TTL</code></li>
* <li><code>NEW_TTL</code> Nikon Browser interprets as "D-TTL"</li>
* <li><code>Built-in,M</code></li>
* <li><code>Optional,TTL</code> with speedlight SB800, flash sync mode as "NORMAL"</li>
* </ul>
*/
public static final int TAG_AUTO_FLASH_MODE = 0x0009;
/**
* An unknown tag, as a rational. Several values given here:
* http://gvsoft.homedns.org/exif/makernote-nikon-type2.html#0x000b
*/
public static final int TAG_UNKNOWN_34 = 0x000A;
/**
* The camera's white balance bias setting, as an uint16 array having either one or two elements.
*
* <ul>
* <li><code>0</code></li>
* <li><code>1</code></li>
* <li><code>-3</code></li>
* <li><code>-2</code></li>
* <li><code>-1</code></li>
* <li><code>0,0</code></li>
* <li><code>1,0</code></li>
* <li><code>5,-5</code></li>
* </ul>
*/
public static final int TAG_CAMERA_WHITE_BALANCE_FINE = 0x000B;
/**
* The first two numbers are coefficients to multiply red and blue channels according to white balance as set in the
* camera. The meaning of the third and the fourth numbers is unknown.
*
* Values observed
* - 2.25882352 1.76078431 0.0 0.0
* - 10242/1 34305/1 0/1 0/1
* - 234765625/100000000 1140625/1000000 1/1 1/1
*/
public static final int TAG_CAMERA_WHITE_BALANCE_RB_COEFF = 0x000C;
/**
* The camera's program shift setting, as an array of four integers.
* The value, in EV, is calculated as <code>a*b/c</code>.
*
* <ul>
* <li><code>0,1,3,0</code> = 0 EV</li>
* <li><code>1,1,3,0</code> = 0.33 EV</li>
* <li><code>-3,1,3,0</code> = -1 EV</li>
* <li><code>1,1,2,0</code> = 0.5 EV</li>
* <li><code>2,1,6,0</code> = 0.33 EV</li>
* </ul>
*/
public static final int TAG_PROGRAM_SHIFT = 0x000D;
/**
* The exposure difference, as an array of four integers.
* The value, in EV, is calculated as <code>a*b/c</code>.
*
* <ul>
* <li><code>-105,1,12,0</code> = -8.75 EV</li>
* <li><code>-72,1,12,0</code> = -6.00 EV</li>
* <li><code>-11,1,12,0</code> = -0.92 EV</li>
* </ul>
*/
public static final int TAG_EXPOSURE_DIFFERENCE = 0x000E;
/**
* The camera's ISO mode, as an uppercase string.
*
* <ul>
* <li><code>AUTO</code></li>
* <li><code>MANUAL</code></li>
* </ul>
*/
public static final int TAG_ISO_MODE = 0x000F;
/**
* Added during merge of Type2 & Type3. May apply to earlier models, such as E990 and D1.
*/
public static final int TAG_DATA_DUMP = 0x0010;
/**
* Preview to another IFD (?)
* <p>
* Details here: http://gvsoft.homedns.org/exif/makernote-nikon-2-tag0x0011.html
* // TODO if this is another IFD, decode it
*/
public static final int TAG_PREVIEW_IFD = 0x0011;
/**
* The flash compensation, as an array of four integers.
* The value, in EV, is calculated as <code>a*b/c</code>.
*
* <ul>
* <li><code>-18,1,6,0</code> = -3 EV</li>
* <li><code>4,1,6,0</code> = 0.67 EV</li>
* <li><code>6,1,6,0</code> = 1 EV</li>
* </ul>
*/
public static final int TAG_AUTO_FLASH_COMPENSATION = 0x0012;
/**
* The requested ISO value, as an array of two integers.
*
* <ul>
* <li><code>0,0</code></li>
* <li><code>0,125</code></li>
* <li><code>1,2500</code></li>
* </ul>
*/
public static final int TAG_ISO_REQUESTED = 0x0013;
/**
* Defines the photo corner coordinates, in 8 bytes. Treated as four 16-bit integers, they
* decode as: top-left (x,y); bot-right (x,y)
* - 0 0 49163 53255
* - 0 0 3008 2000 (the image dimensions were 3008x2000) (D70)
* <ul>
* <li><code>0,0,4288,2848</code> The max resolution of the D300 camera</li>
* <li><code>0,0,3008,2000</code> The max resolution of the D70 camera</li>
* <li><code>0,0,4256,2832</code> The max resolution of the D3 camera</li>
* </ul>
*/
public static final int TAG_IMAGE_BOUNDARY = 0x0016;
/**
* The flash exposure compensation, as an array of four integers.
* The value, in EV, is calculated as <code>a*b/c</code>.
*
* <ul>
* <li><code>0,0,0,0</code> = 0 EV</li>
* <li><code>0,1,6,0</code> = 0 EV</li>
* <li><code>4,1,6,0</code> = 0.67 EV</li>
* </ul>
*/
public static final int TAG_FLASH_EXPOSURE_COMPENSATION = 0x0017;
/**
* The flash bracket compensation, as an array of four integers.
* The value, in EV, is calculated as <code>a*b/c</code>.
*
* <ul>
* <li><code>0,0,0,0</code> = 0 EV</li>
* <li><code>0,1,6,0</code> = 0 EV</li>
* <li><code>4,1,6,0</code> = 0.67 EV</li>
* </ul>
*/
public static final int TAG_FLASH_BRACKET_COMPENSATION = 0x0018;
/**
* The AE bracket compensation, as a rational number.
*
* <ul>
* <li><code>0/0</code></li>
* <li><code>0/1</code></li>
* <li><code>0/6</code></li>
* <li><code>4/6</code></li>
* <li><code>6/6</code></li>
* </ul>
*/
public static final int TAG_AE_BRACKET_COMPENSATION = 0x0019;
/**
* Flash mode, as a string.
*
* <ul>
* <li><code></code></li>
* <li><code>Red Eye Reduction</code></li>
* <li><code>D-Lighting</code></li>
* <li><code>Distortion control</code></li>
* </ul>
*/
public static final int TAG_FLASH_MODE = 0x001a;
public static final int TAG_CROP_HIGH_SPEED = 0x001b;
public static final int TAG_EXPOSURE_TUNING = 0x001c;
/**
* The camera's serial number, as a string.
* Note that D200 is always blank, and D50 is always <code>"D50"</code>.
*/
public static final int TAG_CAMERA_SERIAL_NUMBER = 0x001d;
/**
* The camera's color space setting.
*
* <ul>
* <li><code>1</code> sRGB</li>
* <li><code>2</code> Adobe RGB</li>
* </ul>
*/
public static final int TAG_COLOR_SPACE = 0x001e;
public static final int TAG_VR_INFO = 0x001f;
public static final int TAG_IMAGE_AUTHENTICATION = 0x0020;
public static final int TAG_UNKNOWN_35 = 0x0021;
/**
* The active D-Lighting setting.
*
* <ul>
* <li><code>0</code> Off</li>
* <li><code>1</code> Low</li>
* <li><code>3</code> Normal</li>
* <li><code>5</code> High</li>
* <li><code>7</code> Extra High</li>
* <li><code>65535</code> Auto</li>
* </ul>
*/
public static final int TAG_ACTIVE_D_LIGHTING = 0x0022;
public static final int TAG_PICTURE_CONTROL = 0x0023;
public static final int TAG_WORLD_TIME = 0x0024;
public static final int TAG_ISO_INFO = 0x0025;
public static final int TAG_UNKNOWN_36 = 0x0026;
public static final int TAG_UNKNOWN_37 = 0x0027;
public static final int TAG_UNKNOWN_38 = 0x0028;
public static final int TAG_UNKNOWN_39 = 0x0029;
/**
* The camera's vignette control setting.
*
* <ul>
* <li><code>0</code> Off</li>
* <li><code>1</code> Low</li>
* <li><code>3</code> Normal</li>
* <li><code>5</code> High</li>
* </ul>
*/
public static final int TAG_VIGNETTE_CONTROL = 0x002a;
public static final int TAG_UNKNOWN_40 = 0x002b;
public static final int TAG_UNKNOWN_41 = 0x002c;
public static final int TAG_UNKNOWN_42 = 0x002d;
public static final int TAG_UNKNOWN_43 = 0x002e;
public static final int TAG_UNKNOWN_44 = 0x002f;
public static final int TAG_UNKNOWN_45 = 0x0030;
public static final int TAG_UNKNOWN_46 = 0x0031;
/**
* The camera's image adjustment setting, as a string.
*
* <ul>
* <li><code>AUTO</code></li>
* <li><code>CONTRAST(+)</code></li>
* <li><code>CONTRAST(-)</code></li>
* <li><code>NORMAL</code></li>
* <li><code>B & W</code></li>
* <li><code>BRIGHTNESS(+)</code></li>
* <li><code>BRIGHTNESS(-)</code></li>
* <li><code>SEPIA</code></li>
* </ul>
*/
public static final int TAG_IMAGE_ADJUSTMENT = 0x0080;
/**
* The camera's tone compensation setting, as a string.
*
* <ul>
* <li><code>NORMAL</code></li>
* <li><code>LOW</code></li>
* <li><code>MED.L</code></li>
* <li><code>MED.H</code></li>
* <li><code>HIGH</code></li>
* <li><code>AUTO</code></li>
* </ul>
*/
public static final int TAG_CAMERA_TONE_COMPENSATION = 0x0081;
/**
* A description of any auxiliary lens, as a string.
*
* <ul>
* <li><code>OFF</code></li>
* <li><code>FISHEYE 1</code></li>
* <li><code>FISHEYE 2</code></li>
* <li><code>TELEPHOTO 2</code></li>
* <li><code>WIDE ADAPTER</code></li>
* </ul>
*/
public static final int TAG_ADAPTER = 0x0082;
/**
* The type of lens used, as a byte.
*
* <ul>
* <li><code>0x00</code> AF</li>
* <li><code>0x01</code> MF</li>
* <li><code>0x02</code> D</li>
* <li><code>0x06</code> G, D</li>
* <li><code>0x08</code> VR</li>
* <li><code>0x0a</code> VR, D</li>
* <li><code>0x0e</code> VR, G, D</li>
* </ul>
*/
public static final int TAG_LENS_TYPE = 0x0083;
/**
* A pair of focal/max-fstop values that describe the lens used.
*
* Values observed
* - 180.0,180.0,2.8,2.8 (D100)
* - 240/10 850/10 35/10 45/10
* - 18-70mm f/3.5-4.5 (D70)
* - 17-35mm f/2.8-2.8 (D1X)
* - 70-200mm f/2.8-2.8 (D70)
*
* Nikon Browser identifies the lens as "18-70mm F/3.5-4.5 G" which
* is identical to metadata extractor, except for the "G". This must
* be coming from another tag...
*/
public static final int TAG_LENS = 0x0084;
/**
* Added during merge of Type2 & Type3. May apply to earlier models, such as E990 and D1.
*/
public static final int TAG_MANUAL_FOCUS_DISTANCE = 0x0085;
/**
* The amount of digital zoom used.
*/
public static final int TAG_DIGITAL_ZOOM = 0x0086;
/**
* Whether the flash was used in this image.
*
* <ul>
* <li><code>0</code> Flash Not Used</li>
* <li><code>1</code> Manual Flash</li>
* <li><code>3</code> Flash Not Ready</li>
* <li><code>7</code> External Flash</li>
* <li><code>8</code> Fired, Commander Mode</li>
* <li><code>9</code> Fired, TTL Mode</li>
* </ul>
*/
public static final int TAG_FLASH_USED = 0x0087;
/**
* The position of the autofocus target.
*/
public static final int TAG_AF_FOCUS_POSITION = 0x0088;
/**
* The camera's shooting mode.
* <p>
* A bit-array with:
* <ul>
* <li><code>0</code> Single Frame</li>
* <li><code>1</code> Continuous</li>
* <li><code>2</code> Delay</li>
* <li><code>8</code> PC Control</li>
* <li><code>16</code> Exposure Bracketing</li>
* <li><code>32</code> Auto ISO</li>
* <li><code>64</code> White-Balance Bracketing</li>
* <li><code>128</code> IR Control</li>
* </ul>
*/
public static final int TAG_SHOOTING_MODE = 0x0089;
public static final int TAG_UNKNOWN_20 = 0x008A;
/**
* Lens stops, as an array of four integers.
* The value, in EV, is calculated as <code>a*b/c</code>.
*
* <ul>
* <li><code>64,1,12,0</code> = 5.33 EV</li>
* <li><code>72,1,12,0</code> = 6 EV</li>
* </ul>
*/
public static final int TAG_LENS_STOPS = 0x008B;
public static final int TAG_CONTRAST_CURVE = 0x008C;
/**
* The color space as set in the camera, as a string.
*
* <ul>
* <li><code>MODE1</code> = Mode 1 (sRGB)</li>
* <li><code>MODE1a</code> = Mode 1 (sRGB)</li>
* <li><code>MODE2</code> = Mode 2 (Adobe RGB)</li>
* <li><code>MODE3</code> = Mode 2 (sRGB): Higher Saturation</li>
* <li><code>MODE3a</code> = Mode 2 (sRGB): Higher Saturation</li>
* <li><code>B & W</code> = B & W</li>
* </ul>
*/
public static final int TAG_CAMERA_COLOR_MODE = 0x008D;
public static final int TAG_UNKNOWN_47 = 0x008E;
/**
* The camera's scene mode, as a string. Examples include:
* <ul>
* <li><code>BEACH/SNOW</code></li>
* <li><code>CLOSE UP</code></li>
* <li><code>NIGHT PORTRAIT</code></li>
* <li><code>PORTRAIT</code></li>
* <li><code>ANTI-SHAKE</code></li>
* <li><code>BACK LIGHT</code></li>
* <li><code>BEST FACE</code></li>
* <li><code>BEST</code></li>
* <li><code>COPY</code></li>
* <li><code>DAWN/DUSK</code></li>
* <li><code>FACE-PRIORITY</code></li>
* <li><code>FIREWORKS</code></li>
* <li><code>FOOD</code></li>
* <li><code>HIGH SENS.</code></li>
* <li><code>LAND SCAPE</code></li>
* <li><code>MUSEUM</code></li>
* <li><code>PANORAMA ASSIST</code></li>
* <li><code>PARTY/INDOOR</code></li>
* <li><code>SCENE AUTO</code></li>
* <li><code>SMILE</code></li>
* <li><code>SPORT</code></li>
* <li><code>SPORT CONT.</code></li>
* <li><code>SUNSET</code></li>
* </ul>
*/
public static final int TAG_SCENE_MODE = 0x008F;
/**
* The lighting type, as a string. Examples include:
* <ul>
* <li><code></code></li>
* <li><code>NATURAL</code></li>
* <li><code>SPEEDLIGHT</code></li>
* <li><code>COLORED</code></li>
* <li><code>MIXED</code></li>
* <li><code>NORMAL</code></li>
* </ul>
*/
public static final int TAG_LIGHT_SOURCE = 0x0090;
/**
* Advertised as ASCII, but actually isn't. A variable number of bytes (eg. 18 to 533). Actual number of bytes
* appears fixed for a given camera model.
*/
public static final int TAG_SHOT_INFO = 0x0091;
/**
* The hue adjustment as set in the camera. Values observed are either 0 or 3.
*/
public static final int TAG_CAMERA_HUE_ADJUSTMENT = 0x0092;
/**
* The NEF (RAW) compression. Examples include:
* <ul>
* <li><code>1</code> Lossy (Type 1)</li>
* <li><code>2</code> Uncompressed</li>
* <li><code>3</code> Lossless</li>
* <li><code>4</code> Lossy (Type 2)</li>
* </ul>
*/
public static final int TAG_NEF_COMPRESSION = 0x0093;
/**
* The saturation level, as a signed integer. Examples include:
* <ul>
* <li><code>+3</code></li>
* <li><code>+2</code></li>
* <li><code>+1</code></li>
* <li><code>0</code> Normal</li>
* <li><code>-1</code></li>
* <li><code>-2</code></li>
* <li><code>-3</code> (B&W)</li>
* </ul>
*/
public static final int TAG_SATURATION = 0x0094;
/**
* The type of noise reduction, as a string. Examples include:
* <ul>
* <li><code>OFF</code></li>
* <li><code>FPNR</code></li>
* </ul>
*/
public static final int TAG_NOISE_REDUCTION = 0x0095;
public static final int TAG_LINEARIZATION_TABLE = 0x0096;
public static final int TAG_COLOR_BALANCE = 0x0097;
public static final int TAG_LENS_DATA = 0x0098;
/** The NEF (RAW) thumbnail size, as an integer array with two items representing [width,height]. */
public static final int TAG_NEF_THUMBNAIL_SIZE = 0x0099;
/** The sensor pixel size, as a pair of rational numbers. */
public static final int TAG_SENSOR_PIXEL_SIZE = 0x009A;
public static final int TAG_UNKNOWN_10 = 0x009B;
public static final int TAG_SCENE_ASSIST = 0x009C;
public static final int TAG_UNKNOWN_11 = 0x009D;
public static final int TAG_RETOUCH_HISTORY = 0x009E;
public static final int TAG_UNKNOWN_12 = 0x009F;
/**
* The camera serial number, as a string.
* <ul>
* <li><code>NO= 00002539</code></li>
* <li><code>NO= -1000d71</code></li>
* <li><code>PKG597230621263</code></li>
* <li><code>PKG5995671330625116</code></li>
* <li><code>PKG49981281631130677</code></li>
* <li><code>BU672230725063</code></li>
* <li><code>NO= 200332c7</code></li>
* <li><code>NO= 30045efe</code></li>
* </ul>
*/
public static final int TAG_CAMERA_SERIAL_NUMBER_2 = 0x00A0;
public static final int TAG_IMAGE_DATA_SIZE = 0x00A2;
public static final int TAG_UNKNOWN_27 = 0x00A3;
public static final int TAG_UNKNOWN_28 = 0x00A4;
public static final int TAG_IMAGE_COUNT = 0x00A5;
public static final int TAG_DELETED_IMAGE_COUNT = 0x00A6;
/** The number of total shutter releases. This value increments for each exposure (observed on D70). */
public static final int TAG_EXPOSURE_SEQUENCE_NUMBER = 0x00A7;
public static final int TAG_FLASH_INFO = 0x00A8;
/**
* The camera's image optimisation, as a string.
* <ul>
* <li><code></code></li>
* <li><code>NORMAL</code></li>
* <li><code>CUSTOM</code></li>
* <li><code>BLACK AND WHITE</code></li>
* <li><code>LAND SCAPE</code></li>
* <li><code>MORE VIVID</code></li>
* <li><code>PORTRAIT</code></li>
* <li><code>SOFT</code></li>
* <li><code>VIVID</code></li>
* </ul>
*/
public static final int TAG_IMAGE_OPTIMISATION = 0x00A9;
/**
* The camera's saturation level, as a string.
* <ul>
* <li><code></code></li>
* <li><code>NORMAL</code></li>
* <li><code>AUTO</code></li>
* <li><code>ENHANCED</code></li>
* <li><code>MODERATE</code></li>
* </ul>
*/
public static final int TAG_SATURATION_2 = 0x00AA;
/**
* The camera's digital vari-program setting, as a string.
* <ul>
* <li><code></code></li>
* <li><code>AUTO</code></li>
* <li><code>AUTO(FLASH OFF)</code></li>
* <li><code>CLOSE UP</code></li>
* <li><code>LANDSCAPE</code></li>
* <li><code>NIGHT PORTRAIT</code></li>
* <li><code>PORTRAIT</code></li>
* <li><code>SPORT</code></li>
* </ul>
*/
public static final int TAG_DIGITAL_VARI_PROGRAM = 0x00AB;
/**
* The camera's digital vari-program setting, as a string.
* <ul>
* <li><code></code></li>
* <li><code>VR-ON</code></li>
* <li><code>VR-OFF</code></li>
* <li><code>VR-HYBRID</code></li>
* <li><code>VR-ACTIVE</code></li>
* </ul>
*/
public static final int TAG_IMAGE_STABILISATION = 0x00AC;
/**
* The camera's digital vari-program setting, as a string.
* <ul>
* <li><code></code></li>
* <li><code>HYBRID</code></li>
* <li><code>STANDARD</code></li>
* </ul>
*/
public static final int TAG_AF_RESPONSE = 0x00AD;
public static final int TAG_UNKNOWN_29 = 0x00AE;
public static final int TAG_UNKNOWN_30 = 0x00AF;
public static final int TAG_MULTI_EXPOSURE = 0x00B0;
/**
* The camera's high ISO noise reduction setting, as an integer.
* <ul>
* <li><code>0</code> Off</li>
* <li><code>1</code> Minimal</li>
* <li><code>2</code> Low</li>
* <li><code>4</code> Normal</li>
* <li><code>6</code> High</li>
* </ul>
*/
public static final int TAG_HIGH_ISO_NOISE_REDUCTION = 0x00B1;
public static final int TAG_UNKNOWN_31 = 0x00B2;
public static final int TAG_UNKNOWN_32 = 0x00B3;
public static final int TAG_UNKNOWN_33 = 0x00B4;
public static final int TAG_UNKNOWN_48 = 0x00B5;
public static final int TAG_POWER_UP_TIME = 0x00B6;
public static final int TAG_AF_INFO_2 = 0x00B7;
public static final int TAG_FILE_INFO = 0x00B8;
public static final int TAG_AF_TUNE = 0x00B9;
public static final int TAG_UNKNOWN_49 = 0x00BB;
public static final int TAG_UNKNOWN_50 = 0x00BD;
public static final int TAG_UNKNOWN_51 = 0x0103;
public static final int TAG_PRINT_IM = 0x0E00;
/**
* Data about changes set by Nikon Capture Editor.
*
* Values observed
*/
public static final int TAG_NIKON_CAPTURE_DATA = 0x0E01;
public static final int TAG_UNKNOWN_52 = 0x0E05;
public static final int TAG_UNKNOWN_53 = 0x0E08;
public static final int TAG_NIKON_CAPTURE_VERSION = 0x0E09;
public static final int TAG_NIKON_CAPTURE_OFFSETS = 0x0E0E;
public static final int TAG_NIKON_SCAN = 0x0E10;
public static final int TAG_UNKNOWN_54 = 0x0E19;
public static final int TAG_NEF_BIT_DEPTH = 0x0E22;
public static final int TAG_UNKNOWN_55 = 0x0E23;
@NotNull
protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
static
{
_tagNameMap.put(TAG_FIRMWARE_VERSION, "Firmware Version");
_tagNameMap.put(TAG_ISO_1, "ISO");
_tagNameMap.put(TAG_QUALITY_AND_FILE_FORMAT, "Quality & File Format");
_tagNameMap.put(TAG_CAMERA_WHITE_BALANCE, "White Balance");
_tagNameMap.put(TAG_CAMERA_SHARPENING, "Sharpening");
_tagNameMap.put(TAG_AF_TYPE, "AF Type");
_tagNameMap.put(TAG_CAMERA_WHITE_BALANCE_FINE, "White Balance Fine");
_tagNameMap.put(TAG_CAMERA_WHITE_BALANCE_RB_COEFF, "White Balance RB Coefficients");
_tagNameMap.put(TAG_ISO_REQUESTED, "ISO");
_tagNameMap.put(TAG_ISO_MODE, "ISO Mode");
_tagNameMap.put(TAG_DATA_DUMP, "Data Dump");
_tagNameMap.put(TAG_PROGRAM_SHIFT, "Program Shift");
_tagNameMap.put(TAG_EXPOSURE_DIFFERENCE, "Exposure Difference");
_tagNameMap.put(TAG_PREVIEW_IFD, "Preview IFD");
_tagNameMap.put(TAG_LENS_TYPE, "Lens Type");
_tagNameMap.put(TAG_FLASH_USED, "Flash Used");
_tagNameMap.put(TAG_AF_FOCUS_POSITION, "AF Focus Position");
_tagNameMap.put(TAG_SHOOTING_MODE, "Shooting Mode");
_tagNameMap.put(TAG_LENS_STOPS, "Lens Stops");
_tagNameMap.put(TAG_CONTRAST_CURVE, "Contrast Curve");
_tagNameMap.put(TAG_LIGHT_SOURCE, "Light source");
_tagNameMap.put(TAG_SHOT_INFO, "Shot Info");
_tagNameMap.put(TAG_COLOR_BALANCE, "Color Balance");
_tagNameMap.put(TAG_LENS_DATA, "Lens Data");
_tagNameMap.put(TAG_NEF_THUMBNAIL_SIZE, "NEF Thumbnail Size");
_tagNameMap.put(TAG_SENSOR_PIXEL_SIZE, "Sensor Pixel Size");
_tagNameMap.put(TAG_UNKNOWN_10, "Unknown 10");
_tagNameMap.put(TAG_SCENE_ASSIST, "Scene Assist");
_tagNameMap.put(TAG_UNKNOWN_11, "Unknown 11");
_tagNameMap.put(TAG_RETOUCH_HISTORY, "Retouch History");
_tagNameMap.put(TAG_UNKNOWN_12, "Unknown 12");
_tagNameMap.put(TAG_FLASH_SYNC_MODE, "Flash Sync Mode");
_tagNameMap.put(TAG_AUTO_FLASH_MODE, "Auto Flash Mode");
_tagNameMap.put(TAG_AUTO_FLASH_COMPENSATION, "Auto Flash Compensation");
_tagNameMap.put(TAG_EXPOSURE_SEQUENCE_NUMBER, "Exposure Sequence Number");
_tagNameMap.put(TAG_COLOR_MODE, "Color Mode");
_tagNameMap.put(TAG_UNKNOWN_20, "Unknown 20");
_tagNameMap.put(TAG_IMAGE_BOUNDARY, "Image Boundary");
_tagNameMap.put(TAG_FLASH_EXPOSURE_COMPENSATION, "Flash Exposure Compensation");
_tagNameMap.put(TAG_FLASH_BRACKET_COMPENSATION, "Flash Bracket Compensation");
_tagNameMap.put(TAG_AE_BRACKET_COMPENSATION, "AE Bracket Compensation");
_tagNameMap.put(TAG_FLASH_MODE, "Flash Mode");
_tagNameMap.put(TAG_CROP_HIGH_SPEED, "Crop High Speed");
_tagNameMap.put(TAG_EXPOSURE_TUNING, "Exposure Tuning");
_tagNameMap.put(TAG_CAMERA_SERIAL_NUMBER, "Camera Serial Number");
_tagNameMap.put(TAG_COLOR_SPACE, "Color Space");
_tagNameMap.put(TAG_VR_INFO, "VR Info");
_tagNameMap.put(TAG_IMAGE_AUTHENTICATION, "Image Authentication");
_tagNameMap.put(TAG_UNKNOWN_35, "Unknown 35");
_tagNameMap.put(TAG_ACTIVE_D_LIGHTING, "Active D-Lighting");
_tagNameMap.put(TAG_PICTURE_CONTROL, "Picture Control");
_tagNameMap.put(TAG_WORLD_TIME, "World Time");
_tagNameMap.put(TAG_ISO_INFO, "ISO Info");
_tagNameMap.put(TAG_UNKNOWN_36, "Unknown 36");
_tagNameMap.put(TAG_UNKNOWN_37, "Unknown 37");
_tagNameMap.put(TAG_UNKNOWN_38, "Unknown 38");
_tagNameMap.put(TAG_UNKNOWN_39, "Unknown 39");
_tagNameMap.put(TAG_VIGNETTE_CONTROL, "Vignette Control");
_tagNameMap.put(TAG_UNKNOWN_40, "Unknown 40");
_tagNameMap.put(TAG_UNKNOWN_41, "Unknown 41");
_tagNameMap.put(TAG_UNKNOWN_42, "Unknown 42");
_tagNameMap.put(TAG_UNKNOWN_43, "Unknown 43");
_tagNameMap.put(TAG_UNKNOWN_44, "Unknown 44");
_tagNameMap.put(TAG_UNKNOWN_45, "Unknown 45");
_tagNameMap.put(TAG_UNKNOWN_46, "Unknown 46");
_tagNameMap.put(TAG_UNKNOWN_47, "Unknown 47");
_tagNameMap.put(TAG_SCENE_MODE, "Scene Mode");
_tagNameMap.put(TAG_CAMERA_SERIAL_NUMBER_2, "Camera Serial Number");
_tagNameMap.put(TAG_IMAGE_DATA_SIZE, "Image Data Size");
_tagNameMap.put(TAG_UNKNOWN_27, "Unknown 27");
_tagNameMap.put(TAG_UNKNOWN_28, "Unknown 28");
_tagNameMap.put(TAG_IMAGE_COUNT, "Image Count");
_tagNameMap.put(TAG_DELETED_IMAGE_COUNT, "Deleted Image Count");
_tagNameMap.put(TAG_SATURATION_2, "Saturation");
_tagNameMap.put(TAG_DIGITAL_VARI_PROGRAM, "Digital Vari Program");
_tagNameMap.put(TAG_IMAGE_STABILISATION, "Image Stabilisation");
_tagNameMap.put(TAG_AF_RESPONSE, "AF Response");
_tagNameMap.put(TAG_UNKNOWN_29, "Unknown 29");
_tagNameMap.put(TAG_UNKNOWN_30, "Unknown 30");
_tagNameMap.put(TAG_MULTI_EXPOSURE, "Multi Exposure");
_tagNameMap.put(TAG_HIGH_ISO_NOISE_REDUCTION, "High ISO Noise Reduction");
_tagNameMap.put(TAG_UNKNOWN_31, "Unknown 31");
_tagNameMap.put(TAG_UNKNOWN_32, "Unknown 32");
_tagNameMap.put(TAG_UNKNOWN_33, "Unknown 33");
_tagNameMap.put(TAG_UNKNOWN_48, "Unknown 48");
_tagNameMap.put(TAG_POWER_UP_TIME, "Power Up Time");
_tagNameMap.put(TAG_AF_INFO_2, "AF Info 2");
_tagNameMap.put(TAG_FILE_INFO, "File Info");
_tagNameMap.put(TAG_AF_TUNE, "AF Tune");
_tagNameMap.put(TAG_FLASH_INFO, "Flash Info");
_tagNameMap.put(TAG_IMAGE_OPTIMISATION, "Image Optimisation");
_tagNameMap.put(TAG_IMAGE_ADJUSTMENT, "Image Adjustment");
_tagNameMap.put(TAG_CAMERA_TONE_COMPENSATION, "Tone Compensation");
_tagNameMap.put(TAG_ADAPTER, "Adapter");
_tagNameMap.put(TAG_LENS, "Lens");
_tagNameMap.put(TAG_MANUAL_FOCUS_DISTANCE, "Manual Focus Distance");
_tagNameMap.put(TAG_DIGITAL_ZOOM, "Digital Zoom");
_tagNameMap.put(TAG_CAMERA_COLOR_MODE, "Colour Mode");
_tagNameMap.put(TAG_CAMERA_HUE_ADJUSTMENT, "Camera Hue Adjustment");
_tagNameMap.put(TAG_NEF_COMPRESSION, "NEF Compression");
_tagNameMap.put(TAG_SATURATION, "Saturation");
_tagNameMap.put(TAG_NOISE_REDUCTION, "Noise Reduction");
_tagNameMap.put(TAG_LINEARIZATION_TABLE, "Linearization Table");
_tagNameMap.put(TAG_NIKON_CAPTURE_DATA, "Nikon Capture Data");
_tagNameMap.put(TAG_UNKNOWN_49, "Unknown 49");
_tagNameMap.put(TAG_UNKNOWN_50, "Unknown 50");
_tagNameMap.put(TAG_UNKNOWN_51, "Unknown 51");
_tagNameMap.put(TAG_PRINT_IM, "Print IM");
_tagNameMap.put(TAG_UNKNOWN_52, "Unknown 52");
_tagNameMap.put(TAG_UNKNOWN_53, "Unknown 53");
_tagNameMap.put(TAG_NIKON_CAPTURE_VERSION, "Nikon Capture Version");
_tagNameMap.put(TAG_NIKON_CAPTURE_OFFSETS, "Nikon Capture Offsets");
_tagNameMap.put(TAG_NIKON_SCAN, "Nikon Scan");
_tagNameMap.put(TAG_UNKNOWN_54, "Unknown 54");
_tagNameMap.put(TAG_NEF_BIT_DEPTH, "NEF Bit Depth");
_tagNameMap.put(TAG_UNKNOWN_55, "Unknown 55");
}
public NikonType2MakernoteDirectory()
{
this.setDescriptor(new NikonType2MakernoteDescriptor(this));
}
@Override
@NotNull
public String getName()
{
return "Nikon Makernote";
}
@Override
@NotNull
protected HashMap<Integer, String> getTagNameMap()
{
return _tagNameMap;
}
}