exiftool_vendored 12.36.0 → 12.37.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
  SHA256:
3
- metadata.gz: 860e8f065a884ee45be833825836c1ffc919cae259edd1c4436c87524e714f49
4
- data.tar.gz: b3fc9dd82c202b55b7a6952938996255560035b8cf45645e00a42c9d9a05747f
3
+ metadata.gz: 76b6a0d2fdfef75ff151b28b383281cd0e5cbff7b324c7529b5972eea00fa2ab
4
+ data.tar.gz: 15f2d5ff22bb9eebdbe7e843d61c8e60ae3cc17d50d212c59e05411baa221937
5
5
  SHA512:
6
- metadata.gz: 1b233fba0025620a972fee0c757fd1176ce3a64f208441a9bc95169c13d57270720f3fe2808643ab301feaacccc0ae471244374ccfba1dc34e885efc64b180ec
7
- data.tar.gz: fd4dfe483295162f230ffae226867295c79f89848af21c0f0b69fe95924bbb0e09d944dc6af71acded089c4b2230687f23a6c92cd2d471a64eda08d54a6bc8a4
6
+ metadata.gz: '05955adc090e482158e1c5e55f4aa6205434c9433e8b5369c45f4c030f59088e8efe5e91df54cf6cd44f973ad845e8436a958948ca2baa25bc1aea371a311d74'
7
+ data.tar.gz: 7a6c12e5f45dcd7efed082469de08ddb6e4eb21596f73f3c6abde5f6faf5318be5fe53e0f6aa6a88391f9e088d68c06682e042cd94f3f4f08656a6a2d76fa404
data/bin/Changes CHANGED
@@ -7,6 +7,16 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.30. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Dec. 8, 2021 - Version 12.37
11
+
12
+ - Decode timed GPS from Vantrue S1 dashcam MP4 videos
13
+ - Decode ColorData tags for the Canon EOS R3 (thanks LibRaw)
14
+ - Decode more makernotes tags for Nikon Z cameras (thanks Warren Hatch)
15
+ - Extract TransparentColor from GIF images
16
+ - Improved parsing of input time values for GPSTimeStamp to properly handle a
17
+ "." separator
18
+ - Improved warning when incorrectly using "
19
+
10
20
  Nov. 16, 2021 - Version 12.36
11
21
 
12
22
  - IMPORTANT: Fixed bug introduced in 12.35 which corrupted JPEG 2000 images
@@ -19,7 +29,7 @@ Nov. 16, 2021 - Version 12.36
19
29
  - Made the Composite GPSPosition tag writable
20
30
  - Fixed erroneous "Skipped unknown bytes after JPEG SOS" warning
21
31
  - Fixed group for new writable Jpeg2000 color tags in -listx output
22
- - Fixed problem finding files in windows when using wildcards in file name and
32
+ - Fixed problem finding files in Windows when using wildcards in file name and
23
33
  a drive letter with no slash
24
34
 
25
35
  Nov. 11, 2021 - Version 12.35
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.36"
50
+ "version" : "12.37"
51
51
  }
data/bin/META.yml CHANGED
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.36
31
+ version: 12.37
data/bin/README CHANGED
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
107
107
  terminal window to extract and run ExifTool:
108
108
 
109
109
  cd ~/Desktop
110
- gzip -dc Image-ExifTool-12.36.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.36
110
+ gzip -dc Image-ExifTool-12.37.tar.gz | tar -xf -
111
+ cd Image-ExifTool-12.37
112
112
  ./exiftool t/images/ExifTool.jpg
113
113
 
114
114
  Note: These commands extract meta information from one of the test images.
data/bin/exiftool CHANGED
@@ -10,7 +10,7 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '12.36';
13
+ my $version = '12.37';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
16
  BEGIN {
@@ -3467,18 +3467,26 @@ sub ConvertBinary($)
3467
3467
  }
3468
3468
 
3469
3469
  #------------------------------------------------------------------------------
3470
- # Compare two tag values to see if they are equal
3470
+ # Compare ValueConv and PrintConv values of a tag to see if they are equal
3471
3471
  # Inputs: 0) value1, 1) value2
3472
3472
  # Returns: true if they are equal
3473
3473
  sub IsEqual($$)
3474
3474
  {
3475
- return 1 if ref $_[0] eq 'SCALAR' or $_[0] eq $_[1];
3476
- return 0 if ref $_[0] ne 'ARRAY' or ref $_[1] ne 'ARRAY' or
3477
- @{$_[0]} ne @{$_[1]};
3478
- # test all elements of an array
3479
- my $i = 0;
3480
- for ($i=0; $i<scalar(@{$_[0]}); ++$i) {
3481
- return 0 if $_[0][$i] ne $_[1][$i];
3475
+ my ($a, $b) = @_;
3476
+ # (scalar values are not print-converted)
3477
+ return 1 if $a eq $b or ref $a eq 'SCALAR';
3478
+ if (ref $a eq 'HASH' and ref $b eq 'HASH') {
3479
+ return 0 if scalar(keys %$a) != scalar(keys %$b);
3480
+ my $key;
3481
+ foreach $key (keys %$a) {
3482
+ return 0 unless IsEqual($$a{$key}, $$b{$key});
3483
+ }
3484
+ } else {
3485
+ return 0 if ref $a ne 'ARRAY' or ref $b ne 'ARRAY' or @$a != @$b;
3486
+ my $i;
3487
+ for ($i=0; $i<scalar(@$a); ++$i) {
3488
+ return 0 unless IsEqual($$a[$i], $$b[$i]);
3489
+ }
3482
3490
  }
3483
3491
  return 1;
3484
3492
  }
@@ -4740,7 +4748,8 @@ for more details). C<+=> may also be used to increment numerical values (or
4740
4748
  decrement if I<VALUE> is negative), and C<-=> may be used to conditionally
4741
4749
  delete or replace a tag (see L</WRITING EXAMPLES> for examples). C<^=> is
4742
4750
  used to write an empty string instead of deleting the tag when no I<VALUE>
4743
- is given, but otherwise it is equivalent to C<=>.
4751
+ is given, but otherwise it is equivalent to C<=>, but note that the caret
4752
+ must be quoted on the Windows command line.
4744
4753
 
4745
4754
  I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
4746
4755
  prefixed by optional family numbers, and separated colons. If no group name
@@ -5410,7 +5419,8 @@ directory if C<#[SECT]> contains C<$directory>). Lines beginning with
5410
5419
  C<#[BODY]> and lines not beginning with C<#> are output for each processed
5411
5420
  file. Lines beginning with C<#[IF]> are not output, but all BODY lines are
5412
5421
  skipped if any tag on an IF line doesn't exist. Other lines beginning with
5413
- C<#> are ignored. For example, this format file:
5422
+ C<#> are ignored. (To output a line beginning with C<#>, use C<#[BODY]#>.)
5423
+ For example, this format file:
5414
5424
 
5415
5425
  # this is a comment line
5416
5426
  #[HEAD]-- Generated by ExifTool $exifToolVersion --
@@ -5424,7 +5434,7 @@ with this command:
5424
5434
 
5425
5435
  produces output like this:
5426
5436
 
5427
- -- Generated by ExifTool 12.36 --
5437
+ -- Generated by ExifTool 12.37 --
5428
5438
  File: a.jpg - 2003:10:31 15:44:19
5429
5439
  (f/5.6, 1/60s, ISO 100)
5430
5440
  File: b.jpg - 2006:05:23 11:57:38
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
35
35
  use Image::ExifTool::Validate;
36
36
  use Image::ExifTool::MacOS;
37
37
 
38
- $VERSION = '3.46';
38
+ $VERSION = '3.47';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -757,7 +757,7 @@ sub new
757
757
  my (%tagNameInfo, %id, %longID, %longName, %shortName, %tableNum,
758
758
  %tagLookup, %tagExists, %noLookup, %tableWritable, %sepTable, %case,
759
759
  %structs, %compositeModules, %isPlugin, %flattened, %structLookup,
760
- @writePseudo);
760
+ @writePseudo, %dupXmpTag);
761
761
  $self->{TAG_NAME_INFO} = \%tagNameInfo;
762
762
  $self->{ID_LOOKUP} = \%id;
763
763
  $self->{LONG_ID} = \%longID;
@@ -905,6 +905,10 @@ TagID: foreach $tagID (@keys) {
905
905
  foreach (@grps) {
906
906
  warn "Group name starts with 'ID-' for $short $name\n" if /^ID-/i;
907
907
  }
908
+ if ($isXMP and not $$tagInfo{Avoid} and not $$tagInfo{Struct}) {
909
+ $dupXmpTag{$name} and warn "Duplicate XMP tag $name\n";
910
+ $dupXmpTag{$name} = 1;
911
+ }
908
912
  # validate Name (must not start with a digit or else XML output will not be valid;
909
913
  # must not start with a dash or exiftool command line may get confused)
910
914
  if ($name !~ /^[_A-Za-z][-\w]+$/ and
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.54';
91
+ $VERSION = '4.55';
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)
@@ -1919,6 +1919,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1919
1919
  Name => 'ColorData10',
1920
1920
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
1921
1921
  },
1922
+ { # (int16u[3973]) - R3 ref IB
1923
+ Condition => '$count == 3973',
1924
+ Name => 'ColorData11',
1925
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
1926
+ },
1922
1927
  {
1923
1928
  Name => 'ColorDataUnknown',
1924
1929
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorDataUnknown' },
@@ -7720,7 +7725,10 @@ my %ciMaxFocal = (
7720
7725
  # Color data (MakerNotes tag 0x4001, count=1312,1313,1316) (ref PH)
7721
7726
  %Image::ExifTool::Canon::ColorData7 = (
7722
7727
  %binaryDataAttrs,
7723
- NOTES => 'These tags are used by the EOS 1DX, 5DmkIII, 6D, 100D, 650D, 700D, M and 7DmkII.',
7728
+ NOTES => q{
7729
+ These tags are used by the EOS 1DX, 5DmkIII, 6D, 7DmkII, 100D, 650D, 700D,
7730
+ 8000D, M and M2.
7731
+ },
7724
7732
  FORMAT => 'int16s',
7725
7733
  FIRST_ENTRY => 0,
7726
7734
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -7731,8 +7739,8 @@ my %ciMaxFocal = (
7731
7739
  DataMember => 'ColorDataVersion',
7732
7740
  RawConv => '$$self{ColorDataVersion} = $val',
7733
7741
  PrintConv => {
7734
- 10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M)',
7735
- 11 => '11 (7DmkII/750D/760D)',
7742
+ 10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M/M2)',
7743
+ 11 => '11 (7DmkII/750D/760D/8000D)',
7736
7744
  },
7737
7745
  },
7738
7746
  # not really sure about the AsShot, Auto and Measured values any more - PH
@@ -7867,6 +7875,10 @@ my %ciMaxFocal = (
7867
7875
  # Color data (MakerNotes tag 0x4001, count=1560,etc) (ref IB)
7868
7876
  %Image::ExifTool::Canon::ColorData8 = (
7869
7877
  %binaryDataAttrs,
7878
+ NOTES => q{
7879
+ These tags are used by the EOS 1DXmkII, 5DS, 5DSR, 5DmkIV, 6DmkII, 77D, 80D,
7880
+ 200D, 800D, 1300D, 2000D, 4000D and 9000D.
7881
+ },
7870
7882
  FORMAT => 'int16s',
7871
7883
  FIRST_ENTRY => 0,
7872
7884
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -7877,10 +7889,10 @@ my %ciMaxFocal = (
7877
7889
  DataMember => 'ColorDataVersion',
7878
7890
  RawConv => '$$self{ColorDataVersion} = $val',
7879
7891
  PrintConv => {
7880
- 12 => '12 (5DS/5DSR)',
7881
- 13 => '13 (80D)', #PH
7892
+ 12 => '12 (1DXmkII/5DS/5DSR)',
7893
+ 13 => '13 (80D/5DmkIV)', #PH
7882
7894
  14 => '14 (1300D/2000D/4000D)', #IB
7883
- 15 => '15 (6DmkII/77D/200D/800D)', #IB
7895
+ 15 => '15 (6DmkII/77D/200D/800D,9000D)', #IB
7884
7896
  },
7885
7897
  },
7886
7898
  0x3f => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
@@ -8027,6 +8039,7 @@ my %ciMaxFocal = (
8027
8039
  # Color data (MakerNotes tag 0x4001, count=1820,etc) (ref PH)
8028
8040
  %Image::ExifTool::Canon::ColorData9 = (
8029
8041
  %binaryDataAttrs,
8042
+ NOTES => 'These tags are used by the M6mkII, M50, M200, EOS R, RP, 90D, 250D and 850D',
8030
8043
  FORMAT => 'int16s',
8031
8044
  FIRST_ENTRY => 0,
8032
8045
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -8039,8 +8052,8 @@ my %ciMaxFocal = (
8039
8052
  PrintConv => {
8040
8053
  16 => '16 (M50)',
8041
8054
  17 => '17 (EOS R)', # (and PowerShot SX740HS)
8042
- 18 => '18 (EOS RP)', # (and PowerShot SX70HS)
8043
- 19 => '19 (90D/M6mkII/M200)',# (and PowerShot G7XmkIII)
8055
+ 18 => '18 (EOS RP/250D)', # (and PowerShot SX70HS)
8056
+ 19 => '19 (90D/850D/M6mkII/M200)',# (and PowerShot G7XmkIII)
8044
8057
  },
8045
8058
  },
8046
8059
  0x47 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
@@ -8151,6 +8164,7 @@ my %ciMaxFocal = (
8151
8164
  # (same as ColorData9 but shifted up by 0x0e, ref PH)
8152
8165
  %Image::ExifTool::Canon::ColorData10 = (
8153
8166
  %binaryDataAttrs,
8167
+ NOTES => 'These tags are used by the R5, R5 and EOS 1DXmkIII.',
8154
8168
  FORMAT => 'int16s',
8155
8169
  FIRST_ENTRY => 0,
8156
8170
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -8269,6 +8283,125 @@ my %ciMaxFocal = (
8269
8283
  },
8270
8284
  );
8271
8285
 
8286
+ # Color data (MakerNotes tag 0x4001, count=3973, ref IB)
8287
+ %Image::ExifTool::Canon::ColorData11 = (
8288
+ %binaryDataAttrs,
8289
+ NOTES => 'These tags are used by the EOS R3',
8290
+ FORMAT => 'int16s',
8291
+ FIRST_ENTRY => 0,
8292
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8293
+ DATAMEMBER => [ 0 ],
8294
+ IS_SUBDIR => [ 0x12c ],
8295
+ 0x00 => {
8296
+ Name => 'ColorDataVersion',
8297
+ DataMember => 'ColorDataVersion',
8298
+ RawConv => '$$self{ColorDataVersion} = $val',
8299
+ PrintConv => {
8300
+ 34 => '34 (R3)', #IB
8301
+ },
8302
+ },
8303
+ 0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
8304
+ 0x6d => 'ColorTempAsShot',
8305
+ 0x6e => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' },
8306
+ 0x72 => 'ColorTempAuto',
8307
+ 0x73 => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' },
8308
+ 0x77 => 'ColorTempMeasured',
8309
+ 0x78 => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 },
8310
+ 0x7c => { Name => 'ColorTempUnknown', Unknown => 1 },
8311
+ 0x7d => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 },
8312
+ 0x81 => { Name => 'ColorTempUnknown2', Unknown => 1 },
8313
+ 0x82 => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 },
8314
+ 0x86 => { Name => 'ColorTempUnknown3', Unknown => 1 },
8315
+ 0x87 => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 },
8316
+ 0x8b => { Name => 'ColorTempUnknown4', Unknown => 1 },
8317
+ 0x8c => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 },
8318
+ 0x90 => { Name => 'ColorTempUnknown5', Unknown => 1 },
8319
+ 0x91 => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 },
8320
+ 0x95 => { Name => 'ColorTempUnknown6', Unknown => 1 },
8321
+ 0x96 => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 },
8322
+ 0x9a => { Name => 'ColorTempUnknown7', Unknown => 1 },
8323
+ 0x9b => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 },
8324
+ 0x9f => { Name => 'ColorTempUnknown8', Unknown => 1 },
8325
+ 0xa0 => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 },
8326
+ 0xa4 => { Name => 'ColorTempUnknown9', Unknown => 1 },
8327
+ 0xa5 => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 },
8328
+ 0xa9 => { Name => 'ColorTempUnknown10', Unknown => 1 },
8329
+ 0xaa => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
8330
+ 0xae => { Name => 'ColorTempUnknown11', Unknown => 1 },
8331
+ 0xaf => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
8332
+ 0xb3 => { Name => 'ColorTempUnknown11', Unknown => 1 },
8333
+ 0xb4 => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 },
8334
+ 0xb8 => { Name => 'ColorTempUnknown12', Unknown => 1 },
8335
+ 0xb9 => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 },
8336
+ 0xbd => { Name => 'ColorTempUnknown13', Unknown => 1 },
8337
+ 0xbe => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 },
8338
+ 0xc2 => { Name => 'ColorTempUnknown14', Unknown => 1 },
8339
+ 0xc3 => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 },
8340
+ 0xc7 => { Name => 'ColorTempUnknown15', Unknown => 1 },
8341
+ 0xc8 => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 },
8342
+ 0xcc => { Name => 'ColorTempUnknown16', Unknown => 1 },
8343
+ 0xcd => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' },
8344
+ 0xd1 => 'ColorTempDaylight',
8345
+ 0xd2 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' },
8346
+ 0xd6 => 'ColorTempShade',
8347
+ 0xd7 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' },
8348
+ 0xdb => 'ColorTempCloudy',
8349
+ 0xdc => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' },
8350
+ 0xe0 => 'ColorTempTungsten',
8351
+ 0xe1 => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' },
8352
+ 0xe5 => 'ColorTempFluorescent',
8353
+ 0xe6 => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' },
8354
+ 0xea => 'ColorTempKelvin',
8355
+ 0xeb => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' },
8356
+ 0xef => 'ColorTempFlash',
8357
+ 0xf0 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 },
8358
+ 0xf4 => { Name => 'ColorTempUnknown17', Unknown => 1 },
8359
+ 0xf5 => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 },
8360
+ 0xf9 => { Name => 'ColorTempUnknown18', Unknown => 1 },
8361
+ 0xfa => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 },
8362
+ 0xfe => { Name => 'ColorTempUnknown19', Unknown => 1 },
8363
+ 0xff => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 },
8364
+ 0x103 => { Name => 'ColorTempUnknown20', Unknown => 1 },
8365
+ 0x104 => { Name => 'WB_RGGBLevelsUnknown21', Format => 'int16s[4]', Unknown => 1 },
8366
+ 0x108 => { Name => 'ColorTempUnknown21', Unknown => 1 },
8367
+ 0x109 => { Name => 'WB_RGGBLevelsUnknown22', Format => 'int16s[4]', Unknown => 1 },
8368
+ 0x10d => { Name => 'ColorTempUnknown22', Unknown => 1 },
8369
+ 0x10e => { Name => 'WB_RGGBLevelsUnknown23', Format => 'int16s[4]', Unknown => 1 },
8370
+ 0x112 => { Name => 'ColorTempUnknown23', Unknown => 1 },
8371
+ 0x113 => { Name => 'WB_RGGBLevelsUnknown24', Format => 'int16s[4]', Unknown => 1 },
8372
+ 0x117 => { Name => 'ColorTempUnknown24', Unknown => 1 },
8373
+ 0x118 => { Name => 'WB_RGGBLevelsUnknown25', Format => 'int16s[4]', Unknown => 1 },
8374
+ 0x11c => { Name => 'ColorTempUnknown25', Unknown => 1 },
8375
+ 0x11d => { Name => 'WB_RGGBLevelsUnknown26', Format => 'int16s[4]', Unknown => 1 },
8376
+ 0x121 => { Name => 'ColorTempUnknown26', Unknown => 1 },
8377
+ 0x122 => { Name => 'WB_RGGBLevelsUnknown27', Format => 'int16s[4]', Unknown => 1 },
8378
+ 0x126 => { Name => 'ColorTempUnknown27', Unknown => 1 },
8379
+ 0x12c => {
8380
+ Name => 'ColorCalib',
8381
+ Format => 'undef[120]',
8382
+ Unknown => 1,
8383
+ SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' }
8384
+ },
8385
+ 0x16b => {
8386
+ Name => 'PerChannelBlackLevel',
8387
+ Format => 'int16u[4]',
8388
+ },
8389
+ # 0x27c - PerChannelBlackLevel again
8390
+ 0x280 => {
8391
+ Name => 'NormalWhiteLevel',
8392
+ Format => 'int16u',
8393
+ RawConv => '$val || undef',
8394
+ },
8395
+ 0x281 => {
8396
+ Name => 'SpecularWhiteLevel',
8397
+ Format => 'int16u',
8398
+ },
8399
+ 0x282 => {
8400
+ Name => 'LinearityUpperMargin',
8401
+ Format => 'int16u',
8402
+ },
8403
+ );
8404
+
8272
8405
  # Unknown color data (MakerNotes tag 0x4001)
8273
8406
  %Image::ExifTool::Canon::ColorDataUnknown = (
8274
8407
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
@@ -15,7 +15,7 @@ use strict;
15
15
  use vars qw($VERSION);
16
16
  use Image::ExifTool::XMP;
17
17
 
18
- $VERSION = '1.05';
18
+ $VERSION = '1.06';
19
19
 
20
20
  my %dateTimeInfo = (
21
21
  # NOTE: Do NOT put "Groups" here because Groups hash must not be common!
@@ -38,7 +38,7 @@ my %event = (
38
38
  earliestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
39
39
  endDayOfYear => { Writable => 'integer', Groups => { 2 => 'Time' } },
40
40
  eventDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
41
- eventID => { },
41
+ eventID => { Avoid => 1, Notes => 'avoided in favor of XMP-iptcExt:EventID' },
42
42
  eventRemarks => { Writable => 'lang-alt' },
43
43
  eventTime => {
44
44
  Groups => { 2 => 'Time' },
@@ -20,7 +20,7 @@ use strict;
20
20
  use vars qw($VERSION);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
 
23
- $VERSION = '1.18';
23
+ $VERSION = '1.19';
24
24
 
25
25
  # road map of directory locations in GIF images
26
26
  my %gifMap = (
@@ -54,6 +54,7 @@ my %gifMap = (
54
54
  Extensions => { # (for documentation only)
55
55
  SubDirectory => { TagTable => 'Image::ExifTool::GIF::Extensions' },
56
56
  },
57
+ TransparentColor => { },
57
58
  );
58
59
 
59
60
  # GIF89a application extensions:
@@ -475,6 +476,9 @@ Block:
475
476
  my $delay = Get16u(\$buff, 1);
476
477
  $delayTime += $delay;
477
478
  $verbose and printf $out "Graphic Control: delay=%.2f\n", $delay / 100;
479
+ # get transparent colour
480
+ my $bits = Get8u(\$buff, 0);
481
+ $et->HandleTag($tagTablePtr, 'TransparentColor', Get8u(\$buff,3)) if $bits & 0x01;
478
482
  $raf->Seek(-$length, 1) or last;
479
483
 
480
484
  } elsif ($a == 0x01 and $length == 12) { # plain text extension
@@ -137,22 +137,26 @@ my %coordConv = (
137
137
  my ($v, $et) = @_;
138
138
  $v = $et->TimeNow() if lc($v) eq 'now';
139
139
  my @tz;
140
- if ($v =~ s/([-+])(.*)//s) { # remove timezone
140
+ if ($v =~ s/([-+])(\d{1,2}):?(\d{2})\s*(DST)?$//i) { # remove timezone
141
141
  my $s = $1 eq '-' ? 1 : -1; # opposite sign to convert back to UTC
142
142
  my $t = $2;
143
- @tz = ($s*$1, $s*$2) if $t =~ /^(\d{2}):?(\d{2})\s*$/;
143
+ @tz = ($s*$2, $s*$3);
144
144
  }
145
- my @a = ($v =~ /((?=\d|\.\d)\d*(?:\.\d*)?)/g);
146
- push @a, '00' while @a < 3;
145
+ # (note: we must allow '.' as a time separator, eg. '10.30.00', with is tricky due to decimal seconds)
146
+ # YYYYmmddHHMMSS[.ss] format
147
+ my @a = ($v =~ /^[^\d]*\d{4}[^\d]*\d{1,2}[^\d]*\d{1,2}[^\d]*(\d{1,2})[^\d]*(\d{2})[^\d]*(\d{2}(?:\.\d+)?)[^\d]*$/);
148
+ # HHMMSS[.ss] format
149
+ @a or @a = ($v =~ /^[^\d]*(\d{1,2})[^\d]*(\d{2})[^\d]*(\d{2}(?:\.\d+)?)[^\d]*$/);
150
+ @a or warn('Invalid time (use HH:MM:SS[.ss][+/-HH:MM|Z])'), return undef;
147
151
  if (@tz) {
148
152
  # adjust to UTC
149
- $a[-2] += $tz[1];
150
- $a[-3] += $tz[0];
151
- while ($a[-2] >= 60) { $a[-2] -= 60; ++$a[-3] }
152
- while ($a[-2] < 0) { $a[-2] += 60; --$a[-3] }
153
- $a[-3] = ($a[-3] + 24) % 24;
153
+ $a[1] += $tz[1];
154
+ $a[0] += $tz[0];
155
+ while ($a[1] >= 60) { $a[1] -= 60; ++$a[0] }
156
+ while ($a[1] < 0) { $a[1] += 60; --$a[0] }
157
+ $a[0] = ($a[0] + 24) % 24;
154
158
  }
155
- return "$a[-3]:$a[-2]:$a[-1]";
159
+ return join(':', @a);
156
160
  },
157
161
  },
158
162
  0x0008 => {