exiftool-vendored.pl 13.16.0 → 13.25.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.
Files changed (54) hide show
  1. package/bin/Changes +114 -4
  2. package/bin/MANIFEST +16 -2
  3. package/bin/META.json +1 -1
  4. package/bin/META.yml +1 -1
  5. package/bin/README +46 -46
  6. package/bin/config_files/example.config +1 -1
  7. package/bin/exiftool +212 -122
  8. package/bin/lib/Image/ExifTool/Apple.pm +12 -2
  9. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +16 -10
  10. package/bin/lib/Image/ExifTool/Canon.pm +3 -2
  11. package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  12. package/bin/lib/Image/ExifTool/DJI.pm +190 -29
  13. package/bin/lib/Image/ExifTool/DarwinCore.pm +22 -11
  14. package/bin/lib/Image/ExifTool/EXE.pm +2 -9
  15. package/bin/lib/Image/ExifTool/GM.pm +1 -1
  16. package/bin/lib/Image/ExifTool/GPS.pm +3 -3
  17. package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  18. package/bin/lib/Image/ExifTool/GoPro.pm +86 -48
  19. package/bin/lib/Image/ExifTool/ICO.pm +2 -2
  20. package/bin/lib/Image/ExifTool/JPEG.pm +12 -2
  21. package/bin/lib/Image/ExifTool/JSON.pm +5 -1
  22. package/bin/lib/Image/ExifTool/Kodak.pm +3 -2
  23. package/bin/lib/Image/ExifTool/Nikon.pm +1003 -1399
  24. package/bin/lib/Image/ExifTool/NikonCustom.pm +4 -4
  25. package/bin/lib/Image/ExifTool/Olympus.pm +2 -1
  26. package/bin/lib/Image/ExifTool/PCAP.pm +462 -0
  27. package/bin/lib/Image/ExifTool/PDF.pm +10 -1
  28. package/bin/lib/Image/ExifTool/PLIST.pm +92 -29
  29. package/bin/lib/Image/ExifTool/PNG.pm +7 -1
  30. package/bin/lib/Image/ExifTool/Photoshop.pm +2 -2
  31. package/bin/lib/Image/ExifTool/Plot.pm +713 -0
  32. package/bin/lib/Image/ExifTool/Protobuf.pm +24 -11
  33. package/bin/lib/Image/ExifTool/Qualcomm.pm +78 -1
  34. package/bin/lib/Image/ExifTool/QuickTime.pm +348 -318
  35. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +75 -27
  36. package/bin/lib/Image/ExifTool/Samsung.pm +4 -0
  37. package/bin/lib/Image/ExifTool/Sony.pm +34 -15
  38. package/bin/lib/Image/ExifTool/TagLookup.pm +5061 -4967
  39. package/bin/lib/Image/ExifTool/TagNames.pod +8302 -8160
  40. package/bin/lib/Image/ExifTool/Trailer.pm +318 -0
  41. package/bin/lib/Image/ExifTool/Validate.pm +4 -4
  42. package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  43. package/bin/lib/Image/ExifTool/WriteExif.pl +9 -4
  44. package/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  45. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +62 -5
  46. package/bin/lib/Image/ExifTool/Writer.pl +14 -13
  47. package/bin/lib/Image/ExifTool/XMP.pm +34 -6
  48. package/bin/lib/Image/ExifTool/XMP2.pl +5 -2
  49. package/bin/lib/Image/ExifTool.pm +193 -92
  50. package/bin/lib/Image/ExifTool.pod +121 -124
  51. package/bin/perl-Image-ExifTool.spec +45 -45
  52. package/bin/windows_exiftool.txt +95 -71
  53. package/package.json +3 -3
  54. package/bin/lib/Image/ExifTool/Vivo.pm +0 -124
@@ -7,6 +7,7 @@
7
7
  #
8
8
  # References: 1) https://github.com/gopro/gpmf-parser
9
9
  # 2) https://github.com/stilldavid/gopro-utils
10
+ # 3) https://github.com/gopro/gpmf-parser
10
11
  #------------------------------------------------------------------------------
11
12
 
12
13
  package Image::ExifTool::GoPro;
@@ -16,7 +17,7 @@ use vars qw($VERSION);
16
17
  use Image::ExifTool qw(:DataAccess :Utils);
17
18
  use Image::ExifTool::QuickTime;
18
19
 
19
- $VERSION = '1.11';
20
+ $VERSION = '1.12';
20
21
 
21
22
  sub ProcessGoPro($$$);
22
23
  sub ProcessString($$$);
@@ -59,6 +60,8 @@ my %addUnits = (
59
60
  PrintConv => 'Image::ExifTool::GoPro::AddUnits($self, $val, $tag)',
60
61
  );
61
62
 
63
+ my %noYes = ( N => 'No', Y => 'Yes' );
64
+
62
65
  # Tags found in the GPMF box of Hero6 mp4 videos (ref PH), and
63
66
  # the gpmd-format timed metadata of Hero5 and Hero6 videos (ref 1)
64
67
  %Image::ExifTool::GoPro::GPMF = (
@@ -72,7 +75,7 @@ my %addUnits = (
72
75
  let me know if you discover the meaning of any of these unknown tags. See
73
76
  L<https://github.com/gopro/gpmf-parser> for details about this format.
74
77
  },
75
- # ABSC (GPMF) - seen: 0 (fmt f)
78
+ ABSC => 'AutoBoostScore', #3
76
79
  ACCL => { #2 (gpmd)
77
80
  Name => 'Accelerometer',
78
81
  Notes => 'accelerator readings in m/s2',
@@ -82,9 +85,9 @@ my %addUnits = (
82
85
  # ANGY (GPMF-GEOC) - seen 179.9 (fmt d, Max)
83
86
  # ANGZ (GPMF-GEOC) - seen 0.152 (fmt d, Max)
84
87
  ALLD => 'AutoLowLightDuration', #1 (gpmd) (untested)
85
- # APTO (GPMF) - seen: 'OFF', 'RAW', 'DYNM' (fmt c)
86
- # ARUW (GPMF) - seen: 1.14285719394684 (fmt f)
87
- # ARWA (GPMF) - seen: 1.14285719394684 (fmt f)
88
+ APTO => 'AudioProtuneOption', #3
89
+ ARUW => 'AspectRatioUnwarped', #3
90
+ ARWA => 'AspectRatioWarped', #3
88
91
  ATTD => { #PH (Karma)
89
92
  Name => 'Attitude',
90
93
  # UNIT=s,rad,rad,rad,rad/s,rad/s,rad/s,
@@ -99,10 +102,10 @@ my %addUnits = (
99
102
  # SCAL=1000 1 1 1 1
100
103
  Binary => 1,
101
104
  },
102
- # AUBT (GPMF) - seen: ''N' (type c)
105
+ AUBT => { Name => 'AudioBlueTooth', PrintConv => \%noYes }, #3
103
106
  AUDO => 'AudioSetting', #PH (GPMF - seen: 'WIND', fmt c)
104
- # AUPT (GPMF) - seen: 'N','Y' (fmt c)
105
- # BITR (GPMF) - seen: 'STANDARD' (fmt c)
107
+ AUPT => { Name => 'AutoProtune', PrintConv => \%noYes },
108
+ BITR => 'BitrateSetting', #3
106
109
  BPOS => { #PH (Karma)
107
110
  Name => 'Controller',
108
111
  Unknown => 1,
@@ -116,16 +119,22 @@ my %addUnits = (
116
119
  # CALH (GPMF-GEOC) - seen 3040 (fmt L, Max)
117
120
  # CALW (GPMF-GEOC) - seen 4056 (fmt L, Max)
118
121
  CASN => 'CameraSerialNumber', #PH (GPMF - seen: 'C3221324545448', fmt c)
119
- # CDAT (GPMF) - seen: 1732152823 (fmt J)
120
- # CDTM (GPMF) - seen: 0 (fmt L)
122
+ CDAT => { #3
123
+ Name => 'CreationDate',
124
+ Groups => { 2 => 'Time' },
125
+ RawConv => 'ConvertUnixTime($val)',
126
+ PrintConv => '$self->ConvertDateTime($val)',
127
+ },
128
+ CDTM => 'CaptureDelayTimer', #3
121
129
  # CINF (GPMF) - seen: 0x67376be7709bc8876a8baf3940908618, 0xe230988539b30cf5f016627ae8fc5395,
122
130
  # 0x8bcbe424acc5b37d7d77001635198b3b (fmt B) (Camera INFormation?)
123
- # CLDP (GPMF) - seen: 'Y' (fmt c)
131
+ CLDP => { Name => 'ClassificationDataPresent', PrintConv => \%noYes },
124
132
  # CLKC (GPMF) - seen: 0 (fmt L)
125
133
  # CLKS (GPMF) - seen: 2 (fmt B)
126
- # CMOD (GPMF) - seen: 12,13,17 [12 360 video, 13 time-laps video, 17 JPEG] (fmt B)
134
+ # CMOD (GPMF) - seen: 12,13,17 [12 360 video, 13 time-laps video, 17 JPEG] (fmt B) - CameraMode (ref 3)
127
135
  # CPID (GPMF) - seen: '1194885996 3387225026 733916448 2433577768' (fmt L)
128
136
  # CPIN (GPMF) - seen: 1
137
+ CPIN => 'ChapterNumber',
129
138
  # CRTX (GPMF-BACK/FRNT) - double[1]
130
139
  # CRTY (GPMF-BACK/FRNT) - double[1]
131
140
  CSEN => { #PH (Karma)
@@ -135,7 +144,7 @@ my %addUnits = (
135
144
  # SCAL=1000 1 1 1 1 1 1 1 1 1 1
136
145
  Binary => 1,
137
146
  },
138
- # CTRL (GPMF) - seen: 'Pro' (fmt c)
147
+ CTRL => 'ControlLevel', #3
139
148
  CYTS => { #PH (Karma)
140
149
  Name => 'CoyoteStatus',
141
150
  # UNIT=s,,,,,rad,rad,rad,,
@@ -155,22 +164,22 @@ my %addUnits = (
155
164
  # (Max) DVID='HLMT',DVNM='Highlights'
156
165
  },
157
166
  # DNSC (GPMF) - seen: 'HIGH' (fmt c)
158
- # DUST (GPMF) - seen: 'NO_LIMIT' (fmt c)
167
+ DUST => 'DurationSetting', #3
159
168
  # DVID (GPMF) - DeviceID; seen: 1 (fmt L), HLMT (fmt F), GEOC (fmt F), 'BACK' (fmt F, Max)
160
169
  DVID => { Name => 'DeviceID', Unknown => 1 }, #2 (gpmd)
161
170
  # DVNM (GPMF) seen: 'Video Global Settings' (fmt c), 'Highlights' (fmt c), 'Geometry Calibrations' (Max)
162
171
  # DVNM (gpmd) seen: 'Camera' (Hero5), 'Hero6 Black' (Hero6), 'GoPro Karma v1.0' (Karma)
163
172
  DVNM => 'DeviceName', #PH (n/c)
164
173
  DZOM => { #PH (GPMF - seen: 'Y', fmt c)
165
- Name => 'DigitalZoom',
166
- PrintConv => { N => 'No', Y => 'Yes' },
174
+ Name => 'DigitalZoomOn',
175
+ PrintConv => \%noYes,
167
176
  },
168
- # DZMX (GPMF) - seen: 1.39999997615814 (fmt f)
169
- # DZST (GPMF) - seen: 0 (fmt L) (something to do with digital zoom maybe?)
177
+ DZMX => 'DigitalZoomAmount', #3
178
+ DZST => 'DigitalZoom', #3
170
179
  EISA => { #PH (GPMF) - seen: 'Y','N','HS EIS','N/A' (fmt c) [N was for a time-lapse video]
171
180
  Name => 'ElectronicImageStabilization',
172
181
  },
173
- # EISE (GPMF) - seen: 'Y','N' (fmt c)
182
+ EISE => { Name => 'ElectronicStabilizationOn', PrintConv => \%noYes }, #3
174
183
  EMPT => { Name => 'Empty', Unknown => 1 }, #2 (gpmd)
175
184
  ESCS => { #PH (Karma)
176
185
  Name => 'EscapeStatus',
@@ -180,7 +189,7 @@ my %addUnits = (
180
189
  Unknown => 1,
181
190
  %addUnits,
182
191
  },
183
- # EXPT (GPMF) - seen: '', 'AUTO' (fmt c)
192
+ EXPT => 'ExposureType', #3
184
193
  FACE => 'FaceDetected', #PH (gpmd)
185
194
  FCNM => 'FaceNumbers', #PH (gpmd) (faces counted per frame, ref 1)
186
195
  FMWR => 'FirmwareVersion', #PH (GPMF - seen: HD6.01.01.51.00, fmt c)
@@ -242,10 +251,10 @@ my %addUnits = (
242
251
  Notes => 'gyroscope readings in rad/s',
243
252
  Binary => 1,
244
253
  },
245
- # HCTL (GPMF) - seen: "Off" (fmt c)
246
- # HDRV (GPMF) - seen: "N" (fmt c)
254
+ HCLT => 'HorizonControl', #3
255
+ HDRV => { Name => 'HDRVideo', PrintConv => \%noYes }, #3/PH (NC)
247
256
  # HFLG (APP6) - seen: 0
248
- # HSGT (GPMF) - seen: 'OFF' (fmt c)
257
+ HSGT => 'HindsightSettings', #3
249
258
  ISOE => 'ISOSpeeds', #PH (gpmd)
250
259
  ISOG => { #2 (gpmd)
251
260
  Name => 'ImageSensorGain',
@@ -270,20 +279,20 @@ my %addUnits = (
270
279
  Binary => 1,
271
280
  },
272
281
  MAGN => 'Magnetometer', #1 (gpmd) (units of uT)
273
- # MAPX (GPMF) - seen: 1 (fmt f)
274
- # MAPY (GPMF) - seen: 1 (fmt f)
282
+ MAPX => 'MappingXCoefficients', #3
283
+ MAPY => 'MappingYCoefficients', #3
275
284
  # MFOV (GPMF-BACK/FRNT) - seen: 100 (fmt d, Max)
276
285
  MINF => { #PH (GPMF - seen: HERO6 Black, fmt c)
277
286
  Name => 'Model',
278
287
  Groups => { 2 => 'Camera' },
279
288
  Description => 'Camera Model Name',
280
289
  },
281
- # MMOD (GPMF) - seen: 'STEREO' (fmt c)
282
- # MTYP (GPMF) - seen: 0,1,5,11 [1 for time-lapse video, 5 for 360 video, 11 for JPEG] (fmt B)
283
- # MUID (GPMF) - seen: 3882563431 2278071152 967805802 411471936 0 0 0 0 (fmt L)
284
- # MXCF (GPMF) - seen: 'x1' (fmt c)
285
- # MYCF (GPMF) - seen: 'y1' (fmt c)
286
- # ORDP (GPMF) - seen: 'Y' (fmt c)
290
+ MMOD => 'MediaMode', #3
291
+ # MTYP (GPMF) - seen: 0,1,5,11 [1 for time-lapse video, 5 for 360 video, 11 for JPEG] (fmt B) - MediaType (ref 3)
292
+ MUID => { Name => 'MediaUID', ValueConv => 'join("-", unpack("H8H4H4H4H12", $val))' },
293
+ MXCF => 'MappingXMode', #3
294
+ MYCF => 'MappingYMode', #3
295
+ ORDP => { Name => 'OrientationDataPresent', PrintConv => \%noYes }, #3
287
296
  OREN => { #PH (GPMF - seen: 'U', fmt c)
288
297
  Name => 'AutoRotation',
289
298
  PrintConv => {
@@ -292,20 +301,20 @@ my %addUnits = (
292
301
  A => 'Auto', # (NC)
293
302
  },
294
303
  },
295
- # (most of the "P" tags are ProTune settings - PH)
304
+ # (most of the "P" tags are Protune settings - PH)
296
305
  PHDR => 'HDRSetting', #PH (APP6 - seen: 0)
297
- # PIMD (GPMF) - seen: 'AUTO' (fmt c)
306
+ PIMD => 'ProtuneISOMode', #3
298
307
  PIMN => 'AutoISOMin', #PH (GPMF - seen: 100, fmt L)
299
308
  PIMX => 'AutoISOMax', #PH (GPMF - seen: 1600, fmt L)
300
- # POLY (GPMF) - seen: '0 2.11120247840881 0.14325800538063 -1.030...' (fmt f)
309
+ POLY => 'PolynomialCoefficients', #3
301
310
  # PRAW (APP6) - seen: 0, 'N', 'Y' (fmt c)
302
311
  # PRCN (GPMF) - seen: 65 zeros (fmt B)
303
312
  PRES => 'PhotoResolution', #PH (APP6 - seen: '12MP_W')
304
- # PRJT (APP6) - seen: 'GPRO','EACO' (fmt F, Hero8, Max)
305
- # PRNA (GPMF) - seen 10 (fmt B)
306
- # PRNU (GPMF) - seen 0 (fmt B)
313
+ PRJT => 'LensProjection', #3
314
+ # PRNA (GPMF) - seen 10 (fmt B) - PresetIDs (ref 3)
315
+ # PRNU (GPMF) - seen 0 (fmt B) - PresetIDs (ref 3)
307
316
  PRTN => { #PH (GPMF - seen: 'N', fmt c)
308
- Name => 'ProTune',
317
+ Name => 'Protune',
309
318
  PrintConv => {
310
319
  N => 'Off',
311
320
  Y => 'On', # (NC)
@@ -316,9 +325,9 @@ my %addUnits = (
316
325
  PTSH => 'Sharpness', #PH (GPMF - seen: 'HIGH', fmt c)
317
326
  PTWB => 'WhiteBalance', #PH (GPMF - seen: 'AUTO', fmt c)
318
327
  # PVUL (APP6) - seen: 'F' (fmt c, Hero8, Max)
319
- # PWPR (GPMF) - seen: 'PERFORMANCE' (fmt c)
320
- # PYCF (GPMF) - seen: '[r0,r1,r2,r3,r4,r5,r6]' (fmt c)
321
- # RAMP (GPMF) - seen: empty string (fmt c)
328
+ PWPR => 'PowerProfile', #3
329
+ PYCF => 'PolynomialPower', #3
330
+ RAMP => 'SpeedRampSetting', #3
322
331
  RATE => 'Rate', #PH (GPMF - seen: '0_5SEC', fmt c; APP6 - seen: '4_1SEC')
323
332
  RMRK => { #2 (gpmd)
324
333
  Name => 'Comments',
@@ -328,7 +337,7 @@ my %addUnits = (
328
337
  Name => 'ScaleFactor',
329
338
  Unknown => 1,
330
339
  },
331
- # SCAP (GPMF) - seen: 'N' (fmt c)
340
+ SCAP => { Name => 'ScheduleCapture', PrintConv => \%noYes }, #3
332
341
  SCPR => { #PH (Karma) [stream was empty]
333
342
  Name => 'ScaledPressure',
334
343
  # UNIT=s,Pa,Pa,degC
@@ -336,7 +345,7 @@ my %addUnits = (
336
345
  # SCAL=1000 0.00999999977648258 0.00999999977648258 100
337
346
  %addUnits,
338
347
  },
339
- # SCTM (GPMF) - seen 0 (fmt L)
348
+ SCTM => 'ScheduleCaptureTime', #3 (seconds since UTC midnight)
340
349
  # SFTR (GPMF-BACK/FRNT) - seen 0.999,1.00004 (fmt d, Max)
341
350
  # SHFX (GPMF-GEOC) - seen 22.92 (fmt d, Max)
342
351
  # SHFY (GPMF-GEOC) - seen 0.123 (fmt d, Max)
@@ -361,9 +370,9 @@ my %addUnits = (
361
370
  Unknown => 1,
362
371
  ValueConv => '$self->Decode($val, "Latin")',
363
372
  },
364
- # SMTR (GPMF) - seen: 'N' (fmt c)
373
+ SMTR => { Name => 'SpotMeter', PrintConv => \%noYes }, #3
365
374
  # SOFF (APP6) - seen: 0 (fmt L, Hero8, Max)
366
- # SROT (GPMF) - seen 20.60 (fmt f, Max)
375
+ SROT => 'SensorReadoutTime', #3
367
376
  STMP => { #1 (gpmd)
368
377
  Name => 'TimeStamp',
369
378
  ValueConv => '$val / 1e6',
@@ -437,8 +446,8 @@ my %addUnits = (
437
446
  Name => 'WhiteBalanceRGB',
438
447
  Binary => 1,
439
448
  },
440
- # ZFOV (APP6,GPMF) - seen: 148.34, 0 (fmt f, Hero8, Max)
441
- # ZMPL (GPMF) - seen: 0.652929663658142 (fmt f)
449
+ ZFOV => 'DiagonalFieldOfView', #3
450
+ ZMPL => 'ZoomScaleNormalization', #3
442
451
  #
443
452
  # the following ref forum12825
444
453
  #
@@ -450,7 +459,6 @@ my %addUnits = (
450
459
  return join('', @a);
451
460
  },
452
461
  },
453
- EXPT => 'MaximumShutterAngle',
454
462
  MTRX => 'AccelerometerMatrix',
455
463
  ORIN => 'InputOrientation',
456
464
  ORIO => 'OutputOrientation',
@@ -753,6 +761,32 @@ sub ProcessString($$$)
753
761
  return 1;
754
762
  }
755
763
 
764
+ #------------------------------------------------------------------------------
765
+ # Process "GP\x06\0" records in MP4 'mdat'atom
766
+ # Inputs: 0) ExifTool object ref, 1) dirInfo ref (RAF and DirLen)
767
+ # Returns: size of GoPro record, or 0 on error
768
+ sub ProcessGP6($$)
769
+ {
770
+ my ($et, $dirInfo) = @_;
771
+ my $raf = $$dirInfo{RAF};
772
+ my $len = $$dirInfo{DirLen};
773
+ my $buff;
774
+ while ($len > 16) {
775
+ $raf->Read($buff, 16) == 16 or last;
776
+ my ($tag, $size) = unpack('a4N', $buff);
777
+ last if $size + 16 > $len or $buff !~ /^GP..\0/s;
778
+ $raf->Read($buff, $size) == $size or last;
779
+ if ($buff =~ /^DEVC/) {
780
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
781
+ my $tagTbl = GetTagTable('Image::ExifTool::GoPro::GPMF');
782
+ ProcessGoPro($et, { DataPt => \$buff, DataPos => $raf->Tell()-$size }, $tagTbl);
783
+ }
784
+ $len -= $size + 16;
785
+ }
786
+ delete $$et{DOC_NUM};
787
+ return $$dirInfo{DirLen} - $len;
788
+ }
789
+
756
790
  #------------------------------------------------------------------------------
757
791
  # Process GoPro metadata (gpmd samples, GPMF box, or APP6) (ref PH/1/2)
758
792
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
@@ -770,6 +804,7 @@ sub ProcessGoPro($$$)
770
804
  my ($size, $type, $unit, $scal, $setGroup0);
771
805
 
772
806
  $et->VerboseDir($$dirInfo{DirName} || 'GPMF', undef, $dirEnd-$pos) if $verbose;
807
+ $$et{FoundEmbedded} = 1;
773
808
  if ($pos) {
774
809
  my $parent = $$dirInfo{Parent};
775
810
  $setGroup0 = $$et{SET_GROUP0} = 'APP6' if $parent and $parent eq 'APP6';
@@ -827,6 +862,7 @@ sub ProcessGoPro($$$)
827
862
  ScaleValues($val, $scal) if $scal and $tag ne 'SCAL' and $pos+$size+3>=$dirEnd;
828
863
  my $key = $et->HandleTag($tagTablePtr, $tag, $val,
829
864
  DataPt => $dataPt,
865
+ DataPos => $$dirInfo{DataPos},
830
866
  Base => $base,
831
867
  Start => $pos,
832
868
  Size => $size,
@@ -873,6 +909,8 @@ under the same terms as Perl itself.
873
909
 
874
910
  =item L<https://github.com/stilldavid/gopro-utils>
875
911
 
912
+ =item L<https://github.com/gopro/gpmf-parser>
913
+
876
914
  =back
877
915
 
878
916
  =head1 SEE ALSO
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.00';
17
+ $VERSION = '1.01';
18
18
 
19
19
  %Image::ExifTool::ICO::Main = (
20
20
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
@@ -95,7 +95,7 @@ sub ProcessICO($$$)
95
95
  $et->HandleTag($tagTbl, 4, $num);
96
96
  for ($i=0; $i<$num; ++$i) {
97
97
  $raf->Read($buff, 16) == 16 or $et->Warn('Truncated file'), last;
98
- $$et{DOC_NUM} = ++$$et{DOC_COUNT} if $i;
98
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
99
99
  $et->HandleTag($tagTbl, 6, $buff);
100
100
  }
101
101
  delete $$et{DOC_NUM};
@@ -134,6 +134,10 @@ sub ProcessJPEG_HDR($$$);
134
134
  Name => 'FPXR', # (non-standard location written by some HP models)
135
135
  Condition => '$$valPt =~ /^FPXR\0/',
136
136
  SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::Main' },
137
+ }, {
138
+ Name => 'QualcommDualCamera',
139
+ Condition => '$$valPt =~ /^Qualcomm Dual Camera Attributes/',
140
+ SubDirectory => { TagTable => 'Image::ExifTool::Qualcomm::DualCamera' },
137
141
  }, {
138
142
  Name => 'InfiRayFactory',
139
143
  Condition => '$$self{HasIJPEG}"',
@@ -202,7 +206,7 @@ sub ProcessJPEG_HDR($$$);
202
206
  Groups => { 0 => 'APP6', 1 => 'DJI' },
203
207
  Notes => 'DJI Thermal Analysis Tool record',
204
208
  ValueConv => 'substr($val,7)',
205
- # also seen Motorola APP6 "MMIMETA\0", with sub-types: AL3A,ALED,MMI0,MOTD,QC3A
209
+ # also seen Motorola APP6 "MMIMETA\0", with sub-types: AL3A,ALED,MMI0,MOTD,QC3A,LMB1
206
210
  }],
207
211
  APP7 => [{
208
212
  Name => 'Pentax',
@@ -350,7 +354,13 @@ sub ProcessJPEG_HDR($$$);
350
354
  }, {
351
355
  Name => 'Vivo',
352
356
  Condition => '$$valPt =~ /^(streamdata|vivo\{")/',
353
- SubDirectory => { TagTable => 'Image::ExifTool::Vivo::Main' },
357
+ SubDirectory => { TagTable => 'Image::ExifTool::Trailer::Vivo' },
358
+ }, {
359
+ Name => 'OnePlus',
360
+ SubDirectory => { TagTable => 'Image::ExifTool::Trailer::OnePlus' },
361
+ }, {
362
+ Name => 'Google',
363
+ SubDirectory => { TagTable => 'Image::ExifTool::Trailer::Google' },
354
364
  }, {
355
365
  Name => 'EmbeddedVideo',
356
366
  Notes => 'extracted only when ExtractEmbedded option is used',
@@ -14,7 +14,7 @@ use vars qw($VERSION);
14
14
  use Image::ExifTool qw(:DataAccess :Utils);
15
15
  use Image::ExifTool::Import;
16
16
 
17
- $VERSION = '1.09';
17
+ $VERSION = '1.10';
18
18
 
19
19
  sub ProcessJSON($$);
20
20
  sub ProcessTag($$$$%);
@@ -43,6 +43,10 @@ sub ProcessTag($$$$%);
43
43
  ON1_SettingsMetadataTimestamp => { Groups => { 2 => 'Time' } },
44
44
  ON1_SettingsMetadataUsage => { },
45
45
  ON1_SettingsMetadataVisibleToUser=>{ },
46
+ adjustmentsSettingsStatisticsLightMap => { # (in JSON of AAE files)
47
+ Name => 'AdjustmentsSettingsStatisticsLightMap',
48
+ ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
49
+ },
46
50
  );
47
51
 
48
52
  #------------------------------------------------------------------------------
@@ -25,7 +25,7 @@ use vars qw($VERSION);
25
25
  use Image::ExifTool qw(:DataAccess :Utils);
26
26
  use Image::ExifTool::Exif;
27
27
 
28
- $VERSION = '1.47';
28
+ $VERSION = '1.48';
29
29
 
30
30
  sub ProcessKodakIFD($$$);
31
31
  sub ProcessKodakText($$$);
@@ -2983,7 +2983,8 @@ my %sceneModeUsed = (
2983
2983
  Priority => 0, # (only integer seconds)
2984
2984
  PrintConv => 'ConvertDuration($val)',
2985
2985
  },
2986
- 'ver '=> { Name => 'KodakVersion' },
2986
+ # (save KodakVersion to recognize Rexing Dashcam video for GPS scaling)
2987
+ 'ver '=> { Name => 'KodakVersion', RawConv => '$$self{KodakVersion} = $val' },
2987
2988
  thma => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Binary => 1 },
2988
2989
  scra => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Binary => 1 },
2989
2990
  );