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