Ignore:
Timestamp:
2011-06-01T12:33:42+12:00 (13 years ago)
Author:
sjm84
Message:

Updating the ExifTool perl modules

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/perllib/cpan/Image/ExifTool/WriteCanonRaw.pl

    r16842 r24107  
    1111use vars qw($VERSION $AUTOLOAD %crwTagFormat);
    1212use Image::ExifTool::Fixup;
     13
     14# map for adding directories to CRW
     15my %crwMap = (
     16    XMP      => 'CanonVRD',
     17    CanonVRD => 'Trailer',
     18);
    1319
    1420# mappings to from RAW tagID to MakerNotes tagID
     
    7783    # (and has the same raw tagID as CanonFileDescription)
    7884    return if $tagInfo and $$tagInfo{Name} eq 'UserComment';
    79     my $tagType = ($rawTag >> 8) & 0x38;
    8085    my $format = $Image::ExifTool::Exif::formatNumber{$formName};
    8186    my $fsiz = $Image::ExifTool::Exif::formatSize[$format];
     
    166171{
    167172    my ($exifTool, $tagInfo, $valPtr) = @_;
    168     Image::ExifTool::GenerateTagIDs($$tagInfo{Table});
    169173    my $tagName = $$tagInfo{Name};
    170174    if ($tagName eq 'JpgFromRaw' or $tagName eq 'ThumbnailImage') {
     
    193197    my ($exifTool, $dirInfo, $tagTablePtr) = @_;
    194198    my $dataPt = $$dirInfo{DataPt} or return 0;
    195     my $raf = $$dirInfo{RAF} or return 0;
    196199    my $outfile = $$dirInfo{OutFile} or return 0;
     200    $$dirInfo{RAF} or return 0;
    197201
    198202    # check CR2 signature
    199     return 0 if $$dataPt !~ /^.{8}CR\x02\0/s and
    200         $exifTool->Error("Unsupported Canon RAW file. May cause problems if rewritten", 1);
     203    if ($$dataPt !~ /^.{8}CR\x02\0/s) {
     204        my ($msg, $minor);
     205        if ($$dataPt =~ /^.{8}CR/s) {
     206            $msg = 'Unsupported Canon RAW file. May cause problems if rewritten';
     207            $minor = 1;
     208        } elsif ($$dataPt =~ /^.{8}\xba\xb0\xac\xbb/s) {
     209            $msg = 'Can not currently write Canon 1D RAW images';
     210        } else {
     211            $msg = 'Unrecognized Canon RAW file';
     212        }
     213        return 0 if $exifTool->Error($msg, $minor);
     214    }
     215
    201216    # CR2 has a 16-byte header
    202217    $$dirInfo{NewDataPos} = 16;
     
    231246# Inputs: 0) ExifTool object reference, 1) source dirInfo reference,
    232247#         2) tag table reference
    233 # Returns: true on sucess
     248# Returns: true on success
    234249# Notes: Increments ExifTool CHANGED flag for each tag changed This routine is
    235250# different from all of the other write routines because Canon RAW files are
     
    237252# writing it out.  Therefore this routine doesn't return the directory data as
    238253# the rest of the Write routines do.  Instead, it writes to the dirInfo
    239 # Outfile on the fly --> much faster, efficient, and less demanding on memory!
     254# OutFile on the fly --> much faster, efficient, and less demanding on memory!
    240255sub WriteCanonRaw($$$)
    241256{
     
    294309            my $newVal = $exifTool->GetNewValues($tagInfo);
    295310            if (defined $newVal) {
     311                # pad value to an even length (Canon ImageBrowser and ZoomBrowser
     312                # version 6.1.1 have problems with odd-sized embedded JPEG images
     313                # even if the value is padded to maintain alignment, so do this
     314                # before calculating the size for the directory entry)
     315                $newVal .= "\0" if length($newVal) & 0x01;
    296316                # add new directory entry
    297317                $newDir .= Set16u($addTag) . Set32u(length($newVal)) .
     
    307327        }
    308328        last unless defined $tag;           # all done if no more directory entries
    309         return 0 if $tag & 0x8000;      # top bit should not be set
     329        return 0 if $tag & 0x8000;          # top bit should not be set
    310330        my $tagID = $tag & 0x3fff;          # get tag ID
    311331        my $tagType = ($tag >> 8) & 0x38;   # get tag type
     
    410430                    $oldVal = $value;
    411431                }
    412                 my $newValueHash = $exifTool->GetNewValueHash($tagInfo);
    413                 if (Image::ExifTool::IsOverwriting($newValueHash, $oldVal)) {
    414                     my $newVal = Image::ExifTool::GetNewValues($newValueHash);
     432                my $nvHash = $exifTool->GetNewValueHash($tagInfo);
     433                if (Image::ExifTool::IsOverwriting($nvHash, $oldVal)) {
     434                    my $newVal = Image::ExifTool::GetNewValues($nvHash);
    415435                    my $verboseVal;
    416436                    $verboseVal = $newVal if $verbose > 1;
     
    422442                        $value = $newVal;
    423443                        ++$exifTool->{CHANGED};
    424                         if ($verbose > 1) {
    425                             my $oldStr = $exifTool->Printable($oldVal);
    426                             my $newStr = $exifTool->Printable($verboseVal);
    427                             print $out "    - CanonRaw:$$tagInfo{Name} = '$oldStr'\n";
    428                             print $out "    + CanonRaw:$$tagInfo{Name} = '$newStr'\n";
    429                         }
     444                        $exifTool->VerboseValue("- CanonRaw:$$tagInfo{Name}", $oldVal);
     445                        $exifTool->VerboseValue("+ CanonRaw:$$tagInfo{Name}", $verboseVal);
    430446                    }
    431447                }
     
    505521    if ($exifTool->{DEL_GROUP}->{MakerNotes}) {
    506522        if ($type eq 'CCDR') {
    507             $exifTool->Error("Can't delete Makernotes group in CRW file");
     523            $exifTool->Error("Can't delete MakerNotes group in CRW file");
    508524            return 0;
    509525        } else {
     
    511527            return 1;
    512528        }
     529    }
     530    # make XMP the preferred group for CRW files
     531    if ($$exifTool{FILE_TYPE} eq 'CRW') {
     532        $exifTool->InitWriteDirs(\%crwMap, 'XMP');
    513533    }
    514534
     
    552572        # add CanonVRD trailer if writing as a block
    553573        $trailPt = $exifTool->AddNewTrailers($trailPt,'CanonVRD');
     574        if (not $trailPt and $$exifTool{ADD_DIRS}{CanonVRD}) {
     575            # create CanonVRD from scratch if necessary
     576            my $outbuff = '';
     577            my $saveOrder = GetByteOrder();
     578            require Image::ExifTool::CanonVRD;
     579            if (Image::ExifTool::CanonVRD::ProcessCanonVRD($exifTool, { OutFile => \$outbuff }) > 0) {
     580                $trailPt = \$outbuff;
     581            }
     582            SetByteOrder($saveOrder);
     583        }
    554584        # write trailer
    555585        if ($trailPt) {
     
    593623=head1 AUTHOR
    594624
    595 Copyright 2003-2007, Phil Harvey (phil at owl.phy.queensu.ca)
     625Copyright 2003-2011, Phil Harvey (phil at owl.phy.queensu.ca)
    596626
    597627This library is free software; you can redistribute it and/or modify it
Note: See TracChangeset for help on using the changeset viewer.