exiftool_vendored 13.31.0 → 13.36.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.
- checksums.yaml +4 -4
- data/bin/Changes +88 -2
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/Makefile.PL +1 -0
- data/bin/README +47 -46
- data/bin/exiftool +155 -120
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
- data/bin/lib/Image/ExifTool/Canon.pm +46 -6
- data/bin/lib/Image/ExifTool/DJI.pm +54 -3
- data/bin/lib/Image/ExifTool/Exif.pm +9 -6
- data/bin/lib/Image/ExifTool/FlashPix.pm +4 -159
- data/bin/lib/Image/ExifTool/FujiFilm.pm +97 -32
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/Geotag.pm +5 -3
- data/bin/lib/Image/ExifTool/GoPro.pm +14 -2
- data/bin/lib/Image/ExifTool/LNK.pm +4 -1
- data/bin/lib/Image/ExifTool/Lang/cs.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/it.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/ja.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/nl.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/pl.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +2 -4
- data/bin/lib/Image/ExifTool/Microsoft.pm +158 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +4 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +73 -37
- data/bin/lib/Image/ExifTool/NikonCustom.pm +40 -10
- data/bin/lib/Image/ExifTool/Olympus.pm +258 -34
- data/bin/lib/Image/ExifTool/Panasonic.pm +3 -3
- data/bin/lib/Image/ExifTool/Pentax.pm +341 -61
- data/bin/lib/Image/ExifTool/Protobuf.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +11 -4
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- data/bin/lib/Image/ExifTool/README +2 -1
- data/bin/lib/Image/ExifTool/RIFF.pm +5 -3
- data/bin/lib/Image/ExifTool/Sony.pm +46 -17
- data/bin/lib/Image/ExifTool/TNEF.pm +487 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4384 -4265
- data/bin/lib/Image/ExifTool/TagNames.pod +291 -27
- data/bin/lib/Image/ExifTool/WriteExif.pl +14 -12
- data/bin/lib/Image/ExifTool/Writer.pl +21 -16
- data/bin/lib/Image/ExifTool/XMP.pm +8 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
- data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
- data/bin/lib/Image/ExifTool.pm +14 -4
- data/bin/lib/Image/ExifTool.pod +50 -44
- data/bin/perl-Image-ExifTool.spec +46 -45
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
32
32
|
use Image::ExifTool::Exif;
|
33
33
|
|
34
|
-
$VERSION = '1.
|
34
|
+
$VERSION = '1.99';
|
35
35
|
|
36
36
|
sub ProcessFujiDir($$$);
|
37
37
|
sub ProcessFaceRec($$$);
|
@@ -426,6 +426,16 @@ my %faceCategories = (
|
|
426
426
|
0x300 => 'DR (Dynamic Range priority)',
|
427
427
|
},
|
428
428
|
},
|
429
|
+
0x1037 => { #forum17591
|
430
|
+
Name => 'MultipleExposure',
|
431
|
+
Writable => 'int16u', # (NC)
|
432
|
+
PrintConv => {
|
433
|
+
1 => 'Additive',
|
434
|
+
2 => 'Average',
|
435
|
+
3 => 'Light',
|
436
|
+
4 => 'Dark',
|
437
|
+
},
|
438
|
+
},
|
429
439
|
0x1040 => { #8
|
430
440
|
Name => 'ShadowTone',
|
431
441
|
Writable => 'int32s',
|
@@ -586,16 +596,44 @@ my %faceCategories = (
|
|
586
596
|
Name => 'SequenceNumber',
|
587
597
|
Writable => 'int16u',
|
588
598
|
},
|
599
|
+
0x1102 => { #forum17602
|
600
|
+
Name => 'WhiteBalanceBracketing',
|
601
|
+
Writable => 'int16u', # (NC)
|
602
|
+
PrintHex => 1,
|
603
|
+
PrintConv => {
|
604
|
+
0x01ff => '+/- 1',
|
605
|
+
0x02ff => '+/- 2',
|
606
|
+
0x03ff => '+/- 3',
|
607
|
+
},
|
608
|
+
},
|
589
609
|
0x1103 => {
|
590
610
|
Name => 'DriveSettings',
|
591
611
|
SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::DriveSettings' },
|
592
612
|
},
|
593
613
|
0x1105 => { Name => 'PixelShiftShots', Writable => 'int16u' }, #IB
|
594
614
|
0x1106 => { Name => 'PixelShiftOffset', Writable => 'rational64s', Count => 2 }, #IB
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
615
|
+
0x1150 => {
|
616
|
+
Name => 'CompositeImageMode',
|
617
|
+
Writable => 'int32u',
|
618
|
+
PrintConv => {
|
619
|
+
0 => 'n/a', #PH
|
620
|
+
1 => 'Pro Low-light', #7
|
621
|
+
2 => 'Pro Focus', #7
|
622
|
+
32 => 'Panorama', #PH
|
623
|
+
128 => 'HDR', #forum10799
|
624
|
+
1024 => 'Multi-exposure', #forum17591
|
625
|
+
},
|
626
|
+
},
|
627
|
+
0x1151 => {
|
628
|
+
Name => 'CompositeImageCount1',
|
629
|
+
Writable => 'int16u',
|
630
|
+
# Pro Low-light - val=4 (number of pictures taken?); Pro Focus - val=2,3 (ref 7); HDR - val=3 (forum10799)
|
631
|
+
},
|
632
|
+
0x1152 => {
|
633
|
+
Name => 'CompositeImageCount2',
|
634
|
+
Writable => 'int16u',
|
635
|
+
# Pro Low-light - val=1,3,4 (stacked pictures used?); Pro Focus - val=1,2 (ref 7); HDR - val=3 (forum10799)
|
636
|
+
},
|
599
637
|
0x1153 => { #forum7668
|
600
638
|
Name => 'PanoramaAngle',
|
601
639
|
Writable => 'int16u',
|
@@ -605,8 +643,8 @@ my %faceCategories = (
|
|
605
643
|
Writable => 'int16u',
|
606
644
|
PrintConv => {
|
607
645
|
1 => 'Right',
|
608
|
-
2 => 'Up',
|
609
|
-
3 => 'Left',
|
646
|
+
2 => 'Up', # (or Left?, forum17591)
|
647
|
+
3 => 'Left', # (or Up?, forum17591)
|
610
648
|
4 => 'Down',
|
611
649
|
},
|
612
650
|
},
|
@@ -832,6 +870,13 @@ my %faceCategories = (
|
|
832
870
|
},
|
833
871
|
0x1447 => { Name => 'FujiModel', Writable => 'string' },
|
834
872
|
0x1448 => { Name => 'FujiModel2', Writable => 'string' },
|
873
|
+
|
874
|
+
# Found in X-M5, X-E5
|
875
|
+
# White balance as shot. Same valus as 0xf00e.
|
876
|
+
0x144a => { Name => 'WBRed', Writable => 'int16u' },
|
877
|
+
0x144b => { Name => 'WBGreen', Writable => 'int16u' },
|
878
|
+
0x144c => { Name => 'WBBlue', Writable => 'int16u' },
|
879
|
+
|
835
880
|
0x144d => { Name => 'RollAngle', Writable => 'rational64s' }, #forum14319
|
836
881
|
0x3803 => { #forum10037
|
837
882
|
Name => 'VideoRecordingMode',
|
@@ -1551,20 +1596,21 @@ my %faceCategories = (
|
|
1551
1596
|
TAG_PREFIX => 'MRAW',
|
1552
1597
|
NOTES => q{
|
1553
1598
|
Tags extracted from the M-RAW header of multi-image RAF files. The family 1
|
1554
|
-
group name for these tags is "M-RAW".
|
1555
|
-
|
1556
|
-
|
1557
|
-
|
1558
|
-
|
1559
|
-
|
1560
|
-
|
1561
|
-
|
1562
|
-
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1599
|
+
group name for these tags is "M-RAW". Additional metadata may be extracted
|
1600
|
+
from the embedded RAW images with the ExtractEmbedded option.
|
1601
|
+
},
|
1602
|
+
0x2001 => { Name => 'RawImageNumber', Format => 'int32u' },
|
1603
|
+
# 0x2003 - seen "0 100", "-300 100" and "300 100" for a sequence of 3 images
|
1604
|
+
0x2003 => { Name => 'ExposureCompensation', Format => 'rational32s', Unknown => 1, Hidden => 1, PrintConv => 'sprintf("%+.2f",$val)' },
|
1605
|
+
# 0x2004 - (same value as 3 in all my samples)
|
1606
|
+
0x2004 => { Name => 'ExposureCompensation2', Format => 'rational32s', Unknown => 1, Hidden => 1, PrintConv => 'sprintf("%+.2f",$val)' },
|
1607
|
+
# 0x2005 - seen "10 1600", "10 6800", "10 200", "10 35000" etc
|
1608
|
+
0x2005 => { Name => 'ExposureTime', Format => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)' },
|
1609
|
+
# 0x2006 - seen "450 100", "400 100" (all images in RAF have same value)
|
1610
|
+
0x2006 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)' },
|
1611
|
+
# 0x2007 - seen 200, 125, 250, 2000
|
1612
|
+
0x2007 => 'ISO',
|
1613
|
+
# 0x2008 - seen 0, 65536
|
1568
1614
|
);
|
1569
1615
|
|
1570
1616
|
#------------------------------------------------------------------------------
|
@@ -1673,10 +1719,11 @@ sub ProcessFujiDir($$$)
|
|
1673
1719
|
#------------------------------------------------------------------------------
|
1674
1720
|
# get information from FujiFilm M-RAW header
|
1675
1721
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
1676
|
-
# Returns: 1 if this was a valid M-RAW
|
1722
|
+
# Returns: 1 if this was a valid M-RAW header
|
1677
1723
|
sub ProcessMRAW($$$)
|
1678
1724
|
{
|
1679
1725
|
my ($et, $dirInfo, $tagTablePtr) = @_;
|
1726
|
+
return 1 if $$et{DOC_NUM};
|
1680
1727
|
my $dataPt = $$dirInfo{DataPt};
|
1681
1728
|
my $dataPos = $$dirInfo{DataPos};
|
1682
1729
|
my $dataLen = length $$dataPt;
|
@@ -1690,15 +1737,16 @@ sub ProcessMRAW($$$)
|
|
1690
1737
|
my $pos = 44;
|
1691
1738
|
my ($i, $n);
|
1692
1739
|
for ($n=0; ; ++$n) {
|
1693
|
-
$pos
|
1694
|
-
my $end = $pos + $size;
|
1740
|
+
my $end = $pos + 16 + $size;
|
1695
1741
|
last if $end > $dataLen;
|
1742
|
+
my $rafStart = Get64u($dataPt, $pos);
|
1743
|
+
my $rafLen = Get64u($dataPt, $pos+8);
|
1744
|
+
$pos += 16; # skip offset/size fields
|
1696
1745
|
$$et{DOC_NUM} = ++$$et{DOC_COUNT} if $pos > 60;
|
1697
1746
|
$et->VPrint(0, "$$et{INDENT}(Raw image $n parameters: $size bytes, $num entries)\n");
|
1698
1747
|
for ($i=0; $i<$num; ++$i) {
|
1699
1748
|
last if $pos + 4 > $end;
|
1700
|
-
|
1701
|
-
my $tag = Get8u($dataPt, $pos+1);
|
1749
|
+
my $tag = Get16u($dataPt, $pos);
|
1702
1750
|
my $size = Get16u($dataPt, $pos+2);
|
1703
1751
|
$pos += 4;
|
1704
1752
|
last if $pos + $size > $end;
|
@@ -1710,6 +1758,21 @@ sub ProcessMRAW($$$)
|
|
1710
1758
|
);
|
1711
1759
|
$pos += $size;
|
1712
1760
|
}
|
1761
|
+
if ($rafStart and $et->Options('ExtractEmbedded')) {
|
1762
|
+
if ($et->Options('Verbose')) {
|
1763
|
+
my $msg = sprintf("$$et{INDENT}(RAW image $n data: Start=0x%x, Length=0x%x)\n",$rafStart,$rafLen);
|
1764
|
+
$et->VPrint(0, $msg);
|
1765
|
+
}
|
1766
|
+
my $raf = $$et{RAF};
|
1767
|
+
my $tell = $raf->Tell();
|
1768
|
+
my $order = GetByteOrder();
|
1769
|
+
my $fujiWidth = $$et{FujiWidth};
|
1770
|
+
$raf->Seek($rafStart, 0) or next;
|
1771
|
+
ProcessRAF($et, { RAF => $raf, Base => $rafStart });
|
1772
|
+
$$et{FujiWidth} = $fujiWidth;
|
1773
|
+
SetByteOrder($order);
|
1774
|
+
$raf->Seek($tell, 0);
|
1775
|
+
}
|
1713
1776
|
}
|
1714
1777
|
delete $$et{DOC_NUM};
|
1715
1778
|
return 1;
|
@@ -1863,6 +1926,7 @@ sub ProcessRAF($$)
|
|
1863
1926
|
my ($buff, $jpeg, $warn, $offset);
|
1864
1927
|
|
1865
1928
|
my $raf = $$dirInfo{RAF};
|
1929
|
+
my $base = $$dirInfo{Base} || 0;
|
1866
1930
|
$raf->Read($buff,0x70) == 0x70 or return 0;
|
1867
1931
|
$buff =~ /^FUJIFILM/ or return 0;
|
1868
1932
|
# get position and size of M-RAW header and jpeg preview
|
@@ -1870,13 +1934,13 @@ sub ProcessRAF($$)
|
|
1870
1934
|
my ($jpos, $jlen) = unpack('x84NN', $buff);
|
1871
1935
|
$jpos & 0x8000 and return 0;
|
1872
1936
|
if ($jpos) {
|
1873
|
-
$raf->Seek($jpos, 0)
|
1937
|
+
$raf->Seek($jpos+$base, 0) or return 0;
|
1874
1938
|
$raf->Read($jpeg, $jlen) == $jlen or return 0;
|
1875
1939
|
}
|
1876
1940
|
SetByteOrder('MM');
|
1877
|
-
$et->SetFileType();
|
1941
|
+
$et->SetFileType() unless $$et{DOC_NUM};
|
1878
1942
|
my $tbl = GetTagTable('Image::ExifTool::FujiFilm::RAFHeader');
|
1879
|
-
$et->ProcessDirectory({ DataPt => \$buff, DirName => 'RAFHeader' }, $tbl);
|
1943
|
+
$et->ProcessDirectory({ DataPt => \$buff, DirName => 'RAFHeader', Base => $base }, $tbl);
|
1880
1944
|
|
1881
1945
|
# extract information from embedded JPEG
|
1882
1946
|
my %dirInfo = (
|
@@ -1884,21 +1948,22 @@ sub ProcessRAF($$)
|
|
1884
1948
|
RAF => File::RandomAccess->new(\$jpeg),
|
1885
1949
|
);
|
1886
1950
|
if ($jpos) {
|
1887
|
-
$$et{BASE} += $jpos;
|
1951
|
+
$$et{BASE} += $jpos + $base;
|
1888
1952
|
my $ok = $et->ProcessJPEG(\%dirInfo);
|
1889
|
-
$$et{BASE} -= $jpos;
|
1953
|
+
$$et{BASE} -= $jpos + $base;
|
1890
1954
|
$et->FoundTag('PreviewImage', \$jpeg) if $ok;
|
1891
1955
|
}
|
1892
1956
|
# extract information from Fuji RAF and TIFF directories
|
1893
1957
|
my ($rafNum, $ifdNum) = ('','');
|
1894
1958
|
foreach $offset (0x48, 0x5c, 0x64, 0x78, 0x80) {
|
1895
1959
|
last if $jpos and $offset >= $jpos;
|
1896
|
-
unless ($raf->Seek($offset, 0) and $raf->Read($buff, 8)) {
|
1960
|
+
unless ($raf->Seek($offset+$base, 0) and $raf->Read($buff, 8)) {
|
1897
1961
|
$warn = 1;
|
1898
1962
|
last;
|
1899
1963
|
}
|
1900
1964
|
my ($start, $len) = unpack('N2',$buff);
|
1901
1965
|
next unless $start;
|
1966
|
+
$start += $base;
|
1902
1967
|
if ($offset == 0x64 or $offset == 0x80) {
|
1903
1968
|
# parse FujiIFD directory
|
1904
1969
|
%dirInfo = (
|
Binary file
|
@@ -18,6 +18,8 @@
|
|
18
18
|
# 2024/04/23 - PH Added ability to read more OpenTracks GPS tags
|
19
19
|
# 2024/08/28 - PH Added support for new Google Takeout JSON format
|
20
20
|
# 2024/11/26 - PH Also write GPSMeasureMode and GPSDOP
|
21
|
+
# 2024/11/05 - PH Added support for Google Maps "Export timeline data"
|
22
|
+
# JSON format
|
21
23
|
#
|
22
24
|
# References: 1) http://www.topografix.com/GPX/1/1/
|
23
25
|
# 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
|
@@ -1545,9 +1547,9 @@ This module is used by Image::ExifTool
|
|
1545
1547
|
|
1546
1548
|
This module loads GPS track logs, interpolates to determine position based
|
1547
1549
|
on time, and sets new GPS values for geotagging images. Currently supported
|
1548
|
-
formats are GPX, NMEA RMC/GGA/GLL, KML, IGC, Garmin XML and TCX,
|
1549
|
-
PMGNTRK, Honeywell PTNTHPR, Bramor gEO, Winplus Beacon text,
|
1550
|
-
|
1550
|
+
formats are GPX, NMEA RMC/GGA/GLL/GSA/ZDA, KML, IGC, Garmin XML and TCX,
|
1551
|
+
Magellan PMGNTRK, Honeywell PTNTHPR, Bramor gEO, Winplus Beacon text,
|
1552
|
+
GPS/IMU CSV, DJI CSV, ExifTool CSV and 3 different Google JSON formats.
|
1551
1553
|
|
1552
1554
|
Methods in this module should not be called directly. Instead, the Geotag
|
1553
1555
|
feature is accessed by writing the values of the ExifTool Geotag, Geosync
|
@@ -17,7 +17,7 @@ use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
18
18
|
use Image::ExifTool::QuickTime;
|
19
19
|
|
20
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.14';
|
21
21
|
|
22
22
|
sub ProcessGoPro($$$);
|
23
23
|
sub ProcessString($$$);
|
@@ -750,14 +750,26 @@ sub ProcessString($$$)
|
|
750
750
|
my @list = ref $$dataPt eq 'ARRAY' ? @{$$dataPt} : ( $$dataPt );
|
751
751
|
my ($string, $val);
|
752
752
|
$et->VerboseDir('GoPro structure');
|
753
|
+
my $docNum = $$et{DOC_NUM};
|
754
|
+
my $subDoc = 0;
|
753
755
|
foreach $string (@list) {
|
754
756
|
my @val = split ' ', $string;
|
755
757
|
my $i = 0;
|
756
758
|
foreach $val (@val) {
|
757
759
|
$et->HandleTag($tagTablePtr, $i, $val);
|
758
|
-
$$tagTablePtr{++$i}
|
760
|
+
next if $$tagTablePtr{++$i};
|
761
|
+
# increment subdoc for records stored as string of values (eg. GPS5)
|
762
|
+
$i = 0;
|
763
|
+
++$subDoc;
|
764
|
+
$$et{DOC_NUM} = "$docNum-$subDoc";
|
765
|
+
}
|
766
|
+
if ($i) {
|
767
|
+
# increment subdoc for records stored as array of strings (eg. GPS9)
|
768
|
+
++$subDoc;
|
769
|
+
$$et{DOC_NUM} = "$docNum-$subDoc";
|
759
770
|
}
|
760
771
|
}
|
772
|
+
$$et{DOC_NUM} = $docNum;
|
761
773
|
return 1;
|
762
774
|
}
|
763
775
|
|
@@ -15,8 +15,9 @@ package Image::ExifTool::LNK;
|
|
15
15
|
use strict;
|
16
16
|
use vars qw($VERSION);
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
18
|
+
use Image::ExifTool::Microsoft;
|
18
19
|
|
19
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.11';
|
20
21
|
|
21
22
|
sub ProcessItemID($$$);
|
22
23
|
sub ProcessLinkInfo($$$);
|
@@ -441,6 +442,8 @@ sub ProcessLinkInfo($$$);
|
|
441
442
|
0x08 => {
|
442
443
|
Name => 'CodePage',
|
443
444
|
Format => 'int32u',
|
445
|
+
SeparateTable => 'Microsoft CodePage',
|
446
|
+
PrintConv => \%Image::ExifTool::Microsoft::codePage,
|
444
447
|
},
|
445
448
|
);
|
446
449
|
|
@@ -1198,7 +1198,6 @@ $VERSION = '1.07';
|
|
1198
1198
|
'Rotation' => {
|
1199
1199
|
PrintConv => {
|
1200
1200
|
'Horizontal' => '0° (nahoru/vlevo)',
|
1201
|
-
'Horizontal (Normal)' => '0° (nahoru/vlevo)',
|
1202
1201
|
'Horizontal (normal)' => '0° (nahoru/vlevo)',
|
1203
1202
|
'Rotate 180' => '180° (dolů/vpravo)',
|
1204
1203
|
'Rotate 270 CW' => '90° po směru HR (vlevo/dolů)',
|
@@ -6912,7 +6912,6 @@ $VERSION = '1.38';
|
|
6912
6912
|
'Rotation' => {
|
6913
6913
|
Description => 'Ausrichtung',
|
6914
6914
|
PrintConv => {
|
6915
|
-
'Horizontal (Normal)' => 'Horizontal (normal)',
|
6916
6915
|
'Rotate 180' => '180° gedreht',
|
6917
6916
|
'Rotate 270 CW' => '90° gegen den Uhrzeigersinn',
|
6918
6917
|
'Rotate 90 CW' => '90° im Uhrzeigersinn',
|
@@ -8874,7 +8874,6 @@ $VERSION = '1.37';
|
|
8874
8874
|
'270' => '270°',
|
8875
8875
|
'90' => '90°',
|
8876
8876
|
'Horizontal' => 'Horizontale',
|
8877
|
-
'Horizontal (Normal)' => 'Horizontale (normale)',
|
8878
8877
|
'Horizontal (normal)' => 'Horizontale (normale)',
|
8879
8878
|
'Rotate 180' => 'Rotation de 180°',
|
8880
8879
|
'Rotate 270 CW' => 'Rotation antihoraire de 270°',
|
@@ -6424,7 +6424,6 @@ $VERSION = '1.14';
|
|
6424
6424
|
Description => 'Rotazione',
|
6425
6425
|
PrintConv => {
|
6426
6426
|
'Horizontal' => 'Orizzontale',
|
6427
|
-
'Horizontal (Normal)' => 'Orizzontale (normale)',
|
6428
6427
|
'Horizontal (normal)' => 'Orizzontale (normale)',
|
6429
6428
|
'Rotate 180' => 'Ruota di 180°',
|
6430
6429
|
'Rotate 270 CW' => 'Ruota di 270° in senso orario',
|
@@ -2567,7 +2567,6 @@ $VERSION = '1.13';
|
|
2567
2567
|
'Rotation' => {
|
2568
2568
|
PrintConv => {
|
2569
2569
|
'Horizontal' => '0° (boven/links)',
|
2570
|
-
'Horizontal (Normal)' => '0° (boven/links)',
|
2571
2570
|
'Horizontal (normal)' => '0° (boven/links)',
|
2572
2571
|
'Rotate 180' => '180° (onder/rechts)',
|
2573
2572
|
'Rotate 270 CW' => 'Draai 270° met de klok mee',
|
@@ -955,7 +955,6 @@ $VERSION = '1.12';
|
|
955
955
|
Description => 'Obrót',
|
956
956
|
PrintConv => {
|
957
957
|
'Horizontal' => '0° (góra/lewo)',
|
958
|
-
'Horizontal (Normal)' => '0° (góra/lewo)',
|
959
958
|
'Horizontal (normal)' => '0° (góra/lewo)',
|
960
959
|
'Rotate 180' => '180° (dół/prawo)',
|
961
960
|
'Rotate 270 CW' => '90° CW (lewo/dół)',
|
@@ -32,7 +32,7 @@ use strict;
|
|
32
32
|
use vars qw($VERSION);
|
33
33
|
use Image::ExifTool qw(:DataAccess :Utils);
|
34
34
|
|
35
|
-
$VERSION = '1.
|
35
|
+
$VERSION = '1.30';
|
36
36
|
|
37
37
|
# program map table "stream_type" lookup (ref 6/1/9)
|
38
38
|
my %streamType = (
|
@@ -557,7 +557,7 @@ sub ProcessM2TS($$)
|
|
557
557
|
{
|
558
558
|
my ($et, $dirInfo) = @_;
|
559
559
|
my $raf = $$dirInfo{RAF};
|
560
|
-
my ($buff, $pLen, $
|
560
|
+
my ($buff, $pLen, $j, $fileType, $eof);
|
561
561
|
my (%pmt, %pidType, %data, %sectLen, %packLen, %fromStart);
|
562
562
|
my ($startTime, $endTime, $fwdTime, $backScan, $maxBack);
|
563
563
|
my $verbose = $et->Options('Verbose');
|
@@ -570,10 +570,8 @@ sub ProcessM2TS($$)
|
|
570
570
|
unless ($1) {
|
571
571
|
$pLen = 188; # no timecode
|
572
572
|
$fileType = 'M2T'; # (just as a way to tell there is no timecode)
|
573
|
-
$upkPrefix = 'N';
|
574
573
|
} else {
|
575
574
|
$pLen = 192; # 188-byte transport packet + leading 4-byte timecode (ref 4)
|
576
|
-
$upkPrefix = 'x4N';
|
577
575
|
}
|
578
576
|
my $prePos = $pLen - 188; # byte position of packet prefix
|
579
577
|
my $readSize = 64 * $pLen; # size of our read buffer
|
@@ -13,7 +13,7 @@
|
|
13
13
|
package Image::ExifTool::Microsoft;
|
14
14
|
|
15
15
|
use strict;
|
16
|
-
use vars qw($VERSION);
|
16
|
+
use vars qw($VERSION %codePage);
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
18
18
|
use Image::ExifTool::XMP;
|
19
19
|
|
@@ -23,6 +23,163 @@ sub ProcessXtra($$$);
|
|
23
23
|
sub WriteXtra($$$);
|
24
24
|
sub CheckXtra($$$);
|
25
25
|
|
26
|
+
# list of code pages used by Microsoft
|
27
|
+
# (ref http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx)
|
28
|
+
%codePage = (
|
29
|
+
37 => 'IBM EBCDIC US-Canada',
|
30
|
+
437 => 'DOS United States',
|
31
|
+
500 => 'IBM EBCDIC International',
|
32
|
+
708 => 'Arabic (ASMO 708)',
|
33
|
+
709 => 'Arabic (ASMO-449+, BCON V4)',
|
34
|
+
710 => 'Arabic - Transparent Arabic',
|
35
|
+
720 => 'DOS Arabic (Transparent ASMO)',
|
36
|
+
737 => 'DOS Greek (formerly 437G)',
|
37
|
+
775 => 'DOS Baltic',
|
38
|
+
850 => 'DOS Latin 1 (Western European)',
|
39
|
+
852 => 'DOS Latin 2 (Central European)',
|
40
|
+
855 => 'DOS Cyrillic (primarily Russian)',
|
41
|
+
857 => 'DOS Turkish',
|
42
|
+
858 => 'DOS Multilingual Latin 1 with Euro',
|
43
|
+
860 => 'DOS Portuguese',
|
44
|
+
861 => 'DOS Icelandic',
|
45
|
+
862 => 'DOS Hebrew',
|
46
|
+
863 => 'DOS French Canadian',
|
47
|
+
864 => 'DOS Arabic',
|
48
|
+
865 => 'DOS Nordic',
|
49
|
+
866 => 'DOS Russian (Cyrillic)',
|
50
|
+
869 => 'DOS Modern Greek',
|
51
|
+
870 => 'IBM EBCDIC Multilingual/ROECE (Latin 2)',
|
52
|
+
874 => 'Windows Thai (same as 28605, ISO 8859-15)',
|
53
|
+
875 => 'IBM EBCDIC Greek Modern',
|
54
|
+
932 => 'Windows Japanese (Shift-JIS)',
|
55
|
+
936 => 'Windows Simplified Chinese (PRC, Singapore)',
|
56
|
+
949 => 'Windows Korean (Unified Hangul Code)',
|
57
|
+
950 => 'Windows Traditional Chinese (Taiwan)',
|
58
|
+
1026 => 'IBM EBCDIC Turkish (Latin 5)',
|
59
|
+
1047 => 'IBM EBCDIC Latin 1/Open System',
|
60
|
+
1140 => 'IBM EBCDIC US-Canada with Euro',
|
61
|
+
1141 => 'IBM EBCDIC Germany with Euro',
|
62
|
+
1142 => 'IBM EBCDIC Denmark-Norway with Euro',
|
63
|
+
1143 => 'IBM EBCDIC Finland-Sweden with Euro',
|
64
|
+
1144 => 'IBM EBCDIC Italy with Euro',
|
65
|
+
1145 => 'IBM EBCDIC Latin America-Spain with Euro',
|
66
|
+
1146 => 'IBM EBCDIC United Kingdom with Euro',
|
67
|
+
1147 => 'IBM EBCDIC France with Euro',
|
68
|
+
1148 => 'IBM EBCDIC International with Euro',
|
69
|
+
1149 => 'IBM EBCDIC Icelandic with Euro',
|
70
|
+
1200 => 'Unicode UTF-16, little endian',
|
71
|
+
1201 => 'Unicode UTF-16, big endian',
|
72
|
+
1250 => 'Windows Latin 2 (Central European)',
|
73
|
+
1251 => 'Windows Cyrillic',
|
74
|
+
1252 => 'Windows Latin 1 (Western European)',
|
75
|
+
1253 => 'Windows Greek',
|
76
|
+
1254 => 'Windows Turkish',
|
77
|
+
1255 => 'Windows Hebrew',
|
78
|
+
1256 => 'Windows Arabic',
|
79
|
+
1257 => 'Windows Baltic',
|
80
|
+
1258 => 'Windows Vietnamese',
|
81
|
+
1361 => 'Korean (Johab)',
|
82
|
+
10000 => 'Mac Roman (Western European)',
|
83
|
+
10001 => 'Mac Japanese',
|
84
|
+
10002 => 'Mac Traditional Chinese',
|
85
|
+
10003 => 'Mac Korean',
|
86
|
+
10004 => 'Mac Arabic',
|
87
|
+
10005 => 'Mac Hebrew',
|
88
|
+
10006 => 'Mac Greek',
|
89
|
+
10007 => 'Mac Cyrillic',
|
90
|
+
10008 => 'Mac Simplified Chinese',
|
91
|
+
10010 => 'Mac Romanian',
|
92
|
+
10017 => 'Mac Ukrainian',
|
93
|
+
10021 => 'Mac Thai',
|
94
|
+
10029 => 'Mac Latin 2 (Central European)',
|
95
|
+
10079 => 'Mac Icelandic',
|
96
|
+
10081 => 'Mac Turkish',
|
97
|
+
10082 => 'Mac Croatian',
|
98
|
+
12000 => 'Unicode UTF-32, little endian',
|
99
|
+
12001 => 'Unicode UTF-32, big endian',
|
100
|
+
20000 => 'CNS Taiwan',
|
101
|
+
20001 => 'TCA Taiwan',
|
102
|
+
20002 => 'Eten Taiwan',
|
103
|
+
20003 => 'IBM5550 Taiwan',
|
104
|
+
20004 => 'TeleText Taiwan',
|
105
|
+
20005 => 'Wang Taiwan',
|
106
|
+
20105 => 'IA5 (IRV International Alphabet No. 5, 7-bit)',
|
107
|
+
20106 => 'IA5 German (7-bit)',
|
108
|
+
20107 => 'IA5 Swedish (7-bit)',
|
109
|
+
20108 => 'IA5 Norwegian (7-bit)',
|
110
|
+
20127 => 'US-ASCII (7-bit)',
|
111
|
+
20261 => 'T.61',
|
112
|
+
20269 => 'ISO 6937 Non-Spacing Accent',
|
113
|
+
20273 => 'IBM EBCDIC Germany',
|
114
|
+
20277 => 'IBM EBCDIC Denmark-Norway',
|
115
|
+
20278 => 'IBM EBCDIC Finland-Sweden',
|
116
|
+
20280 => 'IBM EBCDIC Italy',
|
117
|
+
20284 => 'IBM EBCDIC Latin America-Spain',
|
118
|
+
20285 => 'IBM EBCDIC United Kingdom',
|
119
|
+
20290 => 'IBM EBCDIC Japanese Katakana Extended',
|
120
|
+
20297 => 'IBM EBCDIC France',
|
121
|
+
20420 => 'IBM EBCDIC Arabic',
|
122
|
+
20423 => 'IBM EBCDIC Greek',
|
123
|
+
20424 => 'IBM EBCDIC Hebrew',
|
124
|
+
20833 => 'IBM EBCDIC Korean Extended',
|
125
|
+
20838 => 'IBM EBCDIC Thai',
|
126
|
+
20866 => 'Russian/Cyrillic (KOI8-R)',
|
127
|
+
20871 => 'IBM EBCDIC Icelandic',
|
128
|
+
20880 => 'IBM EBCDIC Cyrillic Russian',
|
129
|
+
20905 => 'IBM EBCDIC Turkish',
|
130
|
+
20924 => 'IBM EBCDIC Latin 1/Open System with Euro',
|
131
|
+
20932 => 'Japanese (JIS 0208-1990 and 0121-1990)',
|
132
|
+
20936 => 'Simplified Chinese (GB2312)',
|
133
|
+
20949 => 'Korean Wansung',
|
134
|
+
21025 => 'IBM EBCDIC Cyrillic Serbian-Bulgarian',
|
135
|
+
21027 => 'Extended Alpha Lowercase (deprecated)',
|
136
|
+
21866 => 'Ukrainian/Cyrillic (KOI8-U)',
|
137
|
+
28591 => 'ISO 8859-1 Latin 1 (Western European)',
|
138
|
+
28592 => 'ISO 8859-2 (Central European)',
|
139
|
+
28593 => 'ISO 8859-3 Latin 3',
|
140
|
+
28594 => 'ISO 8859-4 Baltic',
|
141
|
+
28595 => 'ISO 8859-5 Cyrillic',
|
142
|
+
28596 => 'ISO 8859-6 Arabic',
|
143
|
+
28597 => 'ISO 8859-7 Greek',
|
144
|
+
28598 => 'ISO 8859-8 Hebrew (Visual)',
|
145
|
+
28599 => 'ISO 8859-9 Turkish',
|
146
|
+
28603 => 'ISO 8859-13 Estonian',
|
147
|
+
28605 => 'ISO 8859-15 Latin 9',
|
148
|
+
29001 => 'Europa 3',
|
149
|
+
38598 => 'ISO 8859-8 Hebrew (Logical)',
|
150
|
+
50220 => 'ISO 2022 Japanese with no halfwidth Katakana (JIS)',
|
151
|
+
50221 => 'ISO 2022 Japanese with halfwidth Katakana (JIS-Allow 1 byte Kana)',
|
152
|
+
50222 => 'ISO 2022 Japanese JIS X 0201-1989 (JIS-Allow 1 byte Kana - SO/SI)',
|
153
|
+
50225 => 'ISO 2022 Korean',
|
154
|
+
50227 => 'ISO 2022 Simplified Chinese',
|
155
|
+
50229 => 'ISO 2022 Traditional Chinese',
|
156
|
+
50930 => 'EBCDIC Japanese (Katakana) Extended',
|
157
|
+
50931 => 'EBCDIC US-Canada and Japanese',
|
158
|
+
50933 => 'EBCDIC Korean Extended and Korean',
|
159
|
+
50935 => 'EBCDIC Simplified Chinese Extended and Simplified Chinese',
|
160
|
+
50936 => 'EBCDIC Simplified Chinese',
|
161
|
+
50937 => 'EBCDIC US-Canada and Traditional Chinese',
|
162
|
+
50939 => 'EBCDIC Japanese (Latin) Extended and Japanese',
|
163
|
+
51932 => 'EUC Japanese',
|
164
|
+
51936 => 'EUC Simplified Chinese',
|
165
|
+
51949 => 'EUC Korean',
|
166
|
+
51950 => 'EUC Traditional Chinese',
|
167
|
+
52936 => 'HZ-GB2312 Simplified Chinese',
|
168
|
+
54936 => 'Windows XP and later: GB18030 Simplified Chinese (4 byte)',
|
169
|
+
57002 => 'ISCII Devanagari',
|
170
|
+
57003 => 'ISCII Bengali',
|
171
|
+
57004 => 'ISCII Tamil',
|
172
|
+
57005 => 'ISCII Telugu',
|
173
|
+
57006 => 'ISCII Assamese',
|
174
|
+
57007 => 'ISCII Oriya',
|
175
|
+
57008 => 'ISCII Kannada',
|
176
|
+
57009 => 'ISCII Malayalam',
|
177
|
+
57010 => 'ISCII Gujarati',
|
178
|
+
57011 => 'ISCII Punjabi',
|
179
|
+
65000 => 'Unicode (UTF-7)',
|
180
|
+
65001 => 'Unicode (UTF-8)',
|
181
|
+
);
|
182
|
+
|
26
183
|
# tags written by Microsoft HDView (ref 1)
|
27
184
|
%Image::ExifTool::Microsoft::Stitch = (
|
28
185
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
@@ -49,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode
|
|
49
49
|
use Image::ExifTool qw(:DataAccess :Utils);
|
50
50
|
use Image::ExifTool::Exif;
|
51
51
|
|
52
|
-
$VERSION = '2.
|
52
|
+
$VERSION = '2.89';
|
53
53
|
|
54
54
|
# Full list of product codes for Sony-compatible Minolta lenses
|
55
55
|
# (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570)
|
@@ -603,6 +603,8 @@ $VERSION = '2.88';
|
|
603
603
|
19 => 'Vivid 2', #JR (7SM3)
|
604
604
|
20 => 'IN', #JR (7SM3)
|
605
605
|
21 => 'SH', #JR (7SM3)
|
606
|
+
22 => 'FL2', #JR (ILME-FX2)
|
607
|
+
23 => 'FL3', #JR (ILME-FX2)
|
606
608
|
100 => 'Neutral', #JD
|
607
609
|
101 => 'Clear', #JD
|
608
610
|
102 => 'Deep', #JD
|
@@ -2411,7 +2413,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
2411
2413
|
0x5a => { #15
|
2412
2414
|
Name => 'Rotation',
|
2413
2415
|
PrintConv => {
|
2414
|
-
0 => 'Horizontal (
|
2416
|
+
0 => 'Horizontal (normal)',
|
2415
2417
|
1 => 'Rotate 270 CW',
|
2416
2418
|
2 => 'Rotate 90 CW',
|
2417
2419
|
},
|