QuickTime.pm (Image-ExifTool-12.57) | : | QuickTime.pm (Image-ExifTool-12.58) | ||
---|---|---|---|---|
skipping to change at line 50 | skipping to change at line 50 | |||
#------------------------------------------------------------------------------ | #------------------------------------------------------------------------------ | |||
package Image::ExifTool::QuickTime; | package Image::ExifTool::QuickTime; | |||
use strict; | use strict; | |||
use vars qw($VERSION $AUTOLOAD %stringEncoding); | use vars qw($VERSION $AUTOLOAD %stringEncoding); | |||
use Image::ExifTool qw(:DataAccess :Utils); | use Image::ExifTool qw(:DataAccess :Utils); | |||
use Image::ExifTool::Exif; | use Image::ExifTool::Exif; | |||
use Image::ExifTool::GPS; | use Image::ExifTool::GPS; | |||
$VERSION = '2.83'; | $VERSION = '2.84'; | |||
sub ProcessMOV($$;$); | sub ProcessMOV($$;$); | |||
sub ProcessKeys($$$); | sub ProcessKeys($$$); | |||
sub ProcessMetaKeys($$$); | sub ProcessMetaKeys($$$); | |||
sub ProcessMetaData($$$); | sub ProcessMetaData($$$); | |||
sub ProcessEncodingParams($$$); | sub ProcessEncodingParams($$$); | |||
sub ProcessSampleDesc($$$); | sub ProcessSampleDesc($$$); | |||
sub ProcessHybrid($$$); | sub ProcessHybrid($$$); | |||
sub ProcessRights($$$); | sub ProcessRights($$$); | |||
# ++vvvvvvvvvvvv++ (in QuickTimeStream.pl) | # ++vvvvvvvvvvvv++ (in QuickTimeStream.pl) | |||
skipping to change at line 1979 | skipping to change at line 1979 | |||
Condition => '$$valPt =~ /^SAMSUNG DIGITAL CAMERA\0/', | Condition => '$$valPt =~ /^SAMSUNG DIGITAL CAMERA\0/', | |||
SubDirectory => { | SubDirectory => { | |||
TagTable => 'Image::ExifTool::Samsung::MP4', | TagTable => 'Image::ExifTool::Samsung::MP4', | |||
ByteOrder => 'LittleEndian', | ByteOrder => 'LittleEndian', | |||
}, | }, | |||
}, | }, | |||
{ | { | |||
Name => 'SanyoMOV', | Name => 'SanyoMOV', | |||
Condition => q{ | Condition => q{ | |||
$$valPt =~ /^SANYO DIGITAL CAMERA\0/ and | $$valPt =~ /^SANYO DIGITAL CAMERA\0/ and | |||
$self->{VALUE}->{FileType} eq "MOV" | $$self{FileType} eq "MOV" | |||
}, | }, | |||
SubDirectory => { | SubDirectory => { | |||
TagTable => 'Image::ExifTool::Sanyo::MOV', | TagTable => 'Image::ExifTool::Sanyo::MOV', | |||
ByteOrder => 'LittleEndian', | ByteOrder => 'LittleEndian', | |||
}, | }, | |||
}, | }, | |||
{ | { | |||
Name => 'SanyoMP4', | Name => 'SanyoMP4', | |||
Condition => q{ | Condition => q{ | |||
$$valPt =~ /^SANYO DIGITAL CAMERA\0/ and | $$valPt =~ /^SANYO DIGITAL CAMERA\0/ and | |||
$self->{VALUE}->{FileType} eq "MP4" | $$self{FileType} eq "MP4" | |||
}, | }, | |||
SubDirectory => { | SubDirectory => { | |||
TagTable => 'Image::ExifTool::Sanyo::MP4', | TagTable => 'Image::ExifTool::Sanyo::MP4', | |||
ByteOrder => 'LittleEndian', | ByteOrder => 'LittleEndian', | |||
}, | }, | |||
}, | }, | |||
{ | { | |||
Name => 'UnknownTags', | Name => 'UnknownTags', | |||
Unknown => 1, | Unknown => 1, | |||
Binary => 1 | Binary => 1 | |||
skipping to change at line 7164 | skipping to change at line 7164 | |||
MP4 audio sample description. This hybrid atom contains both data and c hild | MP4 audio sample description. This hybrid atom contains both data and c hild | |||
atoms. | atoms. | |||
}, | }, | |||
4 => { | 4 => { | |||
Name => 'AudioFormat', | Name => 'AudioFormat', | |||
Format => 'undef[4]', | Format => 'undef[4]', | |||
RawConv => q{ | RawConv => q{ | |||
$$self{AudioFormat} = $val; | $$self{AudioFormat} = $val; | |||
return undef unless $val =~ /^[\w ]{4}$/i; | return undef unless $val =~ /^[\w ]{4}$/i; | |||
# check for protected audio format | # check for protected audio format | |||
$self->OverrideFileType('M4P') if $val eq 'drms' and $$self{VALUE}{F ileType} eq 'M4A'; | $self->OverrideFileType('M4P') if $val eq 'drms' and $$self{FileType } eq 'M4A'; | |||
return $val; | return $val; | |||
}, | }, | |||
# see this link for print conversions (not complete): | # see this link for print conversions (not complete): | |||
# https://github.com/yannickcr/brooser/blob/master/php/librairies/getid3 /module.audio-video.quicktime.php | # https://github.com/yannickcr/brooser/blob/master/php/librairies/getid3 /module.audio-video.quicktime.php | |||
}, | }, | |||
20 => { #PH | 20 => { #PH | |||
Name => 'AudioVendorID', | Name => 'AudioVendorID', | |||
Condition => '$$self{AudioFormat} ne "mp4s"', | Condition => '$$self{AudioFormat} ne "mp4s"', | |||
Format => 'undef[4]', | Format => 'undef[4]', | |||
RawConv => '$val eq "\0\0\0\0" ? undef : $val', | RawConv => '$val eq "\0\0\0\0" ? undef : $val', | |||
skipping to change at line 9811 | skipping to change at line 9811 | |||
last; | last; | |||
} | } | |||
} | } | |||
$dataPos += $size + 8; # point to start of next atom data | $dataPos += $size + 8; # point to start of next atom data | |||
last if $dirEnd and $dataPos >= $dirEnd; # (note: ignores last value if 0 bytes) | last if $dirEnd and $dataPos >= $dirEnd; # (note: ignores last value if 0 bytes) | |||
$raf->Read($buff, 8) == 8 or last; | $raf->Read($buff, 8) == 8 or last; | |||
($size, $tag) = unpack('Na4', $buff); | ($size, $tag) = unpack('Na4', $buff); | |||
++$index if defined $index; | ++$index if defined $index; | |||
} | } | |||
# tweak file type based on track content ("iso*" and "dash" ftyp only) | # tweak file type based on track content ("iso*" and "dash" ftyp only) | |||
if ($topLevel and $$et{VALUE}{FileType} and $$et{VALUE}{FileType} eq 'MP4' a nd | if ($topLevel and $$et{FileType} and $$et{FileType} eq 'MP4' and | |||
$$et{save_ftyp} and $$et{HasHandler} and $$et{save_ftyp} =~ /^(iso|dash) / and | $$et{save_ftyp} and $$et{HasHandler} and $$et{save_ftyp} =~ /^(iso|dash) / and | |||
$$et{HasHandler}{soun} and not $$et{HasHandler}{vide}) | $$et{HasHandler}{soun} and not $$et{HasHandler}{vide}) | |||
{ | { | |||
$et->OverrideFileType('M4A', 'audio/mp4'); | $et->OverrideFileType('M4A', 'audio/mp4'); | |||
} | } | |||
# fill in missing defaults for alternate language tags | # fill in missing defaults for alternate language tags | |||
# (the first language is taken as the default) | # (the first language is taken as the default) | |||
if ($doDefaultLang and $$et{QTLang}) { | if ($doDefaultLang and $$et{QTLang}) { | |||
QTLang: foreach $tag (@{$$et{QTLang}}) { | QTLang: foreach $tag (@{$$et{QTLang}}) { | |||
next unless defined $$et{VALUE}{$tag}; | next unless defined $$et{VALUE}{$tag}; | |||
End of changes. 5 change blocks. | ||||
5 lines changed or deleted | 5 lines changed or added |