exiftool_vendored 11.76.0 → 11.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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__