- Timestamp:
- 2011-06-01T12:33:42+12:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/perllib/cpan/Image/ExifTool/AIFF.pm
r16842 r24107 5 5 # 6 6 # Revisions: 01/06/2006 - P. Harvey Created 7 # 09/22/2008 - PH Added DjVu support 7 8 # 8 9 # References: 1) http://developer.apple.com/documentation/QuickTime/INMAC/SOUND/imsoundmgr.30.htm#pgfId=3190 … … 18 19 use Image::ExifTool::ID3; 19 20 20 $VERSION = '1.0 1';21 $VERSION = '1.03'; 21 22 22 23 # information for time/date-based tags (time zero is Jan 1, 1904) … … 29 30 # AIFF info 30 31 %Image::ExifTool::AIFF::Main = ( 31 PROCESS_PROC => \&Image::ExifTool::AIFF::ProcessSubChunks,32 32 GROUPS => { 2 => 'Audio' }, 33 33 NOTES => 'Only the tags decoded by ExifTool are listed in this table.', … … 137 137 my ($exifTool, $dirInfo) = @_; 138 138 my $raf = $$dirInfo{RAF}; 139 my $verbose = $exifTool->Options('Verbose'); 140 my ($buff, $err); 139 my ($buff, $err, $tagTablePtr, $page, $type); 141 140 142 141 # verify this is a valid AIFF file 143 142 return 0 unless $raf->Read($buff, 12) == 12; 144 return 0 unless $buff =~ /^FORM....(AIF(F|C))/s; 145 $exifTool->SetFileType($1); 143 my $pos = 12; 144 # check for DjVu image 145 if ($buff =~ /^AT&TFORM/) { 146 # http://www.djvu.org/ 147 # http://djvu.sourceforge.net/specs/djvu3changes.txt 148 my $buf2; 149 return 0 unless $raf->Read($buf2, 4) == 4 and $buf2 =~ /^(DJVU|DJVM)/; 150 $pos += 4; 151 $buff = substr($buff, 4) . $buf2; 152 $tagTablePtr = GetTagTable('Image::ExifTool::DjVu::Main'); 153 $exifTool->SetFileType('DJVU'); 154 # modifiy FileType to indicate a multi-page document 155 $exifTool->{VALUE}->{FileType} .= " (multi-page)" if $buf2 eq 'DJVM'; 156 $type = 'DjVu'; 157 } else { 158 return 0 unless $buff =~ /^FORM....(AIF(F|C))/s; 159 $exifTool->SetFileType($1); 160 $tagTablePtr = GetTagTable('Image::ExifTool::AIFF::Main'); 161 $type = 'AIFF'; 162 } 146 163 SetByteOrder('MM'); 147 my $tagTablePtr = GetTagTable('Image::ExifTool::AIFF::Main'); 148 my $pos = 12; 149 # 150 # Read chunks in AIFF image 164 # 165 # Read through the IFF chunks 151 166 # 152 167 for (;;) { … … 159 174 my $len2 = $len + ($len & 0x01); 160 175 if ($tagInfo) { 161 $raf->Read($buff, $len2) == $len2 or $err=1, last; 176 if ($$tagInfo{TypeOnly}) { 177 $len = $len2 = 4; 178 $page = ($page || 0) + 1; 179 $exifTool->VPrint(0, $exifTool->{INDENT} . "Page $page:\n"); 180 } 181 $raf->Read($buff, $len2) >= $len or $err=1, last; 182 unless ($$tagInfo{SubDirectory} or $$tagInfo{Binary}) { 183 $buff =~ s/\0+$//; # remove trailing nulls 184 } 162 185 $exifTool->HandleTag($tagTablePtr, $tag, $buff, 163 186 DataPt => \$buff, … … 171 194 $pos += $len2; 172 195 } 173 $err and $exifTool->Warn( 'Error reading AIFF file (corrupted?)');196 $err and $exifTool->Warn("Error reading $type file (corrupted?)"); 174 197 return 1; 175 198 } … … 194 217 =head1 AUTHOR 195 218 196 Copyright 2003-20 07, Phil Harvey (phil at owl.phy.queensu.ca)219 Copyright 2003-2011, Phil Harvey (phil at owl.phy.queensu.ca) 197 220 198 221 This library is free software; you can redistribute it and/or modify it … … 217 240 218 241 =cut 219
Note:
See TracChangeset
for help on using the changeset viewer.