exiftool_vendored 11.76.0 → 11.77.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8b04c571479edb1316d1d8d923fa142283732130
4
- data.tar.gz: 6a4d5eab35d349d6200b0bc39f144e868cb080f8
3
+ metadata.gz: cd451e6596364dc94693d9694471ff7dbcb068ca
4
+ data.tar.gz: 6bd1bcefaa21900ace822f793e9dde15d3338585
5
5
  SHA512:
6
- metadata.gz: 307444f4d8506d8dbb03e577df08f8e1ebfe57abe1f8cd2d75dd1a70bc8585b5175d65020b85e0081e2e9091ec16caa1b37f8a1f2bcf5ee1dafa96881a7ff318
7
- data.tar.gz: 98cfd97808f11aedb2bf961a24c001a97401ff348fea9e5c06b17d1acff3c1cf0fe4a5ed64b0732bd523805d9c912791ebb7e5c182c1300d55071249fe567239
6
+ metadata.gz: 42be2d0a6ef3f205ce0222cd589509020f58e5033f8b7ad2376a5062ecf88956e568c43c0f4315811f03f27afd5c2128e7c196e4edcf49bf1d57d3d45b8b18fd
7
+ data.tar.gz: da9ff3fb71a2d837ff7a7a01c5ec80e0d1b44455771421084b8e8422fadcc27ddd5fea2d043027c707a0a53c0612454a59f4e23ad342c17cab8448cc6c431d47
@@ -4,9 +4,22 @@ ExifTool Version History
4
4
 
5
5
  RSS feed: http://owl.phy.queensu.ca/~phil/exiftool/rss.xml
6
6
 
7
+ (I'll be away from Nov 16-24, 2019 so don't expect any updates
8
+ or email/forum responses during this period. - PH)
9
+
7
10
  Note: The most recent production release is Version 11.70. (Other versions are
8
11
  considered development releases, and are not uploaded to CPAN.)
9
12
 
13
+ Nov. 27, 2019 - Version 11.77
14
+
15
+ - Added a new Nikon LensID (thanks Joe Schonberg)
16
+ - Added a number of new Olympus LensType values (thanks LibRaw)
17
+ - Added a new Canon LensType
18
+ - Decode timed GPS from Ambarella A12 dash cam MP4 videos
19
+ - Decode a number of new Sigma tags (thanks LibRaw)
20
+ - Decode a couple of new PanasonicRaw tags (thanks LibRaw)
21
+ - Enhanced -fileOrder option to add -fast feature
22
+
10
23
  Nov. 12, 2019 - Version 11.76
11
24
 
12
25
  - Added support for the Sony ILCE-9M2 (thanks Jos Roost)
@@ -47,6 +47,6 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "11.76",
50
+ "version" : "11.77",
51
51
  "x_serialization_backend" : "JSON::PP version 4.02"
52
52
  }
@@ -28,5 +28,5 @@ recommends:
28
28
  Time::HiRes: '0'
29
29
  requires:
30
30
  perl: '5.004'
31
- version: '11.76'
31
+ version: '11.77'
32
32
  x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
data/bin/README CHANGED
@@ -104,8 +104,8 @@ your home directory, then you would type the following commands in a
104
104
  terminal window to extract and run ExifTool:
105
105
 
106
106
  cd ~/Desktop
107
- gzip -dc Image-ExifTool-11.76.tar.gz | tar -xf -
108
- cd Image-ExifTool-11.76
107
+ gzip -dc Image-ExifTool-11.77.tar.gz | tar -xf -
108
+ cd Image-ExifTool-11.77
109
109
  ./exiftool t/images/ExifTool.jpg
110
110
 
111
111
  Note: These commands extract meta information from one of the test images.
@@ -10,7 +10,7 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '11.76';
13
+ my $version = '11.77';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
16
  my $exeDir;
@@ -500,6 +500,7 @@ $xml = 0;
500
500
 
501
501
  # define local variables used only in this command loop
502
502
  my @fileOrder; # tags to use for ordering of input files
503
+ my $fileOrderFast; # -fast level for -fileOrder option
503
504
  my $addGeotime; # automatically added geotime argument
504
505
  my $doGlob; # flag set to do filename wildcard expansion
505
506
  my $escapeXML; # flag to escape printed values for xml
@@ -874,8 +875,10 @@ for (;;) {
874
875
  $mt->Options(FastScan => (length $1 ? $1 : 1));
875
876
  next;
876
877
  }
877
- if ($a eq 'fileorder') {
878
+ if (/^fileorder(\d*)$/i) {
878
879
  push @fileOrder, shift if @ARGV;
880
+ my $num = $1 || 0;
881
+ $fileOrderFast = $num if not defined $fileOrderFast or $fileOrderFast > $num;
879
882
  next;
880
883
  }
881
884
  $a eq 'globaltimeshift' and $mt->Options(GlobalTimeShift => shift), next;
@@ -1672,6 +1675,7 @@ if (@fileOrder) {
1672
1675
  my @allFiles;
1673
1676
  ProcessFiles($mt, \@allFiles);
1674
1677
  my $sortTool = new Image::ExifTool;
1678
+ $sortTool->Options(FastScan => $fileOrderFast) if $fileOrderFast;
1675
1679
  $sortTool->Options(PrintConv => $mt->Options('PrintConv'));
1676
1680
  $sortTool->Options(Duplicates => 0);
1677
1681
  my (%sortBy, %isFloat, @rev, $file);
@@ -1913,10 +1917,10 @@ sub GetImageInfo($$)
1913
1917
  {
1914
1918
  # set package so eval'd functions are in Image::ExifTool namespace
1915
1919
  package Image::ExifTool;
1916
-
1920
+
1917
1921
  #### eval "-if" condition (%info)
1918
1922
  $result = eval $cond;
1919
-
1923
+
1920
1924
  $@ and $evalWarning = $@;
1921
1925
  }
1922
1926
  if ($evalWarning) {
@@ -4410,7 +4414,7 @@ L<Processing control|/Processing control>
4410
4414
  -ext[+] EXT (-extension) Process files with specified extension
4411
4415
  -F[OFFSET] (-fixBase) Fix the base for maker notes offsets
4412
4416
  -fast[NUM] Increase speed when extracting metadata
4413
- -fileOrder [-]TAG Set file processing order
4417
+ -fileOrder[NUM] [-]TAG Set file processing order
4414
4418
  -i DIR (-ignore) Ignore specified directory name
4415
4419
  -if[NUM] EXPR Conditionally process files
4416
4420
  -m (-ignoreMinorErrors) Ignore minor errors and warnings
@@ -5176,7 +5180,7 @@ with this command:
5176
5180
 
5177
5181
  produces output like this:
5178
5182
 
5179
- -- Generated by ExifTool 11.76 --
5183
+ -- Generated by ExifTool 11.77 --
5180
5184
  File: a.jpg - 2003:10:31 15:44:19
5181
5185
  (f/5.6, 1/60s, ISO 100)
5182
5186
  File: b.jpg - 2006:05:23 11:57:38
@@ -5574,37 +5578,43 @@ permanently if B<-F> is used when writing EXIF to an image. eg)
5574
5578
 
5575
5579
  =item B<-fast>[I<NUM>]
5576
5580
 
5577
- Increase speed of extracting information. With B<-fast>, ExifTool will not
5578
- scan to the end of a JPEG image to check for an AFCP or PreviewImage
5579
- trailer, or past the first comment in GIF images or the audio/video data in
5580
- WAV/AVI files to search for additional metadata. These speed benefits are
5581
- small when reading images directly from disk, but can be substantial if
5582
- piping images through a network connection. For more substantial speed
5583
- benefits, B<-fast2> also causes exiftool to avoid extracting any EXIF
5584
- MakerNote information. B<-fast3> avoids extracting metadata from the file,
5585
- and returns only pseudo System tags, but still reads the file header to
5586
- obtain an educated guess at FileType. B<-fast4> doesn't even read the file
5587
- header, and determines FileType based only on the file extension. Has no
5588
- effect when writing.
5581
+ Increase speed of extracting information. With B<-fast> (or B<-fast1>),
5582
+ ExifTool will not scan to the end of a JPEG image to check for an AFCP or
5583
+ PreviewImage trailer, or past the first comment in GIF images or the
5584
+ audio/video data in WAV/AVI files to search for additional metadata. These
5585
+ speed benefits are small when reading images directly from disk, but can be
5586
+ substantial if piping images through a network connection. For more
5587
+ substantial speed benefits, B<-fast2> also causes exiftool to avoid
5588
+ extracting any EXIF MakerNote information. B<-fast3> avoids extracting
5589
+ metadata from the file, and returns only pseudo System tags, but still reads
5590
+ the file header to obtain an educated guess at FileType. B<-fast4> doesn't
5591
+ even read the file header, and determines FileType based only on the file
5592
+ extension. Has no effect when writing.
5589
5593
 
5590
5594
  Note that a separate B<-fast> setting may be used for evaluation of a B<-if>
5591
- condition. See the B<-if> option documentation for details.
5595
+ condition, or when ordering files with the B<-fileOrder> option. See the
5596
+ B<-if> and B<-fileOrder> options for details.
5592
5597
 
5593
- =item B<-fileOrder> [-]I<TAG>
5598
+ =item B<-fileOrder>[I<NUM>] [-]I<TAG>
5594
5599
 
5595
5600
  Set file processing order according to the sorted value of the specified
5596
5601
  I<TAG>. For example, to process files in order of date:
5597
5602
 
5598
5603
  exiftool -fileOrder DateTimeOriginal DIR
5599
5604
 
5600
- Additional B<-fileOrder> options may be added for secondary sort keys.
5605
+ Additional B<-fileOrder> options may be added for secondary sort keys.
5601
5606
  Numbers are sorted numerically, and all other values are sorted
5602
- alphabetically. The sort order may be reversed by prefixing the tag name
5603
- with a C<-> (eg. C<-fileOrder -createdate>). Print conversion of the sorted
5604
- values is disabled with the B<-n> option, or a C<#> appended to the tag
5605
- name. Other formatting options (eg. B<-d>) have no effect on the sorted
5606
- values. Note that the B<-fileOrder> option has a large performance impact
5607
- since it involves an additional processing pass of each file.
5607
+ alphabetically. Files missing the specified tag are sorted last. The sort
5608
+ order may be reversed by prefixing the tag name with a C<-> (eg.
5609
+ C<-fileOrder -createdate>). Print conversion of the sorted values is
5610
+ disabled with the B<-n> option, or a C<#> appended to the tag name. Other
5611
+ formatting options (eg. B<-d>) have no effect on the sorted values. Note
5612
+ that the B<-fileOrder> option can have a large performance impact since it
5613
+ involves an additional processing pass of each file, but this impact may be
5614
+ reduced by specifying a I<NUM> for the B<-fast> level used during the
5615
+ metadata-extraction phase. For example, B<-fileOrder4> may be used if
5616
+ I<TAG> is a pseudo System tag. If multiple B<-fileOrder> options are used,
5617
+ the extraction is done at the lowest B<-fast> level.
5608
5618
 
5609
5619
  =item B<-i> I<DIR> (B<-ignore>)
5610
5620
 
@@ -27,7 +27,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
27
27
  %mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
28
28
  %jpegMarker %specialTags %fileTypeLookup $testLen);
29
29
 
30
- $VERSION = '11.76';
30
+ $VERSION = '11.77';
31
31
  $RELEASE = '';
32
32
  @ISA = qw(Exporter);
33
33
  %EXPORT_TAGS = (
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.27';
91
+ $VERSION = '4.28';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -550,6 +550,7 @@ $VERSION = '4.27';
550
550
  4158 => 'Canon EF-S 18-55mm f/4-5.6 IS STM', #PH
551
551
  4159 => 'Canon EF-M 32mm f/1.4 STM', #42
552
552
  4160 => 'Canon EF-S 35mm f/2.8 Macro IS STM', #42
553
+ 4208 => 'Sigma 56mm f/1.4 DC DN | C', #forum10603
553
554
  # (Nano USM lenses - 0x90xx)
554
555
  36910 => 'Canon EF 70-300mm f/4-5.6 IS II USM', #42
555
556
  36912 => 'Canon EF-S 18-135mm f/3.5-5.6 IS USM', #42
@@ -61,7 +61,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
61
61
  use Image::ExifTool::Exif;
62
62
  use Image::ExifTool::GPS;
63
63
 
64
- $VERSION = '3.73';
64
+ $VERSION = '3.74';
65
65
 
66
66
  sub LensIDConv($$$);
67
67
  sub ProcessNikonAVI($$$);
@@ -427,6 +427,7 @@ sub GetAFPointGrid($$;$);
427
427
  '7A 40 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 DC OS HSM',
428
428
  'ED 40 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 DC OS HSM', #JD
429
429
  '90 40 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 II DC OS HSM', #JohnHelour
430
+ '89 30 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 DC Macro OS HS | C', #JoeSchonberg
430
431
  'A5 40 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC OS HSM',
431
432
  # LensFStops varies with FocalLength for this lens (ref 2):
432
433
  '92 2C 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC Macro OS HSM', #2
@@ -39,7 +39,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
39
39
  use Image::ExifTool::Exif;
40
40
  use Image::ExifTool::APP12;
41
41
 
42
- $VERSION = '2.61';
42
+ $VERSION = '2.62';
43
43
 
44
44
  sub PrintLensInfo($$$);
45
45
 
@@ -169,6 +169,13 @@ my %olympusLensTypes = (
169
169
  '2 26 10' => 'Lumix G 25mm F1.7 Asph.', #NJ
170
170
  '2 27 10' => 'Leica DG Vario-Elmar 100-400mm F4.0-6.3 Asph. Power OIS', #NJ
171
171
  '2 28 10' => 'Lumix G Vario 12-60mm F3.5-5.6 Asph. Power OIS', #NJ
172
+ '2 29 10' => 'Leica DG Summilux 12mm F1.4 Asph.', #IB
173
+ '2 30 10' => 'Leica DG Vario-Elmarit 12-60mm F2.8-4 Asph. Power OIS', #IB
174
+ '2 33 10' => 'Lumix G X Vario 12-35mm F2.8 II Asph. Power OIS', #IB
175
+ '2 35 10' => 'Leica DG Vario-Elmarit 8-18mm F2.8-4 Asph.', #IB
176
+ '2 36 10' => 'Leica DG Elmarit 200mm F2.8 Power OIS', #IB
177
+ '2 37 10' => 'Leica DG Vario-Elmarit 50-200mm F2.8-4 Asph. Power OIS', #IB
178
+ '2 38 10' => 'Leica DG Vario-Summilux 10-25mm F1.7 Asph.', #IB
172
179
  '3 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
173
180
  '3 02 00' => 'Leica D Summilux 25mm F1.4 Asph.', #11
174
181
  # Tamron lenses
@@ -3908,6 +3915,17 @@ my %indexInfo = (
3908
3915
  Image::ExifTool::Exif::ExtractImage($self,$val[0],$val[1],"ZoomedPreviewImage");
3909
3916
  },
3910
3917
  },
3918
+ # this is actually for PanasonicRaw tags, but it uses the lens lookup here
3919
+ LensType => {
3920
+ Require => {
3921
+ 0 => 'LensTypeMake',
3922
+ 1 => 'LensTypeModel',
3923
+ },
3924
+ Notes => 'based on tags found in some Panasonic RW2 images',
3925
+ SeparateTable => 'LensType',
3926
+ ValueConv => '"$val[0] $val[1]"',
3927
+ PrintConv => \%olympusLensTypes,
3928
+ },
3911
3929
  );
3912
3930
 
3913
3931
  # add our composite tags
@@ -21,7 +21,7 @@ use vars qw($VERSION);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
  use Image::ExifTool::Exif;
23
23
 
24
- $VERSION = '1.23';
24
+ $VERSION = '1.24';
25
25
 
26
26
  sub ProcessJpgFromRaw($$$);
27
27
  sub WriteJpgFromRaw($$$);
@@ -500,7 +500,25 @@ my %panasonicWhiteBalance = ( #forum9396
500
500
  Writable => 'int32u',
501
501
  PrintConv => { 0 => 'No', 1 => 'Yes' },
502
502
  },
503
- # 1201 - LensStyle? ref forum9394
503
+ # Note: LensTypeMake and LensTypeModel are combined into a Composite LensType tag
504
+ # defined in Olympus.pm which has the same values as Olympus:LensType
505
+ 0x1201 => {
506
+ Name => 'LensTypeMake',
507
+ Condition => '$format eq "int16u"',
508
+ Writable => 'int16u',
509
+ },
510
+ 0x1202 => {
511
+ Name => 'LensTypeModel',
512
+ Condition => '$format eq "int16u"',
513
+ Writable => 'int16u',
514
+ RawConv => q{
515
+ return undef unless $val;
516
+ require Image::ExifTool::Olympus; # (to load Composite LensID)
517
+ return $val;
518
+ },
519
+ ValueConv => '$_=sprintf("%.4x",$val); s/(..)(..)/$2 $1/; $_',
520
+ ValueConvInv => '$val =~ s/(..) (..)/$2$1/; hex($val)',
521
+ },
504
522
  0x1203 => { #4
505
523
  Name => 'FocalLengthIn35mmFormat',
506
524
  Writable => 'int16u',
@@ -697,8 +697,40 @@ sub Process_text($$$)
697
697
  }
698
698
  return if $found;
699
699
 
700
- # check for BlueSkySea enciphered binary GPS data
701
- if ($$buffPt =~ /^\0\0..\xaa\xaa/s and length $$buffPt >= 282) {
700
+ # check for enciphered binary GPS data
701
+ # BlueSkySea:
702
+ # 0000: 00 00 aa aa aa aa 54 54 98 9a 9b 93 9a 92 98 9a [......TT........]
703
+ # 0010: 9a 9d 9f 9b 9f 9d aa aa aa aa aa aa aa aa aa aa [................]
704
+ # 0020: aa aa aa aa aa a9 e4 9e 92 9f 9b 9f 92 9d 99 ef [................]
705
+ # 0030: 9a 9a 98 9b 93 9d 9d 9c 93 aa aa aa aa aa 9a 99 [................]
706
+ # 0040: 9b aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa [................]
707
+ # [...]
708
+ # decrypted:
709
+ # 0000: aa aa 00 00 00 00 fe fe 32 30 31 39 30 38 32 30 [........20190820]
710
+ # 0010: 30 37 35 31 35 37 00 00 00 00 00 00 00 00 00 00 [075157..........]
711
+ # 0020: 00 00 00 00 00 03 4e 34 38 35 31 35 38 37 33 45 [......N48515873E]
712
+ # 0030: 30 30 32 31 39 37 37 36 39 00 00 00 00 00 30 33 [002197769.....03]
713
+ # 0040: 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [1...............]
714
+ # [...]
715
+ # Ambarella A12:
716
+ # 0000: 00 00 f2 e1 f0 ee 54 54 98 9a 9b 93 9b 9b 9b 9c [......TT........]
717
+ # 0010: 9b 9a 9a 93 9a 9b a6 9a 9b 9b 93 9b 9a 9b 9c 9a [................]
718
+ # 0020: 9d 9a 92 9f 93 a9 e4 9f 9f 9e 9f 9b 9b 9c 9d ef [................]
719
+ # 0030: 9a 99 9d 9e 99 9a 9a 9e 9b 81 9a 9b 9f 9d 9a 9a [................]
720
+ # 0040: 9a 87 9a 9a 9a 87 9a 98 99 87 9a 9a 99 87 9a 9a [................]
721
+ # [...]
722
+ # decrypted:
723
+ # 0000: aa aa 58 4b 5a 44 fe fe 32 30 31 39 31 31 31 36 [..XKZD..20191116]
724
+ # 0010: 31 30 30 39 30 31 0c 30 31 31 39 31 30 31 36 30 [100901.011910160]
725
+ # 0020: 37 30 38 35 39 03 4e 35 35 34 35 31 31 36 37 45 [70859.N55451167E]
726
+ # 0030: 30 33 37 34 33 30 30 34 31 2b 30 31 35 37 30 30 [037430041+015700]
727
+ # 0040: 30 2d 30 30 30 2d 30 32 33 2d 30 30 33 2d 30 30 [0-000-023-003-00]
728
+ # [...]
729
+ # 0100: aa 55 57 ed ed 45 58 54 44 00 01 30 30 30 30 31 [.UW..EXTD..00001]
730
+ # 0110: 31 30 38 30 30 30 58 00 58 00 58 00 58 00 58 00 [108000X.X.X.X.X.]
731
+ # 0120: 58 00 58 00 58 00 58 00 00 00 00 00 00 00 00 00 [X.X.X.X.........]
732
+ # 0130: 00 00 00 00 00 00 00 [.......]
733
+ if ($$buffPt =~ /^\0\0(..\xaa\xaa|\xf2\xe1\xf0\xee)/s and length $$buffPt >= 282) {
702
734
  $val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$buffPt, 8, 14)));
703
735
  if ($val =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/) {
704
736
  $tags{GPSDateTime} = "$1:$2:$3 $4:$5:$6";
@@ -710,19 +742,31 @@ sub Process_text($$$)
710
742
  if ($val =~ /^([EW])(\d{3})(\d+$)$/) {
711
743
  $tags{GPSLongitude} = ($2 + $3 / 600000) * ($1 eq 'W' ? -1 : 1);
712
744
  }
713
- $val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$buffPt, 62, 3)));
714
- $tags{GPSSpeed} = $val + 0 if $val =~ /^\d+$/;
715
- $val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$buffPt, 0xad, 12)));
716
- # the first X,Y,Z accelerometer readings from the AccelerometerData
717
- if ($val =~ /^([-+]\d{3})([-+]\d{3})([-+]\d{3})$/) {
718
- $tags{Accelerometer} = "$1 $2 $3";
745
+ $val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$buffPt, 0x39, 5)));
746
+ $tags{GPSAltitude} = $val + 0 if $val =~ /^[-+]\d+$/;
747
+ $val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$buffPt, 0x3e, 3)));
748
+ if ($val =~ /^\d+$/) {
749
+ $tags{GPSSpeed} = $val + 0;
750
+ $tags{GPSSpeedRef} = 'K';
751
+ }
752
+ if ($$buffPt =~ /^\0\0..\xaa\xaa/s) { # (BlueSkySea)
753
+ $val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$buffPt, 0xad, 12)));
754
+ # the first X,Y,Z accelerometer readings from the AccelerometerData
755
+ if ($val =~ /^([-+]\d{3})([-+]\d{3})([-+]\d{3})$/) {
756
+ $tags{Accelerometer} = "$1 $2 $3";
757
+ $val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$buffPt, 0xba, 96)));
758
+ my $order = GetByteOrder();
759
+ SetByteOrder('II');
760
+ $val = ReadValue(\$val, 0, 'float');
761
+ SetByteOrder($order);
762
+ $tags{AccelerometerData} = $val;
763
+ }
764
+ } else { # (Ambarella)
765
+ my @acc;
766
+ $val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$buffPt, 0x41, 195)));
767
+ push @acc, $1, $2, $3 while $val =~ /\G([-+]\d{3})([-+]\d{3})([-+]\d{3})/g;
768
+ $tags{Accelerometer} = "@acc" if @acc;
719
769
  }
720
- $val = pack('C*', map { $_ ^ 0xaa } unpack('C*', substr($$buffPt, 0xba, 96)));
721
- my $order = GetByteOrder();
722
- SetByteOrder('II');
723
- $val = ReadValue(\$val, 0, 'float');
724
- SetByteOrder($order);
725
- $tags{AccelerometerData} = $val;
726
770
  }
727
771
  }
728
772
 
@@ -19,7 +19,7 @@ use strict;
19
19
  use vars qw($VERSION %sigmaLensTypes);
20
20
  use Image::ExifTool::Exif;
21
21
 
22
- $VERSION = '1.29';
22
+ $VERSION = '1.30';
23
23
 
24
24
  # sigma LensType lookup (ref IB)
25
25
  %sigmaLensTypes = (
@@ -762,8 +762,62 @@ $VERSION = '1.29';
762
762
  0x0087 => 'ResolutionMode', #PH (Quattro models)
763
763
  0x0088 => 'WhiteBalance', #PH (Quattro models)
764
764
  0x008c => 'Firmware', #PH (Quattro models)
765
+ 0x011f => { #IB (FP DNG images)
766
+ Name => 'CameraCalibration',
767
+ Writable => 'float',
768
+ Count => 9,
769
+ },
770
+ 0x0120 => { #IB (FP DNG images)
771
+ Name => 'WBSettings',
772
+ SubDirectory => { TagTable => 'Image::ExifTool::Sigma::WBSettings' },
773
+ },
774
+ 0x0121 => { #IB (FP DNG images)
775
+ Name => 'WBSettings2',
776
+ SubDirectory => { TagTable => 'Image::ExifTool::Sigma::WBSettings2' },
777
+ },
778
+ );
779
+
780
+ # WB settings (ref IB)
781
+ %Image::ExifTool::Sigma::WBSettings = (
782
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
783
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
784
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
785
+ WRITABLE => 1,
786
+ FORMAT => 'float',
787
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
788
+ 0 => { Name => 'WB_RGBLevelsAuto', Format => 'float[3]' },
789
+ 3 => { Name => 'WB_RGBLevelsDaylight', Format => 'float[3]' },
790
+ 6 => { Name => 'WB_RGBLevelsShade', Format => 'float[3]' },
791
+ 9 => { Name => 'WB_RGBLevelsOvercast', Format => 'float[3]' },
792
+ 12 => { Name => 'WB_RGBLevelsIncandescent', Format => 'float[3]' },
793
+ 15 => { Name => 'WB_RGBLevelsFluorescent', Format => 'float[3]' },
794
+ 18 => { Name => 'WB_RGBLevelsFlash', Format => 'float[3]' },
795
+ 21 => { Name => 'WB_RGBLevelsCustom1', Format => 'float[3]' },
796
+ 24 => { Name => 'WB_RGBLevelsCustom2', Format => 'float[3]' },
797
+ 27 => { Name => 'WB_RGBLevelsCustom3', Format => 'float[3]' },
798
+ );
799
+
800
+ # WB settings (ref IB)
801
+ %Image::ExifTool::Sigma::WBSettings2 = (
802
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
803
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
804
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
805
+ WRITABLE => 1,
806
+ FORMAT => 'float',
807
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
808
+ 0 => { Name => 'WB_RGBLevelsUnknown0', Unknown => 1, Format => 'float[3]' },
809
+ 3 => { Name => 'WB_RGBLevelsUnknown1', Unknown => 1, Format => 'float[3]' },
810
+ 6 => { Name => 'WB_RGBLevelsUnknown2', Unknown => 1, Format => 'float[3]' },
811
+ 9 => { Name => 'WB_RGBLevelsUnknown3', Unknown => 1, Format => 'float[3]' },
812
+ 12 => { Name => 'WB_RGBLevelsUnknown4', Unknown => 1, Format => 'float[3]' },
813
+ 15 => { Name => 'WB_RGBLevelsUnknown5', Unknown => 1, Format => 'float[3]' },
814
+ 18 => { Name => 'WB_RGBLevelsUnknown6', Unknown => 1, Format => 'float[3]' },
815
+ 21 => { Name => 'WB_RGBLevelsUnknown7', Unknown => 1, Format => 'float[3]' },
816
+ 24 => { Name => 'WB_RGBLevelsUnknown8', Unknown => 1, Format => 'float[3]' },
817
+ 27 => { Name => 'WB_RGBLevelsUnknown9', Unknown => 1, Format => 'float[3]' },
765
818
  );
766
819
 
820
+
767
821
  1; # end
768
822
 
769
823
  __END__