exiftool_vendored 12.36.0 → 12.37.0

Sign up to get free protection for your applications and to get access to all the features.
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 => {