degal/exif_data.py
author Tero Marttila <terom@fixme.fi>
Sat, 13 Jun 2009 19:21:12 +0300
branchnew-exif
changeset 103 63e89dc2d6f1
parent 102 ef2c1ffdca8f
child 104 6afe59e5ffae
permissions -rw-r--r--
new exif.py seems to work now, although still missing sub-IFDs
102
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
"""
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
    EXIF file format data, including tag names, types, etc.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
    Most of this was copied with modifications from EXIFpy:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
        # Library to extract EXIF information from digital camera image files
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
        # http://sourceforge.net/projects/exif-py/
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
        # VERSION 1.1.0
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
        # Copyright (c) 2002-2007 Gene Cash All rights reserved
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
        # Copyright (c) 2007-2008 Ianaré Sévi All rights reserved
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
        # Redistribution and use in source and binary forms, with or without
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        # modification, are permitted provided that the following conditions
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
        # are met:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
        #  1. Redistributions of source code must retain the above copyright
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
        #     notice, this list of conditions and the following disclaimer.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
        #  2. Redistributions in binary form must reproduce the above
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
        #     copyright notice, this list of conditions and the following
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
        #     disclaimer in the documentation and/or other materials provided
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
        #     with the distribution.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        #  3. Neither the name of the authors nor the names of its contributors
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        #     may be used to endorse or promote products derived from this
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        #     software without specific prior written permission.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
        # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
        # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
        # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
        # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
"""
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
103
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    46
import decimal, itertools
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    47
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    48
def filter_ascii (values) :
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    49
    """
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    50
        Default post-filter for ASCII values.
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    51
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    52
        This takes a single item of string data, splits it up into strings by ASCII-NUL, and trims the induvidual strings
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    53
    """
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    54
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    55
    return [string.rstrip() for string in values[0].split('\x00') if string]
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    56
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    57
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    58
def build_ratio (num, denom) :
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    59
    """
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    60
        Builds a Decimal ratio out of the given numerator and denominator
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    61
    """
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    62
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    63
    return decimal.Decimal(num) / decimal.Decimal(denom)
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    64
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    65
def filter_ratio (values) :
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    66
    """
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    67
        Default post-filter for Ratio values.
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    68
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    69
        This takes the pairs of numerator/denominator values and builds Decimals out of them
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    70
    """
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    71
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    72
    return [build_ratio(values[i], values[i + 1]) for i in xrange(0, len(values), 2)]
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    73
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    74
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    75
# IFD Tag type information, indexed by code
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    76
#  { type_code: (type_fmt, name, filter_func) }
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    77
#
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    78
# type_fmt's that are one char will be prefixed with the count for use with struct.unpack, those with more chars will
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    79
# be repeated as many times for use with struct.unpack.
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    80
FIELD_TYPES = {
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    81
#    0x0000: (None,  'Proprietary'   ), # ??? no such type
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    82
    0x0001: ('B',   'Byte',         None            ),
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    83
    0x0002: ('s',   'ASCII',        filter_ascii    ),
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    84
    0x0003: ('H',   'Short',        None            ),
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    85
    0x0004: ('L',   'Long',         None            ),
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    86
    0x0005: ('LL',  'Ratio',        filter_ratio    ),
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    87
    0x0006: ('b',   'Signed Byte',  None            ),
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    88
    0x0007: ('s',   'Undefined',    None            ),
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    89
    0x0008: ('h',   'Signed Short', None            ),
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    90
    0x0009: ('l',   'Signed Long',  None            ),
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    91
    0x000A: ('ll',  'Signed Ratio', filter_ratio    ),
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    92
}
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    93
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    94
def map_value (spec, value) :
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    95
    """
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    96
        Map the given tag value to a printable string using the given value spec.
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    97
    """
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    98
    
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
    99
    if callable(spec):
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
   100
        # call mapping function
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
   101
        return spec(value)
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
   102
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
   103
    else:
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
   104
        return spec.get(value, repr(value))
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
   105
63e89dc2d6f1 new exif.py seems to work now, although still missing sub-IFDs
Tero Marttila <terom@fixme.fi>
parents: 102
diff changeset
   106
102
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
def make_string (seq):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
    """
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
        Filter a string to strip out non-printing chars
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
    """
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
    
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
    # screen out non-printing characters
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
    str = ''.join(c for c in seq if 32 <= c < 256)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
    if not str:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
        # no printing chars
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
        return seq
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
    else :
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
        return str
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
def make_string_uc (seq) :
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
    """
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
        # Special version to deal with the code in the first 8 bytes of a user comment.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
        # First 8 bytes gives coding system e.g. ASCII vs. JIS vs Unicode
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
        XXX: decode?
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
    """
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
    code = seq[0:8]
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
    seq = seq[8:]
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
    ## Of course, this is only correct if ASCII, and the standard explicitly
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
    ## allows JIS and Unicode.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
    return make_string(seq)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
# dictionary of main EXIF tag names
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
# first element of tuple is tag name, optional second element is
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
# another dictionary giving names to values
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
# { tag_type : (name, spec?) }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
EXIF_TAGS = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
    0x0100: ('ImageWidth', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
    0x0101: ('ImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
    0x0102: ('BitsPerSample', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
    0x0103: ('Compression',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
             {1: 'Uncompressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
              2: 'CCITT 1D',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
              3: 'T4/Group 3 Fax',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
              4: 'T6/Group 4 Fax',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
              5: 'LZW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
              6: 'JPEG (old-style)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
              7: 'JPEG',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
              8: 'Adobe Deflate',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
              9: 'JBIG B&W',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
              10: 'JBIG Color',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
              32766: 'Next',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
              32769: 'Epson ERF Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
              32771: 'CCIRLEW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
              32773: 'PackBits',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
              32809: 'Thunderscan',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
              32895: 'IT8CTPAD',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
              32896: 'IT8LW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
              32897: 'IT8MP',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
              32898: 'IT8BL',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
              32908: 'PixarFilm',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
              32909: 'PixarLog',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
              32946: 'Deflate',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
              32947: 'DCS',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
              34661: 'JBIG',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
              34676: 'SGILog',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
              34677: 'SGILog24',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
              34712: 'JPEG 2000',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
              34713: 'Nikon NEF Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
              65000: 'Kodak DCR Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
              65535: 'Pentax PEF Compressed'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
    0x0106: ('PhotometricInterpretation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
    0x0107: ('Thresholding', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
    0x010A: ('FillOrder', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
    0x010D: ('DocumentName', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
    0x010E: ('ImageDescription', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
    0x010F: ('Make', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
    0x0110: ('Model', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
    0x0111: ('StripOffsets', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
    0x0112: ('Orientation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
             {1: 'Horizontal (normal)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
              2: 'Mirrored horizontal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
              3: 'Rotated 180',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
              4: 'Mirrored vertical',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
              5: 'Mirrored horizontal then rotated 90 CCW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
              6: 'Rotated 90 CW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
              7: 'Mirrored horizontal then rotated 90 CW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
              8: 'Rotated 90 CCW'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   194
    0x0115: ('SamplesPerPixel', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
    0x0116: ('RowsPerStrip', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
    0x0117: ('StripByteCounts', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
    0x011A: ('XResolution', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   198
    0x011B: ('YResolution', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   199
    0x011C: ('PlanarConfiguration', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
    0x011D: ('PageName', make_string),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
    0x0128: ('ResolutionUnit',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
             {1: 'Not Absolute',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
              2: 'Pixels/Inch',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
              3: 'Pixels/Centimeter'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
    0x012D: ('TransferFunction', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
    0x0131: ('Software', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
    0x0132: ('DateTime', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
    0x013B: ('Artist', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
    0x013E: ('WhitePoint', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
    0x013F: ('PrimaryChromaticities', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   211
    0x0156: ('TransferRange', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   212
    0x0200: ('JPEGProc', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   213
    0x0201: ('JPEGInterchangeFormat', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   214
    0x0202: ('JPEGInterchangeFormatLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   215
    0x0211: ('YCbCrCoefficients', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   216
    0x0212: ('YCbCrSubSampling', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   217
    0x0213: ('YCbCrPositioning',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   218
             {1: 'Centered',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
              2: 'Co-sited'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
    0x0214: ('ReferenceBlackWhite', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
    
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
    0x4746: ('Rating', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
    
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
    0x828D: ('CFARepeatPatternDim', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   225
    0x828E: ('CFAPattern', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
    0x828F: ('BatteryLevel', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227
    0x8298: ('Copyright', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
    0x829A: ('ExposureTime', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
    0x829D: ('FNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
    0x83BB: ('IPTC/NAA', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
    0x8769: ('ExifOffset', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   232
    0x8773: ('InterColorProfile', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   233
    0x8822: ('ExposureProgram',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
             {0: 'Unidentified',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   235
              1: 'Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   236
              2: 'Program Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
              3: 'Aperture Priority',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
              4: 'Shutter Priority',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
              5: 'Program Creative',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   240
              6: 'Program Action',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   241
              7: 'Portrait Mode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   242
              8: 'Landscape Mode'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
    0x8824: ('SpectralSensitivity', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
    0x8825: ('GPSInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   245
    0x8827: ('ISOSpeedRatings', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   246
    0x8828: ('OECF', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
    0x9000: ('ExifVersion', make_string),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   248
    0x9003: ('DateTimeOriginal', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   249
    0x9004: ('DateTimeDigitized', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   250
    0x9101: ('ComponentsConfiguration',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   251
             {0: '',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   252
              1: 'Y',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   253
              2: 'Cb',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   254
              3: 'Cr',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   255
              4: 'Red',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   256
              5: 'Green',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   257
              6: 'Blue'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   258
    0x9102: ('CompressedBitsPerPixel', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   259
    0x9201: ('ShutterSpeedValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   260
    0x9202: ('ApertureValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   261
    0x9203: ('BrightnessValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   262
    0x9204: ('ExposureBiasValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   263
    0x9205: ('MaxApertureValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   264
    0x9206: ('SubjectDistance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   265
    0x9207: ('MeteringMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   266
             {0: 'Unidentified',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   267
              1: 'Average',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
              2: 'CenterWeightedAverage',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   269
              3: 'Spot',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   270
              4: 'MultiSpot',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
              5: 'Pattern'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
    0x9208: ('LightSource',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
             {0: 'Unknown',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   274
              1: 'Daylight',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
              2: 'Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   276
              3: 'Tungsten',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   277
              9: 'Fine Weather',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
              10: 'Flash',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   279
              11: 'Shade',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
              12: 'Daylight Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
              13: 'Day White Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
              14: 'Cool White Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
              15: 'White Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   284
              17: 'Standard Light A',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   285
              18: 'Standard Light B',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   286
              19: 'Standard Light C',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   287
              20: 'D55',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   288
              21: 'D65',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   289
              22: 'D75',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   290
              255: 'Other'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   291
    0x9209: ('Flash',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   292
             {0: 'No',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   293
              1: 'Fired',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   294
              5: 'Fired (?)', # no return sensed
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   295
              7: 'Fired (!)', # return sensed
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   296
              9: 'Fill Fired',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   297
              13: 'Fill Fired (?)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   298
              15: 'Fill Fired (!)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   299
              16: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   300
              24: 'Auto Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   301
              25: 'Auto Fired',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   302
              29: 'Auto Fired (?)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   303
              31: 'Auto Fired (!)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   304
              32: 'Not Available'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   305
    0x920A: ('FocalLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   306
    0x9214: ('SubjectArea', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   307
    0x927C: ('MakerNote', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   308
    0x9286: ('UserComment', make_string_uc),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   309
    0x9290: ('SubSecTime', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   310
    0x9291: ('SubSecTimeOriginal', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   311
    0x9292: ('SubSecTimeDigitized', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   312
    
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   313
    # used by Windows Explorer
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   314
    0x9C9B: ('XPTitle', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   315
    0x9C9C: ('XPComment', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   316
    0x9C9D: ('XPAuthor', ), #(ignored by Windows Explorer if Artist exists)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   317
    0x9C9E: ('XPKeywords', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   318
    0x9C9F: ('XPSubject', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   319
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   320
    0xA000: ('FlashPixVersion', make_string),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   321
    0xA001: ('ColorSpace',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   322
             {1: 'sRGB',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   323
              2: 'Adobe RGB',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   324
              65535: 'Uncalibrated'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   325
    0xA002: ('ExifImageWidth', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   326
    0xA003: ('ExifImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   327
    0xA005: ('InteroperabilityOffset', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   328
    0xA20B: ('FlashEnergy', ),               # 0x920B in TIFF/EP
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   329
    0xA20C: ('SpatialFrequencyResponse', ),  # 0x920C
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   330
    0xA20E: ('FocalPlaneXResolution', ),     # 0x920E
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   331
    0xA20F: ('FocalPlaneYResolution', ),     # 0x920F
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   332
    0xA210: ('FocalPlaneResolutionUnit', ),  # 0x9210
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   333
    0xA214: ('SubjectLocation', ),           # 0x9214
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   334
    0xA215: ('ExposureIndex', ),             # 0x9215
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   335
    0xA217: ('SensingMethod',                # 0x9217
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   336
             {1: 'Not defined',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   337
              2: 'One-chip color area',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   338
              3: 'Two-chip color area',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   339
              4: 'Three-chip color area',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   340
              5: 'Color sequential area',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   341
              7: 'Trilinear',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   342
              8: 'Color sequential linear'}),             
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   343
    0xA300: ('FileSource',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   344
             {1: 'Film Scanner',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   345
              2: 'Reflection Print Scanner',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   346
              3: 'Digital Camera'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   347
    0xA301: ('SceneType',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   348
             {1: 'Directly Photographed'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   349
    0xA302: ('CVAPattern', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   350
    0xA401: ('CustomRendered',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   351
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   352
              1: 'Custom'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   353
    0xA402: ('ExposureMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   354
             {0: 'Auto Exposure',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   355
              1: 'Manual Exposure',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   356
              2: 'Auto Bracket'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   357
    0xA403: ('WhiteBalance',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   358
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   359
              1: 'Manual'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   360
    0xA404: ('DigitalZoomRatio', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   361
    0xA405: ('FocalLengthIn35mmFilm', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   362
    0xA406: ('SceneCaptureType',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   363
             {0: 'Standard',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   364
              1: 'Landscape',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   365
              2: 'Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   366
              3: 'Night)'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   367
    0xA407: ('GainControl',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   368
             {0: 'None',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   369
              1: 'Low gain up',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   370
              2: 'High gain up',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   371
              3: 'Low gain down',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   372
              4: 'High gain down'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   373
    0xA408: ('Contrast',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   374
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   375
              1: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   376
              2: 'Hard'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   377
    0xA409: ('Saturation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   378
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   379
              1: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   380
              2: 'Hard'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   381
    0xA40A: ('Sharpness',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   382
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   383
              1: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   384
              2: 'Hard'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   385
    0xA40B: ('DeviceSettingDescription', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   386
    0xA40C: ('SubjectDistanceRange', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   387
    0xA500: ('Gamma', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   388
    0xC4A5: ('PrintIM', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   389
    0xEA1C:	('Padding', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   390
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   391
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   392
# interoperability tags
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   393
INTR_TAGS = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   394
    0x0001: ('InteroperabilityIndex', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   395
    0x0002: ('InteroperabilityVersion', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   396
    0x1000: ('RelatedImageFileFormat', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   397
    0x1001: ('RelatedImageWidth', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   398
    0x1002: ('RelatedImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   399
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   400
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   401
# GPS tags (not used yet, haven't seen camera with GPS)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   402
GPS_TAGS = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   403
    0x0000: ('GPSVersionID', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   404
    0x0001: ('GPSLatitudeRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   405
    0x0002: ('GPSLatitude', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   406
    0x0003: ('GPSLongitudeRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   407
    0x0004: ('GPSLongitude', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   408
    0x0005: ('GPSAltitudeRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   409
    0x0006: ('GPSAltitude', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   410
    0x0007: ('GPSTimeStamp', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   411
    0x0008: ('GPSSatellites', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   412
    0x0009: ('GPSStatus', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   413
    0x000A: ('GPSMeasureMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   414
    0x000B: ('GPSDOP', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   415
    0x000C: ('GPSSpeedRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   416
    0x000D: ('GPSSpeed', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   417
    0x000E: ('GPSTrackRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   418
    0x000F: ('GPSTrack', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   419
    0x0010: ('GPSImgDirectionRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   420
    0x0011: ('GPSImgDirection', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   421
    0x0012: ('GPSMapDatum', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   422
    0x0013: ('GPSDestLatitudeRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   423
    0x0014: ('GPSDestLatitude', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   424
    0x0015: ('GPSDestLongitudeRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   425
    0x0016: ('GPSDestLongitude', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   426
    0x0017: ('GPSDestBearingRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   427
    0x0018: ('GPSDestBearing', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   428
    0x0019: ('GPSDestDistanceRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   429
    0x001A: ('GPSDestDistance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   430
    0x001D: ('GPSDate', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   431
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   432
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   433
# Ignore these tags when quick processing
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   434
# 0x927C is MakerNote Tags
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   435
# 0x9286 is user comment
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   436
IGNORE_TAGS=(0x9286, 0x927C)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   437
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   438
# http://tomtia.plala.jp/DigitalCamera/MakerNote/index.asp
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   439
def nikon_ev_bias(seq):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   440
    # First digit seems to be in steps of 1/6 EV.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   441
    # Does the third value mean the step size?  It is usually 6,
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   442
    # but it is 12 for the ExposureDifference.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   443
    #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   444
    # Check for an error condition that could cause a crash.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   445
    # This only happens if something has gone really wrong in
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   446
    # reading the Nikon MakerNote.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   447
    if len( seq ) < 4 : return ""
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   448
    #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   449
    if seq == [252, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   450
        return "-2/3 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   451
    if seq == [253, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   452
        return "-1/2 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   453
    if seq == [254, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   454
        return "-1/3 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   455
    if seq == [0, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   456
        return "0 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   457
    if seq == [2, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   458
        return "+1/3 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   459
    if seq == [3, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   460
        return "+1/2 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   461
    if seq == [4, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   462
        return "+2/3 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   463
    # Handle combinations not in the table.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   464
    a = seq[0]
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   465
    # Causes headaches for the +/- logic, so special case it.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   466
    if a == 0:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   467
        return "0 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   468
    if a > 127:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   469
        a = 256 - a
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   470
        ret_str = "-"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   471
    else:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   472
        ret_str = "+"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   473
    b = seq[2]	# Assume third value means the step size
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   474
    whole = a / b
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   475
    a = a % b
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   476
    if whole != 0:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   477
        ret_str = ret_str + str(whole) + " "
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   478
    if a == 0:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   479
        ret_str = ret_str + "EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   480
    else:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   481
        r = Ratio(a, b)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   482
        ret_str = ret_str + r.__repr__() + " EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   483
    return ret_str
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   484
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   485
# Nikon E99x MakerNote Tags
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   486
MAKERNOTE_NIKON_NEWER_TAGS={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   487
    0x0001: ('MakernoteVersion', make_string),	# Sometimes binary
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   488
    0x0002: ('ISOSetting', make_string),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   489
    0x0003: ('ColorMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   490
    0x0004: ('Quality', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   491
    0x0005: ('Whitebalance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   492
    0x0006: ('ImageSharpening', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   493
    0x0007: ('FocusMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   494
    0x0008: ('FlashSetting', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   495
    0x0009: ('AutoFlashMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   496
    0x000B: ('WhiteBalanceBias', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   497
    0x000C: ('WhiteBalanceRBCoeff', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   498
    0x000D: ('ProgramShift', nikon_ev_bias),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   499
    # Nearly the same as the other EV vals, but step size is 1/12 EV (?)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   500
    0x000E: ('ExposureDifference', nikon_ev_bias),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   501
    0x000F: ('ISOSelection', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   502
    0x0011: ('NikonPreview', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   503
    0x0012: ('FlashCompensation', nikon_ev_bias),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   504
    0x0013: ('ISOSpeedRequested', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   505
    0x0016: ('PhotoCornerCoordinates', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   506
    # 0x0017: Unknown, but most likely an EV value
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   507
    0x0018: ('FlashBracketCompensationApplied', nikon_ev_bias),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   508
    0x0019: ('AEBracketCompensationApplied', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   509
    0x001A: ('ImageProcessing', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   510
    0x001B: ('CropHiSpeed', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   511
    0x001D: ('SerialNumber', ),	# Conflict with 0x00A0 ?
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   512
    0x001E: ('ColorSpace', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   513
    0x001F: ('VRInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   514
    0x0020: ('ImageAuthentication', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   515
    0x0022: ('ActiveDLighting', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   516
    0x0023: ('PictureControl', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   517
    0x0024: ('WorldTime', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   518
    0x0025: ('ISOInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   519
    0x0080: ('ImageAdjustment', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   520
    0x0081: ('ToneCompensation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   521
    0x0082: ('AuxiliaryLens', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   522
    0x0083: ('LensType', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   523
    0x0084: ('LensMinMaxFocalMaxAperture', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   524
    0x0085: ('ManualFocusDistance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   525
    0x0086: ('DigitalZoomFactor', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   526
    0x0087: ('FlashMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   527
             {0x00: 'Did Not Fire',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   528
              0x01: 'Fired, Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   529
              0x07: 'Fired, External',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   530
              0x08: 'Fired, Commander Mode ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   531
              0x09: 'Fired, TTL Mode'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   532
    0x0088: ('AFFocusPosition',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   533
             {0x0000: 'Center',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   534
              0x0100: 'Top',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   535
              0x0200: 'Bottom',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   536
              0x0300: 'Left',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   537
              0x0400: 'Right'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   538
    0x0089: ('BracketingMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   539
             {0x00: 'Single frame, no bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   540
              0x01: 'Continuous, no bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   541
              0x02: 'Timer, no bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   542
              0x10: 'Single frame, exposure bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   543
              0x11: 'Continuous, exposure bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   544
              0x12: 'Timer, exposure bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   545
              0x40: 'Single frame, white balance bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   546
              0x41: 'Continuous, white balance bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   547
              0x42: 'Timer, white balance bracketing'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   548
    0x008A: ('AutoBracketRelease', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   549
    0x008B: ('LensFStops', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   550
    0x008C: ('NEFCurve1', ),	# ExifTool calls this 'ContrastCurve'
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   551
    0x008D: ('ColorMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   552
    0x008F: ('SceneMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   553
    0x0090: ('LightingType', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   554
    0x0091: ('ShotInfo', ),	# First 4 bytes are a version number in ASCII
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   555
    0x0092: ('HueAdjustment', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   556
    # ExifTool calls this 'NEFCompression', should be 1-4
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   557
    0x0093: ('Compression', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   558
    0x0094: ('Saturation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   559
             {-3: 'B&W',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   560
              -2: '-2',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   561
              -1: '-1',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   562
              0: '0',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   563
              1: '1',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   564
              2: '2'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   565
    0x0095: ('NoiseReduction', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   566
    0x0096: ('NEFCurve2', ),	# ExifTool calls this 'LinearizationTable'
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   567
    0x0097: ('ColorBalance', ),	# First 4 bytes are a version number in ASCII
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   568
    0x0098: ('LensData', ),	# First 4 bytes are a version number in ASCII
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   569
    0x0099: ('RawImageCenter', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   570
    0x009A: ('SensorPixelSize', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   571
    0x009C: ('Scene Assist', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   572
    0x009E: ('RetouchHistory', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   573
    0x00A0: ('SerialNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   574
    0x00A2: ('ImageDataSize', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   575
    # 00A3: unknown - a single byte 0
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   576
    # 00A4: In NEF, looks like a 4 byte ASCII version number ('0200')
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   577
    0x00A5: ('ImageCount', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   578
    0x00A6: ('DeletedImageCount', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   579
    0x00A7: ('TotalShutterReleases', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   580
    # First 4 bytes are a version number in ASCII, with version specific
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   581
    # info to follow.  Its hard to treat it as a string due to embedded nulls.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   582
    0x00A8: ('FlashInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   583
    0x00A9: ('ImageOptimization', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   584
    0x00AA: ('Saturation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   585
    0x00AB: ('DigitalVariProgram', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   586
    0x00AC: ('ImageStabilization', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   587
    0x00AD: ('Responsive AF', ),	# 'AFResponse'
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   588
    0x00B0: ('MultiExposure', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   589
    0x00B1: ('HighISONoiseReduction', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   590
    0x00B7: ('AFInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   591
    0x00B8: ('FileInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   592
    # 00B9: unknown
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   593
    0x0100: ('DigitalICE', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   594
    0x0103: ('PreviewCompression',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   595
             {1: 'Uncompressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   596
              2: 'CCITT 1D',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   597
              3: 'T4/Group 3 Fax',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   598
              4: 'T6/Group 4 Fax',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   599
              5: 'LZW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   600
              6: 'JPEG (old-style)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   601
              7: 'JPEG',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   602
              8: 'Adobe Deflate',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   603
              9: 'JBIG B&W',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   604
              10: 'JBIG Color',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   605
              32766: 'Next',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   606
              32769: 'Epson ERF Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   607
              32771: 'CCIRLEW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   608
              32773: 'PackBits',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   609
              32809: 'Thunderscan',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   610
              32895: 'IT8CTPAD',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   611
              32896: 'IT8LW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   612
              32897: 'IT8MP',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   613
              32898: 'IT8BL',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   614
              32908: 'PixarFilm',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   615
              32909: 'PixarLog',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   616
              32946: 'Deflate',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   617
              32947: 'DCS',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   618
              34661: 'JBIG',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   619
              34676: 'SGILog',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   620
              34677: 'SGILog24',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   621
              34712: 'JPEG 2000',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   622
              34713: 'Nikon NEF Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   623
              65000: 'Kodak DCR Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   624
              65535: 'Pentax PEF Compressed',}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   625
    0x0201: ('PreviewImageStart', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   626
    0x0202: ('PreviewImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   627
    0x0213: ('PreviewYCbCrPositioning',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   628
             {1: 'Centered',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   629
              2: 'Co-sited'}), 
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   630
    0x0010: ('DataDump', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   631
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   632
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   633
MAKERNOTE_NIKON_OLDER_TAGS = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   634
    0x0003: ('Quality',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   635
             {1: 'VGA Basic',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   636
              2: 'VGA Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   637
              3: 'VGA Fine',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   638
              4: 'SXGA Basic',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   639
              5: 'SXGA Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   640
              6: 'SXGA Fine'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   641
    0x0004: ('ColorMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   642
             {1: 'Color',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   643
              2: 'Monochrome'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   644
    0x0005: ('ImageAdjustment',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   645
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   646
              1: 'Bright+',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   647
              2: 'Bright-',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   648
              3: 'Contrast+',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   649
              4: 'Contrast-'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   650
    0x0006: ('CCDSpeed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   651
             {0: 'ISO 80',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   652
              2: 'ISO 160',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   653
              4: 'ISO 320',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   654
              5: 'ISO 100'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   655
    0x0007: ('WhiteBalance',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   656
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   657
              1: 'Preset',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   658
              2: 'Daylight',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   659
              3: 'Incandescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   660
              4: 'Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   661
              5: 'Cloudy',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   662
              6: 'Speed Light'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   663
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   664
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   665
# decode Olympus SpecialMode tag in MakerNote
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   666
def olympus_special_mode(v):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   667
    a={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   668
        0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   669
        1: 'Unknown',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   670
        2: 'Fast',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   671
        3: 'Panorama'}
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   672
    b={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   673
        0: 'Non-panoramic',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   674
        1: 'Left to right',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   675
        2: 'Right to left',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   676
        3: 'Bottom to top',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   677
        4: 'Top to bottom'}
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   678
    if v[0] not in a or v[2] not in b:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   679
        return v
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   680
    return '%s - sequence %d - %s' % (a[v[0]], v[1], b[v[2]])
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   681
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   682
MAKERNOTE_OLYMPUS_TAGS={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   683
    # ah HAH! those sneeeeeaky bastids! this is how they get past the fact
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   684
    # that a JPEG thumbnail is not allowed in an uncompressed TIFF file
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   685
    0x0100: ('JPEGThumbnail', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   686
    0x0200: ('SpecialMode', olympus_special_mode),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   687
    0x0201: ('JPEGQual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   688
             {1: 'SQ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   689
              2: 'HQ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   690
              3: 'SHQ'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   691
    0x0202: ('Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   692
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   693
             1: 'Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   694
             2: 'SuperMacro'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   695
    0x0203: ('BWMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   696
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   697
             1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   698
    0x0204: ('DigitalZoom', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   699
    0x0205: ('FocalPlaneDiagonal', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   700
    0x0206: ('LensDistortionParams', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   701
    0x0207: ('SoftwareRelease', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   702
    0x0208: ('PictureInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   703
    0x0209: ('CameraID', make_string), # print as string
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   704
    0x0F00: ('DataDump', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   705
    0x0300: ('PreCaptureFrames', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   706
    0x0404: ('SerialNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   707
    0x1000: ('ShutterSpeedValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   708
    0x1001: ('ISOValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   709
    0x1002: ('ApertureValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   710
    0x1003: ('BrightnessValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   711
    0x1004: ('FlashMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   712
    0x1004: ('FlashMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   713
       {2: 'On',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   714
        3: 'Off'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   715
    0x1005: ('FlashDevice',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   716
       {0: 'None',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   717
        1: 'Internal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   718
        4: 'External',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   719
        5: 'Internal + External'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   720
    0x1006: ('ExposureCompensation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   721
    0x1007: ('SensorTemperature', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   722
    0x1008: ('LensTemperature', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   723
    0x100b: ('FocusMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   724
       {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   725
        1: 'Manual'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   726
    0x1017: ('RedBalance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   727
    0x1018: ('BlueBalance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   728
    0x101a: ('SerialNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   729
    0x1023: ('FlashExposureComp', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   730
    0x1026: ('ExternalFlashBounce',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   731
       {0: 'No',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   732
        1: 'Yes'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   733
    0x1027: ('ExternalFlashZoom', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   734
    0x1028: ('ExternalFlashMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   735
    0x1029: ('Contrast 	int16u',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   736
       {0: 'High',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   737
        1: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   738
        2: 'Low'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   739
    0x102a: ('SharpnessFactor', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   740
    0x102b: ('ColorControl', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   741
    0x102c: ('ValidBits', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   742
    0x102d: ('CoringFilter', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   743
    0x102e: ('OlympusImageWidth', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   744
    0x102f: ('OlympusImageHeight', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   745
    0x1034: ('CompressionRatio', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   746
    0x1035: ('PreviewImageValid',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   747
       {0: 'No',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   748
        1: 'Yes'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   749
    0x1036: ('PreviewImageStart', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   750
    0x1037: ('PreviewImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   751
    0x1039: ('CCDScanMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   752
       {0: 'Interlaced',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   753
        1: 'Progressive'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   754
    0x103a: ('NoiseReduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   755
       {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   756
        1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   757
    0x103b: ('InfinityLensStep', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   758
    0x103c: ('NearLensStep', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   759
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   760
    # TODO - these need extra definitions
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   761
    # http://search.cpan.org/src/EXIFTOOL/Image-ExifTool-6.90/html/TagNames/Olympus.html
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   762
    0x2010: ('Equipment', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   763
    0x2020: ('CameraSettings', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   764
    0x2030: ('RawDevelopment', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   765
    0x2040: ('ImageProcessing', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   766
    0x2050: ('FocusInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   767
    0x3000: ('RawInfo ', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   768
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   769
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   770
# 0x2020 CameraSettings
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   771
MAKERNOTE_OLYMPUS_TAG_0x2020={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   772
    0x0100: ('PreviewImageValid',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   773
             {0: 'No',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   774
              1: 'Yes'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   775
    0x0101: ('PreviewImageStart', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   776
    0x0102: ('PreviewImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   777
    0x0200: ('ExposureMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   778
             {1: 'Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   779
              2: 'Program',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   780
              3: 'Aperture-priority AE',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   781
              4: 'Shutter speed priority AE',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   782
              5: 'Program-shift'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   783
    0x0201: ('AELock',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   784
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   785
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   786
    0x0202: ('MeteringMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   787
             {2: 'Center Weighted',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   788
              3: 'Spot',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   789
              5: 'ESP',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   790
              261: 'Pattern+AF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   791
              515: 'Spot+Highlight control',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   792
              1027: 'Spot+Shadow control'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   793
    0x0300: ('MacroMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   794
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   795
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   796
    0x0301: ('FocusMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   797
             {0: 'Single AF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   798
              1: 'Sequential shooting AF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   799
              2: 'Continuous AF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   800
              3: 'Multi AF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   801
              10: 'MF'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   802
    0x0302: ('FocusProcess',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   803
             {0: 'AF Not Used',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   804
              1: 'AF Used'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   805
    0x0303: ('AFSearch',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   806
             {0: 'Not Ready',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   807
              1: 'Ready'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   808
    0x0304: ('AFAreas', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   809
    0x0401: ('FlashExposureCompensation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   810
    0x0500: ('WhiteBalance2',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   811
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   812
             16: '7500K (Fine Weather with Shade)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   813
             17: '6000K (Cloudy)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   814
             18: '5300K (Fine Weather)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   815
             20: '3000K (Tungsten light)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   816
             21: '3600K (Tungsten light-like)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   817
             33: '6600K (Daylight fluorescent)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   818
             34: '4500K (Neutral white fluorescent)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   819
             35: '4000K (Cool white fluorescent)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   820
             48: '3600K (Tungsten light-like)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   821
             256: 'Custom WB 1',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   822
             257: 'Custom WB 2',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   823
             258: 'Custom WB 3',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   824
             259: 'Custom WB 4',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   825
             512: 'Custom WB 5400K',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   826
             513: 'Custom WB 2900K',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   827
             514: 'Custom WB 8000K', }),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   828
    0x0501: ('WhiteBalanceTemperature', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   829
    0x0502: ('WhiteBalanceBracket', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   830
    0x0503: ('CustomSaturation', ), # (3 numbers: 1. CS Value, 2. Min, 3. Max)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   831
    0x0504: ('ModifiedSaturation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   832
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   833
              1: 'CM1 (Red Enhance)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   834
              2: 'CM2 (Green Enhance)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   835
              3: 'CM3 (Blue Enhance)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   836
              4: 'CM4 (Skin Tones)'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   837
    0x0505: ('ContrastSetting', ), # (3 numbers: 1. Contrast, 2. Min, 3. Max)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   838
    0x0506: ('SharpnessSetting', ), # (3 numbers: 1. Sharpness, 2. Min, 3. Max)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   839
    0x0507: ('ColorSpace',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   840
             {0: 'sRGB',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   841
              1: 'Adobe RGB',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   842
              2: 'Pro Photo RGB'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   843
    0x0509: ('SceneMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   844
             {0: 'Standard',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   845
              6: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   846
              7: 'Sport',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   847
              8: 'Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   848
              9: 'Landscape+Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   849
             10: 'Landscape',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   850
             11: 'Night scene',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   851
             13: 'Panorama',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   852
             16: 'Landscape+Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   853
             17: 'Night+Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   854
             19: 'Fireworks',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   855
             20: 'Sunset',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   856
             22: 'Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   857
             25: 'Documents',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   858
             26: 'Museum',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   859
             28: 'Beach&Snow',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   860
             30: 'Candle',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   861
             35: 'Underwater Wide1',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   862
             36: 'Underwater Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   863
             39: 'High Key',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   864
             40: 'Digital Image Stabilization',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   865
             44: 'Underwater Wide2',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   866
             45: 'Low Key',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   867
             46: 'Children',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   868
             48: 'Nature Macro'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   869
    0x050a: ('NoiseReduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   870
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   871
              1: 'Noise Reduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   872
              2: 'Noise Filter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   873
              3: 'Noise Reduction + Noise Filter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   874
              4: 'Noise Filter (ISO Boost)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   875
              5: 'Noise Reduction + Noise Filter (ISO Boost)'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   876
    0x050b: ('DistortionCorrection',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   877
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   878
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   879
    0x050c: ('ShadingCompensation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   880
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   881
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   882
    0x050d: ('CompressionFactor', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   883
    0x050f: ('Gradation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   884
             {'-1 -1 1': 'Low Key',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   885
              '0 -1 1': 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   886
              '1 -1 1': 'High Key'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   887
    0x0520: ('PictureMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   888
             {1: 'Vivid',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   889
              2: 'Natural',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   890
              3: 'Muted',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   891
              256: 'Monotone',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   892
              512: 'Sepia'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   893
    0x0521: ('PictureModeSaturation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   894
    0x0522: ('PictureModeHue?', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   895
    0x0523: ('PictureModeContrast', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   896
    0x0524: ('PictureModeSharpness', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   897
    0x0525: ('PictureModeBWFilter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   898
             {0: 'n/a',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   899
              1: 'Neutral',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   900
              2: 'Yellow',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   901
              3: 'Orange',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   902
              4: 'Red',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   903
              5: 'Green'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   904
    0x0526: ('PictureModeTone',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   905
             {0: 'n/a',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   906
              1: 'Neutral',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   907
              2: 'Sepia',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   908
              3: 'Blue',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   909
              4: 'Purple',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   910
              5: 'Green'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   911
    0x0600: ('Sequence', ), # 2 or 3 numbers: 1. Mode, 2. Shot number, 3. Mode bits
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   912
    0x0601: ('PanoramaMode', ), # (2 numbers: 1. Mode, 2. Shot number)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   913
    0x0603: ('ImageQuality2',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   914
             {1: 'SQ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   915
              2: 'HQ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   916
              3: 'SHQ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   917
              4: 'RAW'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   918
    0x0901: ('ManometerReading', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   919
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   920
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   921
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   922
MAKERNOTE_CASIO_TAGS={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   923
    0x0001: ('RecordingMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   924
             {1: 'Single Shutter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   925
              2: 'Panorama',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   926
              3: 'Night Scene',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   927
              4: 'Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   928
              5: 'Landscape'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   929
    0x0002: ('Quality',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   930
             {1: 'Economy',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   931
              2: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   932
              3: 'Fine'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   933
    0x0003: ('FocusingMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   934
             {2: 'Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   935
              3: 'Auto Focus',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   936
              4: 'Manual Focus',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   937
              5: 'Infinity'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   938
    0x0004: ('FlashMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   939
             {1: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   940
              2: 'On',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   941
              3: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   942
              4: 'Red Eye Reduction'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   943
    0x0005: ('FlashIntensity',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   944
             {11: 'Weak',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   945
              13: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   946
              15: 'Strong'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   947
    0x0006: ('Object Distance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   948
    0x0007: ('WhiteBalance',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   949
             {1: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   950
              2: 'Tungsten',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   951
              3: 'Daylight',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   952
              4: 'Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   953
              5: 'Shade',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   954
              129: 'Manual'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   955
    0x000B: ('Sharpness',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   956
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   957
              1: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   958
              2: 'Hard'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   959
    0x000C: ('Contrast',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   960
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   961
              1: 'Low',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   962
              2: 'High'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   963
    0x000D: ('Saturation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   964
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   965
              1: 'Low',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   966
              2: 'High'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   967
    0x0014: ('CCDSpeed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   968
             {64: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   969
              80: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   970
              100: 'High',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   971
              125: '+1.0',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   972
              244: '+3.0',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   973
              250: '+2.0'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   974
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   975
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   976
MAKERNOTE_FUJIFILM_TAGS={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   977
    0x0000: ('NoteVersion', make_string),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   978
    0x1000: ('Quality', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   979
    0x1001: ('Sharpness',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   980
             {1: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   981
              2: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   982
              3: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   983
              4: 'Hard',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   984
              5: 'Hard'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   985
    0x1002: ('WhiteBalance',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   986
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   987
              256: 'Daylight',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   988
              512: 'Cloudy',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   989
              768: 'DaylightColor-Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   990
              769: 'DaywhiteColor-Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   991
              770: 'White-Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   992
              1024: 'Incandescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   993
              3840: 'Custom'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   994
    0x1003: ('Color',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   995
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   996
              256: 'High',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   997
              512: 'Low'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   998
    0x1004: ('Tone',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   999
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1000
              256: 'High',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1001
              512: 'Low'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1002
    0x1010: ('FlashMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1003
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1004
              1: 'On',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1005
              2: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1006
              3: 'Red Eye Reduction'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1007
    0x1011: ('FlashStrength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1008
    0x1020: ('Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1009
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1010
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1011
    0x1021: ('FocusMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1012
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1013
              1: 'Manual'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1014
    0x1030: ('SlowSync',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1015
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1016
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1017
    0x1031: ('PictureMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1018
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1019
              1: 'Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1020
              2: 'Landscape',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1021
              4: 'Sports',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1022
              5: 'Night',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1023
              6: 'Program AE',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1024
              256: 'Aperture Priority AE',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1025
              512: 'Shutter Priority AE',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1026
              768: 'Manual Exposure'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1027
    0x1100: ('MotorOrBracket',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1028
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1029
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1030
    0x1300: ('BlurWarning',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1031
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1032
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1033
    0x1301: ('FocusWarning',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1034
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1035
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1036
    0x1302: ('AEWarning',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1037
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1038
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1039
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1040
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1041
MAKERNOTE_CANON_TAGS = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1042
    0x0006: ('ImageType', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1043
    0x0007: ('FirmwareVersion', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1044
    0x0008: ('ImageNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1045
    0x0009: ('OwnerName', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1046
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1047
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1048
# this is in element offset, name, optional value dictionary format
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1049
MAKERNOTE_CANON_TAG_0x001 = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1050
    1: ('Macromode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1051
        {1: 'Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1052
         2: 'Normal'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1053
    2: ('SelfTimer', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1054
    3: ('Quality',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1055
        {2: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1056
         3: 'Fine',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1057
         5: 'Superfine'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1058
    4: ('FlashMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1059
        {0: 'Flash Not Fired',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1060
         1: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1061
         2: 'On',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1062
         3: 'Red-Eye Reduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1063
         4: 'Slow Synchro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1064
         5: 'Auto + Red-Eye Reduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1065
         6: 'On + Red-Eye Reduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1066
         16: 'external flash'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1067
    5: ('ContinuousDriveMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1068
        {0: 'Single Or Timer',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1069
         1: 'Continuous'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1070
    7: ('FocusMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1071
        {0: 'One-Shot',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1072
         1: 'AI Servo',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1073
         2: 'AI Focus',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1074
         3: 'MF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1075
         4: 'Single',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1076
         5: 'Continuous',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1077
         6: 'MF'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1078
    10: ('ImageSize',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1079
         {0: 'Large',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1080
          1: 'Medium',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1081
          2: 'Small'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1082
    11: ('EasyShootingMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1083
         {0: 'Full Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1084
          1: 'Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1085
          2: 'Landscape',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1086
          3: 'Fast Shutter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1087
          4: 'Slow Shutter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1088
          5: 'Night',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1089
          6: 'B&W',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1090
          7: 'Sepia',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1091
          8: 'Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1092
          9: 'Sports',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1093
          10: 'Macro/Close-Up',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1094
          11: 'Pan Focus'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1095
    12: ('DigitalZoom',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1096
         {0: 'None',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1097
          1: '2x',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1098
          2: '4x'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1099
    13: ('Contrast',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1100
         {0xFFFF: 'Low',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1101
          0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1102
          1: 'High'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1103
    14: ('Saturation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1104
         {0xFFFF: 'Low',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1105
          0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1106
          1: 'High'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1107
    15: ('Sharpness',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1108
         {0xFFFF: 'Low',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1109
          0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1110
          1: 'High'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1111
    16: ('ISO',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1112
         {0: 'See ISOSpeedRatings Tag',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1113
          15: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1114
          16: '50',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1115
          17: '100',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1116
          18: '200',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1117
          19: '400'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1118
    17: ('MeteringMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1119
         {3: 'Evaluative',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1120
          4: 'Partial',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1121
          5: 'Center-weighted'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1122
    18: ('FocusType',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1123
         {0: 'Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1124
          1: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1125
          3: 'Close-Up (Macro)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1126
          8: 'Locked (Pan Mode)'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1127
    19: ('AFPointSelected',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1128
         {0x3000: 'None (MF)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1129
          0x3001: 'Auto-Selected',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1130
          0x3002: 'Right',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1131
          0x3003: 'Center',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1132
          0x3004: 'Left'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1133
    20: ('ExposureMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1134
         {0: 'Easy Shooting',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1135
          1: 'Program',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1136
          2: 'Tv-priority',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1137
          3: 'Av-priority',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1138
          4: 'Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1139
          5: 'A-DEP'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1140
    23: ('LongFocalLengthOfLensInFocalUnits', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1141
    24: ('ShortFocalLengthOfLensInFocalUnits', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1142
    25: ('FocalUnitsPerMM', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1143
    28: ('FlashActivity',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1144
         {0: 'Did Not Fire',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1145
          1: 'Fired'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1146
    29: ('FlashDetails',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1147
         {14: 'External E-TTL',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1148
          13: 'Internal Flash',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1149
          11: 'FP Sync Used',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1150
          7: '2nd("Rear")-Curtain Sync Used',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1151
          4: 'FP Sync Enabled'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1152
    32: ('FocusMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1153
         {0: 'Single',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1154
          1: 'Continuous'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1155
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1156
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1157
MAKERNOTE_CANON_TAG_0x004 = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1158
    7: ('WhiteBalance',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1159
        {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1160
         1: 'Sunny',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1161
         2: 'Cloudy',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1162
         3: 'Tungsten',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1163
         4: 'Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1164
         5: 'Flash',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1165
         6: 'Custom'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1166
    9: ('SequenceNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1167
    14: ('AFPointUsed', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1168
    15: ('FlashBias',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1169
         {0xFFC0: '-2 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1170
          0xFFCC: '-1.67 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1171
          0xFFD0: '-1.50 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1172
          0xFFD4: '-1.33 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1173
          0xFFE0: '-1 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1174
          0xFFEC: '-0.67 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1175
          0xFFF0: '-0.50 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1176
          0xFFF4: '-0.33 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1177
          0x0000: '0 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1178
          0x000C: '0.33 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1179
          0x0010: '0.50 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1180
          0x0014: '0.67 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1181
          0x0020: '1 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1182
          0x002C: '1.33 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1183
          0x0030: '1.50 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1184
          0x0034: '1.67 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1185
          0x0040: '2 EV'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1186
    19: ('SubjectDistance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1187
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1188
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1189
# ratio object that eventually will be able to reduce itself to lowest
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1190
# common denominator for printing
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1191
def gcd(a, b):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1192
    if b == 0:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1193
        return a
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1194
    else:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1195
        return gcd(b, a % b)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1196
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1197
class Ratio:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1198
    def __init__(self, num, den):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1199
        self.num = num
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1200
        self.den = den
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1201
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1202
    def __repr__(self):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1203
        self.reduce()
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1204
        if self.den == 1:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1205
            return str(self.num)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1206
        return '%d/%d' % (self.num, self.den)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1207
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1208
    def reduce(self):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1209
        div = gcd(self.num, self.den)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1210
        if div > 1:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1211
            self.num = self.num / div
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1212
            self.den = self.den / div
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1213
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1214