exiftool_vendored 13.38.0 → 13.40.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.
@@ -18,22 +18,29 @@ use Image::ExifTool::XMP;
18
18
  use Image::ExifTool::GPS;
19
19
  use Image::ExifTool::Protobuf;
20
20
 
21
- $VERSION = '1.15';
21
+ $VERSION = '1.16';
22
22
 
23
23
  sub ProcessDJIInfo($$$);
24
24
  sub ProcessSettings($$$);
25
25
 
26
26
  %knownProtocol = (
27
- 'dvtm_ac203.proto' => 1, # Osmo Action 4
28
- 'dvtm_ac204.proto' => 1, # Osmo Action 5
29
- 'dvtm_AVATA2.proto' => 1, # Avata 2
30
- 'dvtm_wm265e.proto' => 1, # Mavic 3
31
- 'dvtm_pm320.proto' => 1, # Matrice 30
32
- 'dvtm_Mini4_Pro.proto' => 1, # Matrice 30
33
- 'dvtm_Mini4_Pro.proto' => 1, # Matrice 30
34
- 'dvtm_dji_neo.proto' => 1, # Neo
27
+ 'dvtm_ac203.proto' => 1, # Osmo Action 4
28
+ 'dvtm_ac204.proto' => 1, # Osmo Action 5
29
+ 'dvtm_AVATA2.proto' => 1, # Avata 2
30
+ 'dvtm_wm265e.proto' => 1, # Mavic 3
31
+ 'dvtm_pm320.proto' => 1, # Matrice 30
32
+ 'dvtm_Mini4_Pro.proto' => 1, # Mini 4
33
+ 'dvtm_dji_neo.proto' => 1, # Neo
34
+ 'dvtm_Air3.proto' => 1, # Air 3
35
+ 'dvtm_Air3s.proto' => 1, # Air 3s
36
+ 'dvtm_PP-101.proto' => 1, # Osmo Pocket 3
37
+ 'dvtm_oq101.proto' => 1, # Osmo 360
38
+ 'dvtm_wa345e.proto' => 1, # Matrice 4E
39
+ 'dvtm_wm261.proto' => 1, # Mavic Pro 3
40
+ # dvtm_wm169.proto seems to be DJI O3 but the structure is unknown
35
41
  );
36
42
 
43
+
37
44
  my %convFloat2 = (
38
45
  PrintConv => 'sprintf("%+.2f", $val)',
39
46
  PrintConvInv => '$val',
@@ -89,7 +96,7 @@ my %convFloat2 = (
89
96
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
90
97
  GROUPS => { 0 => 'APP4', 2 => 'Image' },
91
98
  NOTES => 'Thermal parameters extracted from APP4 of DJI RJPEG files from the ZH20T.',
92
- # 0x00 - 0xaa551206 - temperature header magic number
99
+ # 0x00 - 0xaa551206 - temperature header magic number
93
100
  0x24 => { Name => 'K1', Format => 'float' },
94
101
  0x28 => { Name => 'K2', Format => 'float' },
95
102
  0x2c => { Name => 'K3', Format => 'float' },
@@ -106,7 +113,7 @@ my %convFloat2 = (
106
113
  0x54 => { Name => 'KJ', Format => 'int16u' },
107
114
  0x56 => { Name => 'DB', Format => 'int16u' },
108
115
  0x58 => { Name => 'KK', Format => 'int16u' },
109
- # 0x500 - 0x55aa1206 - device header magic number
116
+ # 0x500 - 0x55aa1206 - device header magic number
110
117
  # (nothing yet decoded from device header)
111
118
  );
112
119
 
@@ -128,7 +135,7 @@ my %convFloat2 = (
128
135
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
129
136
  GROUPS => { 0 => 'APP4', 2 => 'Image' },
130
137
  NOTES => 'Thermal parameters extracted from APP4 of some DJI RJPEG files.',
131
- # 0x00 - 0xaa553800 - params3 magic number
138
+ # 0x00 - 0xaa553800 - params3 magic number
132
139
  0x04 => { Name => 'RelativeHumidity', Format => 'int16u' },
133
140
  0x06 => { Name => 'ObjectDistance', Format => 'int16u', ValueConv => '$val / 10' },
134
141
  0x08 => { Name => 'Emissivity', Format => 'int16u', ValueConv => '$val / 100' },
@@ -237,7 +244,10 @@ my %convFloat2 = (
237
244
  which use the following protocols: dvtm_AVATA2.proto (Avata 2),
238
245
  dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5),
239
246
  dvtm_wm265e.proto (Mavic 3), dvtm_pm320.proto (Matrice 30),
240
- dvtm_Mini4_Pro.proto (Mini 4 Pro) and dvtm_dji_neo.proto (DJI Neo).
247
+ dvtm_Mini4_Pro.proto (Mini 4 Pro), dvtm_dji_neo.proto (DJI Neo),
248
+ dvtm_Air3.proto (Air 3), dvtm_Air3s.proto (Air 3s), dvtm_PP-101.proto (Osmo
249
+ Pocket 3), dvtm_oq101.proto (Osmo 360), dvtm_wa345e.proto (Matrice 4E) and
250
+ dvtm_wm261.proto (Mavic Pro 3).
241
251
 
242
252
  Note that with the protobuf format, numerical tags missing from the output
243
253
  for a given protocol should be considered to have the default value of 0.
@@ -258,7 +268,7 @@ my %convFloat2 = (
258
268
  # dvtm_ac203_1-1-6 - some version number
259
269
  'dvtm_ac203_1-1-10' => 'Model',
260
270
  'dvtm_ac203_2-3' => {
261
- Name => 'FrameInfo',
271
+ Name => 'FrameInfo',
262
272
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
263
273
  },
264
274
  'dvtm_ac203_3-2-2-1' => { Name => 'ISO', Format => 'float' },
@@ -298,7 +308,7 @@ my %convFloat2 = (
298
308
  # dvtm_ac204_1-1-6 - some version number
299
309
  'dvtm_ac204_1-1-10' => 'Model',
300
310
  'dvtm_ac204_2-3' => {
301
- Name => 'FrameInfo',
311
+ Name => 'FrameInfo',
302
312
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
303
313
  },
304
314
  'dvtm_ac204_3-2-4-1' => { # (NC)
@@ -339,7 +349,7 @@ my %convFloat2 = (
339
349
  # dvtm_AVATA2_2-2-1-4 - model code?
340
350
  'dvtm_AVATA2_2-2-3-1' => 'SerialNumber2', # (NC)
341
351
  'dvtm_AVATA2_2-3' => {
342
- Name => 'FrameInfo',
352
+ Name => 'FrameInfo',
343
353
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
344
354
  },
345
355
  # dvtm_AVATA2_3-1-1 - frame number (starting at 1)
@@ -381,7 +391,7 @@ my %convFloat2 = (
381
391
  'dvtm_wm265e_1-1-5' => { Name => 'SerialNumber', Notes => 'Mavic 3' }, # (confirmed)
382
392
  'dvtm_wm265e_1-1-10' => 'Model',
383
393
  'dvtm_wm265e_2-2' => {
384
- Name => 'FrameInfo',
394
+ Name => 'FrameInfo',
385
395
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
386
396
  },
387
397
  # dvtm_wm265e_3-2-1-4 - model code?
@@ -413,7 +423,7 @@ my %convFloat2 = (
413
423
  'dvtm_pm320_1-1-5' => { Name => 'SerialNumber', Notes => 'Matrice 30' },
414
424
  'dvtm_pm320_1-1-10' => 'Model',
415
425
  'dvtm_pm320_2-2' => {
416
- Name => 'FrameInfo',
426
+ Name => 'FrameInfo',
417
427
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
418
428
  },
419
429
  'dvtm_pm320_3-2-2-1' => { Name => 'ISO', Format => 'float' },
@@ -448,7 +458,7 @@ my %convFloat2 = (
448
458
  'dvtm_Mini4_Pro_1-1-5' => { Name => 'SerialNumber', Notes => 'Mini 4 Pro' },
449
459
  'dvtm_Mini4_Pro_1-1-10' => 'Model',
450
460
  'dvtm_Mini4_Pro_2-3' => {
451
- Name => 'FrameInfo',
461
+ Name => 'FrameInfo',
452
462
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
453
463
  },
454
464
  'dvtm_Mini4_Pro_3-2-7-1' => { Name => 'ISO', Format => 'float' },
@@ -490,7 +500,7 @@ my %convFloat2 = (
490
500
  # dvtm_dji_neo_2-2-2-2 - some version number?
491
501
  'dvtm_dji_neo_2-2-3-1' => 'SerialNumber2', # (NC)
492
502
  'dvtm_dji_neo_2-3' => {
493
- Name => 'FrameInfo',
503
+ Name => 'FrameInfo',
494
504
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
495
505
  },
496
506
  # dvtm_dji_neo_3-1-1 - frame number (starting at 1)
@@ -525,6 +535,232 @@ my %convFloat2 = (
525
535
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
526
536
  },
527
537
  'dvtm_dji_neo_3-4-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' }, # (NC)
538
+ #
539
+ # Air 3
540
+ #
541
+ 'dvtm_Air3_1-1-5' => { Name => 'SerialNumber', Notes => 'Air 3' },
542
+ 'dvtm_Air3_2-3' => {
543
+ Name => 'FrameInfo',
544
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
545
+ },
546
+ 'dvtm_Air3_3-1-2' => {
547
+ Name => 'TimeStamp',
548
+ Groups => { 2 => 'Time' },
549
+ Format => 'unsigned',
550
+ ValueConv => '$val / 1e6',
551
+ },
552
+ 'dvtm_Air3_3-2-7-1' => { Name => 'ISO', Format => 'float' },
553
+ 'dvtm_Air3_3-2-10-1' => {
554
+ Name => 'ShutterSpeed',
555
+ Format => 'rational',
556
+ PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
557
+ },
558
+ 'dvtm_Air3_3-2-32-1' => { Name => 'ColorTemperature', Format => 'unsigned' },
559
+ 'dvtm_Air3_3-2-11-1' => {
560
+ Name => 'FNumber',
561
+ Format => 'rational',
562
+ PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
563
+ },
564
+ 'dvtm_Air3_3-3-3' => {
565
+ Name => 'DroneInfo',
566
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
567
+ },
568
+ 'dvtm_Air3_3-3-4-1' => {
569
+ Name => 'GPSInfo',
570
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
571
+ },
572
+ 'dvtm_Air3_3-3-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
573
+ 'dvtm_Air3_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' },
574
+ 'dvtm_Air3_3-4-3' => {
575
+ Name => 'GimbalInfo',
576
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
577
+ },
578
+ #
579
+ # Air 3s (same structure as Air 3)
580
+ #
581
+ 'dvtm_Air3s_1-1-5' => { Name => 'SerialNumber', Notes => 'Air 3s' },
582
+ 'dvtm_Air3s_2-3' => {
583
+ Name => 'FrameInfo',
584
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
585
+ },
586
+ 'dvtm_Air3s_3-1-2' => {
587
+ Name => 'TimeStamp',
588
+ Groups => { 2 => 'Time' },
589
+ Format => 'unsigned',
590
+ ValueConv => '$val / 1e6',
591
+ },
592
+ 'dvtm_Air3s_3-2-7-1' => { Name => 'ISO', Format => 'float' },
593
+ 'dvtm_Air3s_3-2-10-1' => {
594
+ Name => 'ShutterSpeed',
595
+ Format => 'rational',
596
+ PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
597
+ },
598
+ 'dvtm_Air3s_3-2-32-1' => { Name => 'ColorTemperature', Format => 'unsigned' },
599
+ 'dvtm_Air3s_3-2-11-1' => {
600
+ Name => 'FNumber',
601
+ Format => 'rational',
602
+ PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
603
+ },
604
+ 'dvtm_Air3s_3-3-3' => {
605
+ Name => 'DroneInfo',
606
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
607
+ },
608
+ 'dvtm_Air3s_3-3-4-1' => {
609
+ Name => 'GPSInfo',
610
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
611
+ },
612
+ 'dvtm_Air3s_3-3-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
613
+ 'dvtm_Air3s_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' },
614
+ 'dvtm_Air3s_3-4-3' => {
615
+ Name => 'GimbalInfo',
616
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
617
+ },
618
+ #
619
+ # Osmo 360 (similar to Action 4/5)
620
+ #
621
+ 'dvtm_oq101_1-1-5' => { Name => 'SerialNumber', Notes => 'Osmo 360' },
622
+ 'dvtm_oq101_1-1-10' => 'Model',
623
+ 'dvtm_oq101_3-1-2' => {
624
+ Name => 'TimeStamp',
625
+ Groups => { 2 => 'Time' },
626
+ Format => 'unsigned',
627
+ ValueConv => '$val / 1e6',
628
+ },
629
+ 'dvtm_oq101_3-2-3-1' => { Name => 'ISO', Format => 'float' },
630
+ 'dvtm_oq101_3-2-4-1' => {
631
+ Name => 'ShutterSpeed',
632
+ Format => 'rational',
633
+ PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
634
+ },
635
+ 'dvtm_oq101_3-2-6-1' => { Name => 'ColorTemperature', Format => 'unsigned' },
636
+ 'dvtm_oq101_1-14-1' => {
637
+ Name => 'FNumber',
638
+ Format => 'rational',
639
+ PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
640
+ },
641
+ 'dvtm_oq101_3-4-2-1' => {
642
+ Name => 'GPSInfo',
643
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
644
+ },
645
+ 'dvtm_oq101_3-4-2-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
646
+ 'dvtm_oq101_3-4-2-6-1' => {
647
+ Name => 'GPSDateTime',
648
+ Format => 'string',
649
+ Groups => { 2 => 'Time' },
650
+ RawConv => '$$self{GPSDateTime} = $val',
651
+ ValueConv => '$val =~ tr/-/:/; $val',
652
+ PrintConv => '$self->ConvertDateTime($val)',
653
+ },
654
+ 'dvtm_oq101_3-2-10-2' => { Name => 'AccelerometerX', Format => 'float' },
655
+ 'dvtm_oq101_3-2-10-3' => { Name => 'AccelerometerY', Format => 'float' },
656
+ 'dvtm_oq101_3-2-10-4' => { Name => 'AccelerometerZ', Format => 'float' },
657
+ #
658
+ # Osmo Pocket 3
659
+ #
660
+ 'dvtm_PP-101_1-1-5' => { Name => 'SerialNumber', Notes => 'Osmo Pocket 3' },
661
+ 'dvtm_PP-101_1-1-10' => 'Model',
662
+ 'dvtm_PP-101_2-3' => {
663
+ Name => 'FrameInfo',
664
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
665
+ },
666
+ 'dvtm_PP-101_3-1-2' => {
667
+ Name => 'TimeStamp',
668
+ Groups => { 2 => 'Time' },
669
+ Format => 'unsigned',
670
+ ValueConv => '$val / 1e6',
671
+ },
672
+ 'dvtm_PP-101_3-2-9-1' => { Name => 'ISO', Format => 'float' },
673
+ 'dvtm_PP-101_3-2-10-1' => {
674
+ Name => 'ShutterSpeed',
675
+ Format => 'rational',
676
+ PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
677
+ },
678
+ 'dvtm_PP-101_3-2-24-1' => { Name => 'ColorTemperature', Format => 'unsigned' },
679
+ #
680
+ # Matrice 4E
681
+ #
682
+ 'dvtm_wa345e_1-1-5' => { Name => 'SerialNumber', Notes => 'Matrice 4E' },
683
+ 'dvtm_wa345e_1-1-10' => 'Model',
684
+ 'dvtm_wa345e_2-2' => {
685
+ Name => 'FrameInfo',
686
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
687
+ },
688
+ 'dvtm_wa345e_3-1-2' => {
689
+ Name => 'TimeStamp',
690
+ Groups => { 2 => 'Time' },
691
+ Format => 'unsigned',
692
+ ValueConv => '$val / 1e6',
693
+ },
694
+ 'dvtm_wa345e_3-3-3' => {
695
+ Name => 'DroneInfo',
696
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
697
+ },
698
+ 'dvtm_wa345e_3-3-4-1' => {
699
+ Name => 'GPSInfo',
700
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
701
+ },
702
+ 'dvtm_wa345e_3-3-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
703
+ 'dvtm_wa345e_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' },
704
+ 'dvtm_wa345e_3-4-3' => {
705
+ Name => 'GimbalInfo',
706
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
707
+ },
708
+ 'dvtm_wa345e_3-3-4-6-1' => {
709
+ Name => 'GPSDateTime',
710
+ Format => 'string',
711
+ Groups => { 2 => 'Time' },
712
+ RawConv => '$$self{GPSDateTime} = $val',
713
+ ValueConv => '$val =~ tr/-/:/; $val',
714
+ PrintConv => '$self->ConvertDateTime($val)',
715
+ },
716
+ #
717
+ # Mavic Pro 3
718
+ #
719
+ 'dvtm_wm261_1-1-5' => { Name => 'SerialNumber', Notes => 'Mavic Pro 3' },
720
+ 'dvtm_wm261_1-1-10' => 'Model',
721
+ 'dvtm_wm261_2-3' => {
722
+ Name => 'FrameInfo',
723
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
724
+ },
725
+ 'dvtm_wm261_3-1-2' => {
726
+ Name => 'TimeStamp',
727
+ Groups => { 2 => 'Time' },
728
+ Format => 'unsigned',
729
+ ValueConv => '$val / 1e6',
730
+ },
731
+ 'dvtm_wm261_3-2-9-1' => { Name => 'ISO', Format => 'float' },
732
+ 'dvtm_wm261_3-2-10-1' => {
733
+ Name => 'ShutterSpeed',
734
+ Format => 'rational',
735
+ PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
736
+ },
737
+ 'dvtm_wm261_3-2-11-1'=> {
738
+ Name => 'FNumber',
739
+ Format => 'rational',
740
+ PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
741
+ },
742
+ 'dvtm_wm261_3-3-3' => {
743
+ Name => 'DroneInfo',
744
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
745
+ },
746
+ 'dvtm_wm261_3-3-4-1' => {
747
+ Name => 'GPSInfo',
748
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
749
+ },
750
+ 'dvtm_wm261_3-3-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
751
+ 'dvtm_wm261_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' },
752
+ 'dvtm_wm261_3-4-3' => {
753
+ Name => 'GimbalInfo',
754
+ SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
755
+ },
756
+ 'dvtm_wm261_3-3-4-6-1' => {
757
+ Name => 'GPSDateTime',
758
+ Format => 'string',
759
+ Groups => { 2 => 'Time' },
760
+ RawConv => '$$self{GPSDateTime} = $val',
761
+ ValueConv => '$val =~ tr/-/:/; $val',
762
+ PrintConv => '$self->ConvertDateTime($val)',
763
+ },
528
764
  );
529
765
 
530
766
  %Image::ExifTool::DJI::DroneInfo = (