exiftool_vendored 12.55.0 → 12.56.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.
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 26274 tags, with 16757 unique tag names.
15
+ They contain a total of 26374 tags, with 16843 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -112,30 +112,38 @@ L<https://www.w3.org/Graphics/JPEG/jfif3.pdf> for the JPEG specification.
112
112
  'APP2' ICC_Profile ICC_Profile
113
113
  FPXR FlashPix
114
114
  MPF MPF
115
+ InfiRayVersion InfiRay Version
115
116
  PreviewImage no
116
117
  'APP3' Meta Kodak Meta
117
118
  Stim Stim
118
119
  JPS JPEG JPS
119
120
  ThermalData no
121
+ ImagingData no
120
122
  PreviewImage no
121
123
  'APP4' Scalado Scalado
122
124
  FPXR FlashPix
125
+ InfiRayFactory InfiRay Factory
123
126
  ThermalParams DJI ThermalParams
124
127
  PreviewImage no
125
128
  'APP5' RMETA Ricoh RMETA
126
129
  SamsungUniqueID Samsung APP5
130
+ InfiRayPicture InfiRay Picture
127
131
  ThermalCalibration no
128
132
  PreviewImage no
129
133
  'APP6' EPPIM JPEG EPPIM
130
134
  NITF JPEG NITF
131
135
  HP_TDHD HP TDHD
132
136
  GoPro GoPro GPMF
137
+ InfiRayMixMode InfiRay MixMode
133
138
  DJI_DTAT no
134
139
  'APP7' Pentax Pentax
135
140
  Huawei Unknown
136
141
  Qualcomm Qualcomm
142
+ InfiRayOpMode InfiRay OpMode
137
143
  'APP8' SPIFF JPEG SPIFF
144
+ InfiRayIsothermal InfiRay Isothermal
138
145
  'APP9' MediaJukebox JPEG MediaJukebox
146
+ InfiRaySensor InfiRay Sensor
139
147
  'APP10' Comment no
140
148
  'APP11' JPEG-HDR JPEG HDR
141
149
  JUMBF Jpeg2000
@@ -361,6 +369,8 @@ for the official EXIF 2.32 specification.
361
369
  0x010f Make IFD0 string
362
370
  0x0110 Model IFD0 string
363
371
  0x0111 StripOffsets - no
372
+ OtherImageStart - no
373
+ StripOffsets - no
364
374
  PreviewImageStart IFD0 int32u*
365
375
  PreviewImageStart All int32u*
366
376
  JpgFromRawStart SubIFD2 int32u*
@@ -368,6 +378,8 @@ for the official EXIF 2.32 specification.
368
378
  0x0115 SamplesPerPixel IFD0 int16u!
369
379
  0x0116 RowsPerStrip IFD0 int32u!
370
380
  0x0117 StripByteCounts - no
381
+ OtherImageLength - no
382
+ StripByteCounts - no
371
383
  PreviewImageLength IFD0 int32u*
372
384
  PreviewImageLength All int32u*
373
385
  JpgFromRawLength SubIFD2 int32u*
@@ -1188,10 +1200,12 @@ C<integer> is a string of digits (possibly beginning with a '+' or '-'),
1188
1200
  C<real> is a floating point number, C<rational> is entered as a floating
1189
1201
  point number but stored as two C<integer> strings separated by a '/'
1190
1202
  character, C<date> is a date/time string entered in the format "YYYY:mm:dd
1191
- HH:MM:SS[.ss][+/-HH:MM]", C<boolean> is either "True" or "False" (but "true"
1192
- and "false" may be written as a ValueConv value for compatibility with
1193
- non-conforming applications), C<struct> indicates a structured tag, and
1194
- C<lang-alt> is a tag that supports alternate languages.
1203
+ HH:MM:SS[.ss][+/-HH:MM]" but some partial date/time formats are also
1204
+ accepted (see L<https://exiftool.org/faq.html#Q5>), C<boolean> is either
1205
+ "True" or "False" (but "true" and "false" may be written as a ValueConv
1206
+ value for compatibility with non-conforming applications), C<struct>
1207
+ indicates a structured tag, and C<lang-alt> is a tag that supports alternate
1208
+ languages.
1195
1209
 
1196
1210
  When reading, C<struct> tags are extracted only if the Struct (-struct)
1197
1211
  option is used. Otherwise the corresponding I<Flattened> tags, indicated by
@@ -14064,6 +14078,13 @@ Tags written by some Nikon GPS-equipped cameras like the AW100.
14064
14078
  0 FirmwareVersion no
14065
14079
  10 NEFCompression int16u[0.5]
14066
14080
 
14081
+ =head3 Nikon MakerNotes0x56 Tags
14082
+
14083
+ Index1 Tag Name Writable
14084
+ ------ -------- --------
14085
+ 0 FirmwareVersion no
14086
+ 4 BurstGroupID int16u
14087
+
14067
14088
  =head3 Nikon AFInfo Tags
14068
14089
 
14069
14090
  Index1 Tag Name Writable
@@ -14492,12 +14513,15 @@ These tags are extracted from encrypted data in images from the Z9.
14492
14513
  ----- -------- --------
14493
14514
  0 ShotInfoVersion no
14494
14515
  4 FirmwareVersion no
14495
- 27792 FocusShiftShooting int8u~
14496
- 27800 IntervalShooting int16u~
14497
- 60139 RollAngle fixed32u
14498
- 60143 PitchAngle fixed32u
14499
- 60147 YawAngle fixed32u
14500
- 60491 MenuSettingsZ9 Nikon MenuSettingsZ9
14516
+ 180 FocusShiftShooting int8u~
14517
+ 188 IntervalShooting int16u~
14518
+ 17644 MenuSettingsZ9 Nikon MenuSettingsZ9
14519
+ -
14520
+ Nikon MenuSettingsZ9Firmware3
14521
+ 32965 RollAngle fixed32u
14522
+ 32969 PitchAngle fixed32u
14523
+ 32973 YawAngle fixed32u
14524
+ 33317 MenuSettingsZ9 Nikon MenuSettingsZ9
14501
14525
  -
14502
14526
  Nikon MenuSettingsZ9Firmware3
14503
14527
 
@@ -14583,6 +14607,7 @@ These tags are used by the Z9 firmware 3.00.
14583
14607
 
14584
14608
  Index1 Tag Name Writable
14585
14609
  --------------- --------
14610
+ 72 HighFrameRate int8u
14586
14611
  154 MultipleExposureMode int8u
14587
14612
  156 MultiExposureShots int8u
14588
14613
  204 Intervals int32u
@@ -14653,6 +14678,8 @@ These tags are used by the Z9 firmware 3.00.
14653
14678
  1684 USBPowerDelivery? int8u
14654
14679
  1693 SensorShield? int8u
14655
14680
  1754 FocusShiftAutoReset? int8u
14681
+ 1810 PreReleaseBurstLength int8u
14682
+ 1812 PostReleaseBurstLength int8u
14656
14683
 
14657
14684
  =head3 Nikon ShotInfo Tags
14658
14685
 
@@ -22332,6 +22359,38 @@ embedded images.
22332
22359
  12 DependentImage1EntryNumber no
22333
22360
  14 DependentImage2EntryNumber no
22334
22361
 
22362
+ =head2 InfiRay Tags
22363
+
22364
+ =head3 InfiRay Version Tags
22365
+
22366
+ This table lists tags found in the InfiRay APP2 IJPEG version header, found
22367
+ in JPEGs taken with the P2 Pro camera app.
22368
+
22369
+ Index1 Tag Name Writable
22370
+ ------ -------- --------
22371
+ 0 IJPEGVersion no
22372
+ 12 IJPEGOrgType no
22373
+ 13 IJPEGDispType no
22374
+ 14 IJPEGRotate no
22375
+ 15 IJPEGMirrorFlip no
22376
+ 16 ImageColorSwitchable no
22377
+ 17 ThermalColorPalette no
22378
+ 32 IRDataSize no
22379
+ 40 IRDataFormat no
22380
+ 42 IRImageWidth no
22381
+ 44 IRImageHeight no
22382
+ 46 IRImageBpp no
22383
+ 48 TempDataSize no
22384
+ 56 TempDataFormat no
22385
+ 58 TempImageWidth no
22386
+ 60 TempImageHeight no
22387
+ 62 TempImageBpp no
22388
+ 64 VisibleDataSize no
22389
+ 72 VisibleDataFormat no
22390
+ 74 VisibleImageWidth no
22391
+ 76 VisibleImageHeight no
22392
+ 78 VisibleImageBpp no
22393
+
22335
22394
  =head2 Stim Tags
22336
22395
 
22337
22396
  These tags are part of the CIPA Stereo Still Image specification, and are
@@ -22395,6 +22454,54 @@ L<http://www.scalado.com/>.)
22395
22454
  'SPMO' DataLength? no
22396
22455
  'WDTH' PreviewImageWidth no
22397
22456
 
22457
+ =head2 InfiRay Tags
22458
+
22459
+ =head3 InfiRay Factory Tags
22460
+
22461
+ This table lists tags found in the InfiRay APP4 IJPEG camera factory
22462
+ defaults and calibration data.
22463
+
22464
+ Index1 Tag Name Writable
22465
+ ------ -------- --------
22466
+ 0 IJPEGTempVersion no
22467
+ 4 FactDefEmissivity no
22468
+ 5 FactDefTau no
22469
+ 6 FactDefTa no
22470
+ 8 FactDefTu no
22471
+ 10 FactDefDist no
22472
+ 12 FactDefA0 no
22473
+ 16 FactDefB0 no
22474
+ 20 FactDefA1 no
22475
+ 24 FactDefB1 no
22476
+ 28 FactDefP0 no
22477
+ 32 FactDefP1 no
22478
+ 36 FactDefP2 no
22479
+ 68 FactRelSensorTemp no
22480
+ 70 FactRelShutterTemp no
22481
+ 72 FactRelLensTemp no
22482
+ 100 FactStatusGain no
22483
+ 101 FactStatusEnvOK no
22484
+ 102 FactStatusDistOK no
22485
+ 103 FactStatusTempMap no
22486
+
22487
+ =head3 InfiRay Picture Tags
22488
+
22489
+ This table lists tags found in the InfiRay APP5 IJPEG picture temperature
22490
+ information.
22491
+
22492
+ Index1 Tag Name Writable
22493
+ ------ -------- --------
22494
+ 0 EnvironmentTemp no
22495
+ 4 Distance no
22496
+ 8 Emissivity no
22497
+ 12 Humidity no
22498
+ 16 ReferenceTemp no
22499
+ 32 TempUnit no
22500
+ 33 ShowCenterTemp no
22501
+ 34 ShowMaxTemp no
22502
+ 35 ShowMinTemp no
22503
+ 36 TempMeasureCount no
22504
+
22398
22505
  =head2 GoPro Tags
22399
22506
 
22400
22507
  =head3 GoPro GPMF Tags
@@ -22541,6 +22648,20 @@ Tags extracted from the MP4 "fdsc" timed metadata when the ExtractEmbedded
22541
22648
  87 OtherSerialNumber no
22542
22649
  102 Model no
22543
22650
 
22651
+ =head2 InfiRay Tags
22652
+
22653
+ =head3 InfiRay MixMode Tags
22654
+
22655
+ This table lists tags found in the InfiRay APP6 IJPEG visual-infrared mixing
22656
+ mode section.
22657
+
22658
+ Index1 Tag Name Writable
22659
+ ------ -------- --------
22660
+ 0 MixMode no
22661
+ 1 FusionIntensity no
22662
+ 5 OffsetAdjustment no
22663
+ 9 CorrectionAsix no
22664
+
22544
22665
  =head2 Qualcomm Tags
22545
22666
 
22546
22667
  The tags below have been observed in the JPEG APP7 "Qualcomm Camera
@@ -23739,6 +23860,56 @@ even if it is not listed in this table.
23739
23860
  YhiYloCorK1 no
23740
23861
  YhiYloCorK2 no
23741
23862
 
23863
+ =head2 InfiRay Tags
23864
+
23865
+ =head3 InfiRay OpMode Tags
23866
+
23867
+ This table lists tags found in the InfiRay APP7 IJPEG camera operation mode
23868
+ section.
23869
+
23870
+ Index1 Tag Name Writable
23871
+ ------ -------- --------
23872
+ 0 WorkingMode no
23873
+ 1 IntegralTime no
23874
+ 5 IntegratTimeHdr no
23875
+ 9 GainStable no
23876
+ 10 TempControlEnable no
23877
+ 11 DeviceTemp no
23878
+
23879
+ =head3 InfiRay Isothermal Tags
23880
+
23881
+ This table lists tags found in the InfiRay APP8 IJPEG picture isothermal
23882
+ information.
23883
+
23884
+ Index1 Tag Name Writable
23885
+ ------ -------- --------
23886
+ 0 IsothermalMax no
23887
+ 4 IsothermalMin no
23888
+ 8 ChromaBarMax no
23889
+ 12 ChromaBarMin no
23890
+
23891
+ =head3 InfiRay Sensor Tags
23892
+
23893
+ This table lists tags found in the InfiRay APP9 IJPEG sensor information
23894
+ chunk.
23895
+
23896
+ Index1 Tag Name Writable
23897
+ ------ -------- --------
23898
+ 0 IRSensorManufacturer no
23899
+ 64 IRSensorName no
23900
+ 128 IRSensorPartNumber no
23901
+ 192 IRSensorSerialNumber no
23902
+ 256 IRSensorFirmware no
23903
+ 320 IRSensorAperture no
23904
+ 324 IRFocalLength no
23905
+ 384 VisibleSensorManufacturer no
23906
+ 448 VisibleSensorName no
23907
+ 512 VisibleSensorPartNumber no
23908
+ 576 VisibleSensorSerialNumber no
23909
+ 640 VisibleSensorFirmware no
23910
+ 704 VisibleSensorAperture no
23911
+ 708 VisibleFocalLength no
23912
+
23742
23913
  =head2 Jpeg2000 Tags
23743
23914
 
23744
23915
  The tags below are found in JPEG 2000 images and the JUMBF metadata in JPEG
@@ -25876,6 +26047,7 @@ check if speed is more of a concern.
25876
26047
  'acTL' AnimationControl PNG AnimationControl
25877
26048
  'bKGD' BackgroundColor no
25878
26049
  'cHRM' PrimaryChromaticities PNG PrimaryChromaticities
26050
+ 'cICP' CICodePoints PNG CICodePoints
25879
26051
  'caBX' JUMBF Jpeg2000
25880
26052
  'dSIG' DigitalSignature no
25881
26053
  'eXIf' eXIf EXIF
@@ -25940,6 +26112,18 @@ L<https://wiki.mozilla.org/APNG_Specification> for details.
25940
26112
  6 BlueX no
25941
26113
  7 BlueY no
25942
26114
 
26115
+ =head3 PNG CICodePoints Tags
26116
+
26117
+ These tags are found in the PNG cICP chunk and belong to the PNG-cICP family
26118
+ 1 group.
26119
+
26120
+ Index1 Tag Name Writable
26121
+ ------ -------- --------
26122
+ 0 ColorPrimaries no
26123
+ 1 TransferCharacteristics no
26124
+ 2 MatrixCoefficients no
26125
+ 3 VideoFullRangeFlag no
26126
+
25943
26127
  =head3 PNG TextualData Tags
25944
26128
 
25945
26129
  The PNG TextualData format allows arbitrary tag names to be used. The tags
@@ -26403,12 +26587,13 @@ Tags extracted from DPX (Digital Picture Exchange) images.
26403
26587
 
26404
26588
  =head2 OpenEXR Tags
26405
26589
 
26406
- Information extracted from EXR images. See L<http://www.openexr.com/> for
26407
- the official specification.
26590
+ Information extracted from EXR images. Use the ExtractEmbedded option to
26591
+ extract information from all frames of a multipart image. See
26592
+ L<http://www.openexr.com/> for the official specification.
26408
26593
 
26409
26594
  Tag ID Tag Name Writable
26410
26595
  ------ -------- --------
26411
- '_lay' Layout no
26596
+ '_flags' Flags no
26412
26597
  '_ver' EXRVersion no
26413
26598
  'adoptedNeutral' AdoptedNeutral no
26414
26599
  'altitude' GPSAltitude no
@@ -26416,6 +26601,7 @@ the official specification.
26416
26601
  'capDate' DateTimeOriginal no
26417
26602
  'channels' Channels no
26418
26603
  'chromaticities' Chromaticities no
26604
+ 'chunkCount' ChunkCount no
26419
26605
  'comments' Comments no
26420
26606
  'compression' Compression no
26421
26607
  'dataWindow' DataWindow no
@@ -26431,6 +26617,7 @@ the official specification.
26431
26617
  'longitude' GPSLongitude no
26432
26618
  'lookModTransform' LookModTransform no
26433
26619
  'multiView' MultiView no
26620
+ 'name' Name no
26434
26621
  'owner' Owner no
26435
26622
  'pixelAspectRatio' PixelAspectRatio no
26436
26623
  'preview' Preview no
@@ -26439,7 +26626,9 @@ the official specification.
26439
26626
  'screenWindowWidth' ScreenWindowWidth no
26440
26627
  'tiles' Tiles no
26441
26628
  'timeCode' TimeCode no
26629
+ 'type' Type no
26442
26630
  'utcOffset' TimeZone no
26631
+ 'version' Version no
26443
26632
  'whiteLuminance' WhiteLuminance no
26444
26633
  'worldToCamera' WorldToCamera no
26445
26634
  'worldToNDC' WorldToNDC no
@@ -37221,6 +37410,17 @@ name. See L<http://tools.ietf.org/html/rfc5545> for the official iCalendar
37221
37410
  'X-wr-relcalid' CalendarID no
37222
37411
  'X-wr-timezone' TimeZone2 no
37223
37412
 
37413
+ =head3 VCard VNote Tags
37414
+
37415
+ Tags extracted from V-Note VNT files.
37416
+
37417
+ Tag ID Tag Name Writable
37418
+ ------ -------- --------
37419
+ 'Body' Body no
37420
+ 'Dcreated' CreateDate no
37421
+ 'Last-modified' ModifyDate no
37422
+ 'Version' Version no
37423
+
37224
37424
  =head2 Text Tags
37225
37425
 
37226
37426
  Although basic text files contain no metadata, the following tags are
@@ -38009,6 +38209,8 @@ values, may created via the ExifTool configuration file.
38009
38209
  OriginalDecisionData OriginalDecisionDataOffset yes!
38010
38210
  OtherImage OtherImageStart yes
38011
38211
  OtherImageLength
38212
+ OtherImageStart (1)
38213
+ OtherImageLength (1)
38012
38214
  PeakSpectralSensitivity FLIR:PlanckB no
38013
38215
  PreviewImage PreviewImageStart yes
38014
38216
  PreviewImageLength
@@ -17,7 +17,7 @@ use strict;
17
17
  use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
 
20
- $VERSION = '1.06';
20
+ $VERSION = '1.07';
21
21
 
22
22
  my %unescapeVCard = ( '\\'=>'\\', ','=>',', 'n'=>"\n", 'N'=>"\n" );
23
23
 
@@ -190,6 +190,15 @@ my %timeInfo = (
190
190
  'X-wr-alarmuid' => 'AlarmUID',
191
191
  );
192
192
 
193
+ %Image::ExifTool::VCard::VNote = (
194
+ GROUPS => { 1 => 'VNote', 2 => 'Document' },
195
+ NOTES => 'Tags extracted from V-Note VNT files.',
196
+ Version => { },
197
+ Body => { },
198
+ Dcreated => { Name => 'CreateDate', Groups => { 2 => 'Time' }, %timeInfo },
199
+ 'Last-modified' => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, %timeInfo },
200
+ );
201
+
193
202
  #------------------------------------------------------------------------------
194
203
  # Get vCard tag, creating if necessary
195
204
  # Inputs: 0) ExifTool ref, 1) tag table ref, 2) tag ID, 3) tag Name,
@@ -254,9 +263,14 @@ sub ProcessVCard($$)
254
263
  my $raf = $$dirInfo{RAF};
255
264
  my ($buff, $val, $ok, $component, %compNum, @count);
256
265
 
257
- return 0 unless $raf->Read($buff, 24) and $raf->Seek(0,0) and $buff=~/^BEGIN:(VCARD|VCALENDAR)\r\n/i;
258
- my ($type, $lbl, $tbl, $ext) = uc($1) eq 'VCARD' ? qw(VCard vCard Main VCF) : qw(ICS iCalendar VCalendar ICS);
259
- $et->SetFileType($type, undef, $ext);
266
+ return 0 unless $raf->Read($buff, 24) and $raf->Seek(0,0) and $buff=~/^BEGIN:(VCARD|VCALENDAR|VNOTE)\r\n/i;
267
+ my %info = (
268
+ VCARD => [ qw(VCard vCard Main VCF) ],
269
+ VCALENDAR => [ qw(ICS iCalendar VCalendar ICS) ],
270
+ VNOTE => [ qw(VNote vNote VNote VNT text/v-note) ],
271
+ );
272
+ my ($type, $lbl, $tbl, $ext, $mime) = @{$info{uc($1)}};
273
+ $et->SetFileType($type, $mime, $ext);
260
274
  return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3;
261
275
  local $/ = "\r\n";
262
276
  my $tagTablePtr = GetTagTable("Image::ExifTool::VCard::$tbl");
@@ -274,7 +288,7 @@ sub ProcessVCard($$)
274
288
  }
275
289
  if ($val =~ /^(BEGIN|END):(V?)(\w+)$/i) {
276
290
  my ($begin, $v, $what) = ((lc($1) eq 'begin' ? 1 : 0), $2, ucfirst lc $3);
277
- if ($what eq 'Card' or $what eq 'Calendar') {
291
+ if ($what eq 'Card' or $what eq 'Calendar' or $what eq 'Note') {
278
292
  if ($begin) {
279
293
  @count = ( { } ); # reset group counters
280
294
  } else {
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars);
31
31
 
32
- $VERSION = '12.55';
32
+ $VERSION = '12.56';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -150,8 +150,8 @@ sub ReadValue($$$;$$$);
150
150
  Real::Media Real::Audio Real::Metafile Red RIFF AIFF ASF WTV DICOM FITS MIE
151
151
  JSON HTML XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion
152
152
  EXE::PEString EXE::MachO EXE::PEF EXE::ELF EXE::AR EXE::CHM LNK Font VCard
153
- Text VCard::VCalendar RSRC Rawzor ZIP ZIP::GZIP ZIP::RAR RTF OOXML iWork ISO
154
- FLIR::AFF FLIR::FPF MacOS MacOS::MDItem FlashPix::DocTable
153
+ Text VCard::VCalendar VCard::VNote RSRC Rawzor ZIP ZIP::GZIP ZIP::RAR RTF
154
+ OOXML iWork ISO FLIR::AFF FLIR::FPF MacOS MacOS::MDItem FlashPix::DocTable
155
155
  );
156
156
 
157
157
  # alphabetical list of current Lang modules
@@ -526,6 +526,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
526
526
  VCARD=> ['VCard','Virtual Card'],
527
527
  VCF => 'VCARD',
528
528
  VOB => ['MPEG', 'Video Object'],
529
+ VNT => [['FPX','VCard'], 'Scene7 Vignette or V-Note text file'],
529
530
  VRD => ['VRD', 'Canon VRD Recipe Data'],
530
531
  VSD => ['FPX', 'Microsoft Visio Drawing'],
531
532
  WAV => ['RIFF', 'WAVeform (Windows digital audio)'],
@@ -577,6 +578,7 @@ my %fileDescription = (
577
578
  'Win32 DLL' => 'Windows 32-bit Dynamic Link Library',
578
579
  'Win64 EXE' => 'Windows 64-bit Executable',
579
580
  'Win64 DLL' => 'Windows 64-bit Dynamic Link Library',
581
+ VNote => 'V-Note document',
580
582
  );
581
583
 
582
584
  # MIME types for applicable file types above
@@ -977,7 +979,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
977
979
  TAR => '.{257}ustar( )?\0', # (this doesn't catch old-style tar files)
978
980
  TXT => '(\xff\xfe|(\0\0)?\xfe\xff|(\xef\xbb\xbf)?[\x07-\x0d\x20-\x7e\x80-\xfe]*$)',
979
981
  TIFF => '(II|MM)', # don't test magic number (some raw formats are different)
980
- VCard=> '(?i)BEGIN:(VCARD|VCALENDAR)\r\n',
982
+ VCard=> '(?i)BEGIN:(VCARD|VCALENDAR|VNOTE)\r\n',
981
983
  VRD => 'CANON OPTIONAL DATA\0',
982
984
  WMF => '(\xd7\xcd\xc6\x9a\0\0|\x01\0\x09\0\0\x03)',
983
985
  WTV => '\xb7\xd8\x00\x20\x37\x49\xda\x11\xa6\x4e\x00\x07\xe9\x5e\xad\x8d',
@@ -6871,7 +6873,7 @@ sub ProcessJPEG($$)
6871
6873
  $self->Warn("Ignored APP1 segment length $length (unknown header)");
6872
6874
  }
6873
6875
  }
6874
- } elsif ($marker == 0xe2) { # APP2 (ICC Profile, FPXR, MPF, PreviewImage)
6876
+ } elsif ($marker == 0xe2) { # APP2 (ICC Profile, FPXR, MPF, InfiRay, PreviewImage)
6875
6877
  if ($$segDataPt =~ /^ICC_PROFILE\0/ and $length >= 14) {
6876
6878
  $dumpType = 'ICC_Profile';
6877
6879
  # must concatenate profile chunks (note: handle the case where
@@ -6933,6 +6935,12 @@ sub ProcessJPEG($$)
6933
6935
  # extract the MPF information (it is in standard TIFF format)
6934
6936
  my $tagTablePtr = GetTagTable('Image::ExifTool::MPF::Main');
6935
6937
  $self->ProcessTIFF(\%dirInfo, $tagTablePtr);
6938
+ } elsif ($$segDataPt =~ /^....IJPEG\0/s) {
6939
+ $dumpType = 'InfiRay Version';
6940
+ $$self{HasIJPEG} = 1;
6941
+ SetByteOrder('II');
6942
+ my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::Version');
6943
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
6936
6944
  } elsif ($$segDataPt =~ /^(|QVGA\0|BGTH)\xff\xd8\xff[\xdb\xe0\xe1]/) {
6937
6945
  # Samsung/GE/GoPro="", BenQ DC C1220/Pentacon/Polaroid="QVGA\0",
6938
6946
  # Digilife DDC-690/Rollei="BGTH"
@@ -6973,8 +6981,8 @@ sub ProcessJPEG($$)
6973
6981
  SetByteOrder('MM');
6974
6982
  my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::JPS');
6975
6983
  $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
6976
- } elsif ($$self{Make} eq 'DJI') {
6977
- $dumpType = 'DJI ThermalData';
6984
+ } elsif ($$self{HasIJPEG} or $$self{Make} eq 'DJI') {
6985
+ $dumpType = $$self{HasIJPEG} ? 'InfiRay ImagingData' : 'DJI ThermalData';
6978
6986
  # add this data to the combined data if it exists
6979
6987
  my $dataPt = $segDataPt;
6980
6988
  if (defined $combinedSegData) {
@@ -6984,11 +6992,14 @@ sub ProcessJPEG($$)
6984
6992
  if ($nextMarker == $marker) {
6985
6993
  $combinedSegData = $$segDataPt unless defined $combinedSegData;
6986
6994
  } else {
6987
- # process DJI FLIR thermal data
6995
+ # process InfiRay/DJI thermal data
6988
6996
  my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Main');
6989
6997
  $self->HandleTag($tagTablePtr, 'APP3', $$dataPt);
6990
6998
  undef $combinedSegData;
6991
6999
  }
7000
+ } elsif ($$self{HasIJPEG}) {
7001
+ $dumpType = 'InfiRay Data',
7002
+
6992
7003
  } elsif ($$segDataPt =~ /^\xff\xd8\xff\xdb/) {
6993
7004
  $dumpType = 'PreviewImage'; # (Samsung, HP, BenQ)
6994
7005
  $preview = $$segDataPt;
@@ -6997,7 +7008,7 @@ sub ProcessJPEG($$)
6997
7008
  $self->FoundTag('PreviewImage', $preview);
6998
7009
  undef $preview;
6999
7010
  }
7000
- } elsif ($marker == 0xe4) { # APP4 ("SCALADO", FPXR, PreviewImage)
7011
+ } elsif ($marker == 0xe4) { # APP4 (InfiRay, "SCALADO", FPXR, PreviewImage)
7001
7012
  if ($$segDataPt =~ /^SCALADO\0/ and $length >= 16) {
7002
7013
  $dumpType = 'SCALADO';
7003
7014
  my ($num, $idx, $len) = unpack('x8n2N', $$segDataPt);
@@ -7028,6 +7039,11 @@ sub ProcessJPEG($$)
7028
7039
  DirStart(\%dirInfo, 0, 0);
7029
7040
  my $tagTablePtr = GetTagTable('Image::ExifTool::DJI::ThermalParams');
7030
7041
  $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7042
+ } elsif ($$self{HasIJPEG} and $length >= 120) {
7043
+ $dumpType = 'InfiRay Factory';
7044
+ SetByteOrder('II');
7045
+ my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::Factory');
7046
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7031
7047
  } elsif ($preview) {
7032
7048
  # continued Samsung S1060 preview from APP3
7033
7049
  $dumpType = 'PreviewImage';
@@ -7039,7 +7055,7 @@ sub ProcessJPEG($$)
7039
7055
  $self->FoundTag('PreviewImage', $preview);
7040
7056
  undef $preview;
7041
7057
  }
7042
- } elsif ($marker == 0xe5) { # APP5 (Ricoh "RMETA")
7058
+ } elsif ($marker == 0xe5) { # APP5 (InfiRay, Ricoh "RMETA")
7043
7059
  if ($$segDataPt =~ /^RMETA\0/) {
7044
7060
  # (NOTE: apparently these may span multiple segments, but I haven't seen
7045
7061
  # a sample like this, so multi-segment support hasn't yet been implemented)
@@ -7054,13 +7070,18 @@ sub ProcessJPEG($$)
7054
7070
  $dumpType = 'DJI ThermalCal';
7055
7071
  my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Main');
7056
7072
  $self->HandleTag($tagTablePtr, 'APP5', $$segDataPt);
7073
+ } elsif ($$self{HasIJPEG} and $length >= 38) {
7074
+ $dumpType = 'InfiRay Picture';
7075
+ SetByteOrder('II');
7076
+ my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::Picture');
7077
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7057
7078
  } elsif ($preview) {
7058
7079
  $dumpType = 'PreviewImage';
7059
7080
  $preview .= $$segDataPt;
7060
7081
  $self->FoundTag('PreviewImage', $preview);
7061
7082
  undef $preview;
7062
7083
  }
7063
- } elsif ($marker == 0xe6) { # APP6 (Toshiba EPPIM, NITF, HP_TDHD)
7084
+ } elsif ($marker == 0xe6) { # APP6 (InfiRay, Toshiba EPPIM, NITF, HP_TDHD)
7064
7085
  if ($$segDataPt =~ /^EPPIM\0/) {
7065
7086
  undef $dumpType; # (will be dumped here)
7066
7087
  DirStart(\%dirInfo, 6, 6);
@@ -7093,8 +7114,13 @@ sub ProcessJPEG($$)
7093
7114
  $dumpType = 'DJI_DTAT';
7094
7115
  my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Main');
7095
7116
  $self->HandleTag($tagTablePtr, 'APP6', $$segDataPt);
7117
+ } elsif ($$self{HasIJPEG} and $length >= 129) {
7118
+ $dumpType = 'InfiRay MixMode';
7119
+ SetByteOrder('II');
7120
+ my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::MixMode');
7121
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7096
7122
  }
7097
- } elsif ($marker == 0xe7) { # APP7 (Pentax, Huawei, Qualcomm)
7123
+ } elsif ($marker == 0xe7) { # APP7 (InfiRay, Pentax, Huawei, Qualcomm)
7098
7124
  if ($$segDataPt =~ /^PENTAX \0(II|MM)/) {
7099
7125
  # found in K-3 images (is this multi-segment??)
7100
7126
  SetByteOrder($1);
@@ -7133,16 +7159,26 @@ sub ProcessJPEG($$)
7133
7159
  DirStart(\%dirInfo, 27);
7134
7160
  $dirInfo{DirName} = 'Qualcomm';
7135
7161
  $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7162
+ } elsif ($$self{HasIJPEG} and $length >= 32) {
7163
+ $dumpType = 'InfiRay OpMode';
7164
+ SetByteOrder('II');
7165
+ my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::OpMode');
7166
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7136
7167
  }
7137
- } elsif ($marker == 0xe8) { # APP8 (SPIFF)
7168
+ } elsif ($marker == 0xe8) { # APP8 (InfiRay, SPIFF)
7138
7169
  # my sample SPIFF has 32 bytes of data, but spec states 30
7139
7170
  if ($$segDataPt =~ /^SPIFF\0/ and $length == 32) {
7140
7171
  $dumpType = 'SPIFF';
7141
7172
  DirStart(\%dirInfo, 6);
7142
7173
  my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::SPIFF');
7143
7174
  $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7175
+ } elsif ($$self{HasIJPEG} and $length >= 32) {
7176
+ $dumpType = 'InfiRay Isothermal';
7177
+ SetByteOrder('II');
7178
+ my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::Isothermal');
7179
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7144
7180
  }
7145
- } elsif ($marker == 0xe9) { # APP9 (Media Jukebox)
7181
+ } elsif ($marker == 0xe9) { # APP9 (InfiRay, Media Jukebox)
7146
7182
  if ($$segDataPt =~ /^Media Jukebox\0/ and $length > 22) {
7147
7183
  $dumpType = 'MediaJukebox';
7148
7184
  # (start parsing after the "<MJMD>")
@@ -7151,6 +7187,11 @@ sub ProcessJPEG($$)
7151
7187
  require Image::ExifTool::XMP;
7152
7188
  my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::MediaJukebox');
7153
7189
  $self->ProcessDirectory(\%dirInfo, $tagTablePtr, \&Image::ExifTool::XMP::ProcessXMP);
7190
+ } elsif ($$self{HasIJPEG} and $length >= 768) {
7191
+ $dumpType = 'InfiRay Sensor';
7192
+ SetByteOrder('II');
7193
+ my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::Sensor');
7194
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7154
7195
  }
7155
7196
  } elsif ($marker == 0xea) { # APP10 (PhotoStudio Unicode comments)
7156
7197
  if ($$segDataPt =~ /^UNICODE\0/) {