exiftool_vendored 12.55.0 → 12.56.0

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