[53227] trunk/dports/graphics/exempi
devans at macports.org
devans at macports.org
Wed Jul 1 11:04:47 PDT 2009
Revision: 53227
http://trac.macports.org/changeset/53227
Author: devans at macports.org
Date: 2009-07-01 11:04:46 -0700 (Wed, 01 Jul 2009)
Log Message:
-----------
exempi: update to version 2.1.1.
Modified Paths:
--------------
trunk/dports/graphics/exempi/Portfile
Removed Paths:
-------------
trunk/dports/graphics/exempi/files/MOV_Handler.cpp
trunk/dports/graphics/exempi/files/patch-bugzilla-20554.diff
Modified: trunk/dports/graphics/exempi/Portfile
===================================================================
--- trunk/dports/graphics/exempi/Portfile 2009-07-01 17:53:08 UTC (rev 53226)
+++ trunk/dports/graphics/exempi/Portfile 2009-07-01 18:04:46 UTC (rev 53227)
@@ -4,7 +4,7 @@
PortSystem 1.0
name exempi
-version 2.1.0
+version 2.1.1
categories graphics
maintainers devans openmaintainer
platforms darwin
@@ -18,28 +18,19 @@
Exempi is an implementation of XMP. Version 2.x is based on Adobe XMP SDK 4.1.1 \
and is released under a BSD-style license like Adobe's.
-checksums md5 30dfa5c394b4a3901c66f6e60e8b22e4 \
- sha1 b85feac36f32b15be17b8d76240b848b8801fbc5 \
- rmd160 4d2734a68ba4eb5522474a3cd4b9e9850c8f5672
+checksums md5 62ecb5a01387b9f940a5429b3df67e65 \
+ sha1 f05a4c1d609c0e3cafdf839c16ec46afae1b160d \
+ rmd160 e79500f804e162df340e669deea620408e4926b4
-# make autoreconf work, should be able to remove once 1.8 ships
-depends_build port:autoconf port:automake port:libtool
-
-patchfiles patch-bugzilla-20554.diff patch-source__common__LargeFileAccess.cpp
+patchfiles patch-source__common__LargeFileAccess.cpp
patch.args -p1
# see http://trac.macports.org/ticket/19894
+
platform darwin 8 {
- patchfiles-delete patch-source__common__LargeFileAccess.cpp
+ patchfiles-delete patch-source__common__LargeFileAccess.cpp
}
-post-patch {
- file copy ${filespath}/MOV_Handler.cpp ${worksrcpath}/source/XMPFiles/FileHandlers
-}
-
-use_autoreconf yes
-autoreconf.args -fvi
-
configure.args --enable-unittest=no
variant unit_test description {Enable unit test} {
Deleted: trunk/dports/graphics/exempi/files/MOV_Handler.cpp
===================================================================
--- trunk/dports/graphics/exempi/files/MOV_Handler.cpp 2009-07-01 17:53:08 UTC (rev 53226)
+++ trunk/dports/graphics/exempi/files/MOV_Handler.cpp 2009-07-01 18:04:46 UTC (rev 53227)
@@ -1,996 +0,0 @@
-// =================================================================================================
-// ADOBE SYSTEMS INCORPORATED
-// Copyright 2002-2008 Adobe Systems Incorporated
-// All Rights Reserved
-//
-// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms
-// of the Adobe license agreement accompanying it.
-// =================================================================================================
-
-#include "XMP_Environment.h" // ! This must be the first include.
-#if ! ( XMP_64 || XMP_UNIXBuild) // Closes at very bottom.
-
-#if XMP_WinBuild
- #pragma warning ( disable : 4996 ) // '...' was declared deprecated
-#endif
-
-#include "MOV_Handler.hpp"
-#include "QuickTime_Support.hpp"
-
-#include "QuickTimeComponents.h"
-
-#if XMP_WinBuild
- #include "QTML.h"
- #include "Movies.h"
-#endif
-
-#if XMP_MacBuild
- #include <Movies.h>
-#endif
-
-using namespace std;
-
-static OSType kXMPUserDataType = 'XMP_';
-static long kXMPUserDataTypeIndex = 1;
-
-static bool CreatorAtom_SetProperties ( SXMPMeta& xmpObj,
- const MOV_MetaHandler::CreatorAtomStrings& creatorAtomStrings );
-
-static bool CreatorAtom_Update ( SXMPMeta& xmpObj, UserData& movieUserData );
-
-static bool CreatorAtom_ReadStrings ( MOV_MetaHandler::CreatorAtomStrings& creatorAtomStrings,
- UserData& movieUserData );
-
-// =================================================================================================
-/// \file MOV_Handler.cpp
-/// \brief File format handler for MOV.
-///
-/// This header ...
-///
-// =================================================================================================
-
-// =================================================================================================
-// MOV_MetaHandlerCTor
-// ===================
-
-XMPFileHandler * MOV_MetaHandlerCTor ( XMPFiles * parent )
-{
- return new MOV_MetaHandler ( parent );
-
-} // MOV_MetaHandlerCTor
-
-// =================================================================================================
-// MOV_CheckFormat
-// ===============
-
-bool MOV_CheckFormat ( XMP_FileFormat format,
- XMP_StringPtr filePath,
- LFA_FileRef fileRef,
- XMPFiles * parent )
-{
- IgnoreParam(format); IgnoreParam(fileRef);
-
- XMP_Assert ( format == kXMP_MOVFile );
- XMP_Assert ( fileRef == 0 );
-
- bool inBackground = XMP_OptionIsSet ( parent->openFlags, kXMPFiles_OpenInBackground );
-
- if ( parent->format != kXMP_MOVFile ) return false; // Check the first call hint, QT is promiscuous.
- if ( ! QuickTime_Support::sMainInitOK ) return false;
-
- if ( inBackground ) {
- if ( ! QuickTime_Support::ThreadInitialize() ) return false;
- }
-
- bool isMov = false;
- OSErr err = noErr;
-
- Handle qtDataRef = 0;
- OSType qtRefType;
- Movie tempMovie = 0;
- short flags;
-
- CFStringRef cfsPath = CFStringCreateWithCString ( 0, filePath, kCFStringEncodingUTF8 );
- if ( cfsPath == 0 ) return false; // ? Throw?
-
- err = QTNewDataReferenceFromFullPathCFString ( cfsPath, kQTNativeDefaultPathStyle, 0, &qtDataRef, &qtRefType );
- if ( err != noErr ) goto EXIT;
-
- flags = newMovieDontResolveDataRefs | newMovieDontAskUnresolvedDataRefs;
- err = NewMovieFromDataRef ( &tempMovie, flags, 0, qtDataRef, qtRefType );
- if ( err != noErr ) goto EXIT;
-
- isMov = true;
-
-EXIT:
-
- if ( tempMovie != 0 ) DisposeMovie ( tempMovie );
- if ( qtDataRef != 0 ) DisposeHandle ( qtDataRef );
- if ( cfsPath != 0 ) CFRelease ( cfsPath );
-
- if ( inBackground && (! isMov) ) QuickTime_Support::ThreadTerminate();
- return isMov;
-
-} // MOV_CheckFormat
-
-// =================================================================================================
-// MOV_MetaHandler::MOV_MetaHandler
-// ================================
-
-MOV_MetaHandler::MOV_MetaHandler ( XMPFiles * _parent )
- : mQTInit(false), mMovieDataRef(0), mMovieDataHandler(0), mMovie(0), mMovieResourceID(0), mFilePermission(0)
-{
-
- this->parent = _parent;
- this->handlerFlags = kMOV_HandlerFlags;
- this->stdCharForm = kXMP_Char8Bit;
-
-} // MOV_MetaHandler::MOV_MetaHandler
-
-// =================================================================================================
-// MOV_MetaHandler::~MOV_MetaHandler
-// =================================
-
-MOV_MetaHandler::~MOV_MetaHandler()
-{
- bool inBackground = XMP_OptionIsSet ( this->parent->openFlags, kXMPFiles_OpenInBackground );
-
- this->CloseMovie();
- if ( inBackground ) QuickTime_Support::ThreadTerminate();
-
-} // MOV_MetaHandler::~MOV_MetaHandler
-
-// =================================================================================================
-// MOV_MetaHandler::ProcessXMP
-// ===========================
-
-void MOV_MetaHandler::ProcessXMP()
-{
- if ( (!this->containsXMP) || this->processedXMP ) return;
-
- if ( this->handlerFlags & kXMPFiles_CanReconcile ) {
- XMP_Throw ( "Reconciling file handlers must implement ProcessXMP", kXMPErr_InternalFailure );
- }
-
- SXMPUtils::RemoveProperties ( &this->xmpObj, 0, 0, kXMPUtil_DoAllProperties );
- this->xmpObj.ParseFromBuffer ( this->xmpPacket.c_str(), (XMP_StringLen)this->xmpPacket.size() );
- this->processedXMP = true;
-
- CreatorAtom_SetProperties ( this->xmpObj, mCreatorAtomStrings );
-
-}
-
-// =================================================================================================
-// MOV_MetaHandler::UpdateFile
-// ===========================
-
-void MOV_MetaHandler::UpdateFile ( bool doSafeUpdate )
-{
- if ( ! this->needsUpdate ) return;
- if ( doSafeUpdate ) XMP_Throw ( "MOV_MetaHandler::UpdateFile: Safe update not supported", kXMPErr_Unavailable );
-
- XMP_StringPtr packetStr = this->xmpPacket.c_str();
- XMP_StringLen packetLen = (XMP_StringLen)this->xmpPacket.size();
-
- if ( packetLen == 0 ) return; // Bail if no XMP packet
-
- if ( this->OpenMovie ( (kDataHCanRead | kDataHCanWrite) ) ) {
-
- UserData movieUserData ( GetMovieUserData ( this->mMovie ) );
- if ( movieUserData != 0 ) {
-
- OSErr err;
-
- // Remove previous versions
- err = GetUserData ( movieUserData, 0, kXMPUserDataType, kXMPUserDataTypeIndex );
- if ( err == noErr ) {
- RemoveUserData(movieUserData, kXMPUserDataType, kXMPUserDataTypeIndex);
- }
-
- // Add the new one
- Handle XMPdata ( NewHandle(packetLen) );
- if ( XMPdata != 0 ) {
- HLock ( XMPdata );
- strncpy ( *XMPdata, packetStr, packetLen ); // AUDIT: Handle created above using packetLen.
- HUnlock ( XMPdata );
- err = AddUserData ( movieUserData, XMPdata, kXMPUserDataType );
- DisposeHandle ( XMPdata );
- }
-
- CreatorAtom_Update ( this->xmpObj, movieUserData );
-
- }
-
- }
-
- this->needsUpdate = false;
-
-} // MOV_MetaHandler::UpdateFile
-
-// =================================================================================================
-// MOV_MetaHandler::WriteFile
-// ==========================
-
-void MOV_MetaHandler::WriteFile ( LFA_FileRef sourceRef,
- const std::string & sourcePath )
-{
- IgnoreParam(sourceRef); IgnoreParam(sourcePath);
-
- XMP_Throw ( "MOV_MetaHandler::WriteFile: Not supported", kXMPErr_Unavailable );
-
-} // MOV_MetaHandler::WriteFile
-
-// =================================================================================================
-// MOV_MetaHandler::OpenMovie
-// ==========================
-
-bool MOV_MetaHandler::OpenMovie ( long inPermission )
-{
- // If the file is already opened with the correct permission, bail
- if ( (inPermission == this->mFilePermission) && (this->mMovie != 0) ) return true;
-
- // If already open, close to open with new permissions
- if ( (this->mMovieDataRef != 0) || (this->mMovieDataHandler != 0) || (this->mMovie != 0) ) this->CloseMovie();
- XMP_Assert ( (this->mMovieDataRef == 0) && (this->mMovieDataHandler == 0) && (this->mMovie == 0) );
-
- OSErr err = noErr;
- OSType qtRefType;
- short flags;
-
- CFStringRef cfsPath = CFStringCreateWithCString ( 0, this->parent->filePath.c_str(), kCFStringEncodingUTF8 );
- if ( cfsPath == 0 ) return false; // ? Throw?
-
- err = QTNewDataReferenceFromFullPathCFString ( cfsPath, kQTNativeDefaultPathStyle, 0,
- &this->mMovieDataRef, &qtRefType );
- if ( err != noErr ) goto FAILURE;
-
- this->mFilePermission = inPermission;
- err = OpenMovieStorage ( this->mMovieDataRef, qtRefType, this->mFilePermission, &this->mMovieDataHandler );
- if ( err != noErr ) goto FAILURE;
-
- flags = newMovieDontAskUnresolvedDataRefs;
- this->mMovieResourceID = 0; // *** Is this the right input value?
- err = NewMovieFromDataRef ( &this->mMovie, flags, &this->mMovieResourceID, this->mMovieDataRef, qtRefType );
- if ( err != noErr ) goto FAILURE;
-
- if ( cfsPath != 0 ) CFRelease ( cfsPath );
- return true;
-
-FAILURE:
-
- if ( this->mMovie != 0 ) DisposeMovie ( this->mMovie );
- if ( this->mMovieDataHandler != 0 ) CloseMovieStorage ( this->mMovieDataHandler );
- if ( this->mMovieDataRef != 0 ) DisposeHandle ( this->mMovieDataRef );
-
- this->mMovie = 0;
- this->mMovieDataHandler = 0;
- this->mMovieDataRef = 0;
-
- if ( cfsPath != 0 ) CFRelease ( cfsPath );
- return false;
-
-} // MOV_MetaHandler::OpenMovie
-
-// =================================================================================================
-// MOV_MetaHandler::CloseMovie
-// ===========================
-
-void MOV_MetaHandler::CloseMovie()
-{
-
- if ( this->mMovie != 0 ) {
- if ( HasMovieChanged ( this->mMovie ) ) { // If the movie has been modified, write it to disk.
- (void) UpdateMovieInStorage ( this->mMovie, this->mMovieDataHandler );
- }
- DisposeMovie ( this->mMovie );
- }
-
- if ( this->mMovieDataHandler != 0 ) CloseMovieStorage ( this->mMovieDataHandler );
- if ( this->mMovieDataRef != 0 ) DisposeHandle ( this->mMovieDataRef );
-
- this->mMovie = 0;
- this->mMovieDataHandler = 0;
- this->mMovieDataRef = 0;
-
-} // MOV_MetaHandler::CloseMovie
-
-// =================================================================================================
-// GetAtomInfo
-// ===========
-
-struct AtomInfo {
- XMP_Int64 atomSize;
- XMP_Uns32 atomType;
- bool hasLargeSize;
-};
-
-enum { // ! Do not rearrange, code depends on this order.
- kBadQT_NoError = 0, // No errors.
- kBadQT_SmallInner = 1, // An extra 1..7 bytes at the end of an inner span.
- kBadQT_LargeInner = 2, // More serious inner garbage, found as invalid atom length.
- kBadQT_SmallOuter = 3, // An extra 1..7 bytes at the end of the file.
- kBadQT_LargeOuter = 4 // More serious EOF garbage, found as invalid atom length.
-};
-typedef XMP_Uns8 QTErrorMode;
-
-static QTErrorMode GetAtomInfo ( const LFA_FileRef qtFile, XMP_Int64 spanSize, int nesting, AtomInfo * info )
-{
- QTErrorMode status = kBadQT_NoError;
- XMP_Uns8 buffer [8];
-
- info->hasLargeSize = false;
-
- LFA_Read ( qtFile, buffer, 8, kLFA_RequireAll ); // Will throw if 8 bytes aren't available.
- info->atomSize = GetUns32BE ( &buffer[0] ); // ! Yes, the initial size is big endian UInt32.
- info->atomType = GetUns32BE ( &buffer[4] );
-
- if ( info->atomSize == 0 ) { // Does the atom extend to EOF?
-
- if ( nesting != 0 ) return kBadQT_LargeInner;
- info->atomSize = spanSize; // This outer atom goes to EOF.
-
- } else if ( info->atomSize == 1 ) { // Does the atom have a 64-bit size?
-
- if ( spanSize < 16 ) { // Is there room in the span for the 16 byte header?
- status = kBadQT_LargeInner;
- if ( nesting == 0 ) status += 2; // Convert to "outer".
- return status;
- }
-
- LFA_Read ( qtFile, buffer, 8, kLFA_RequireAll );
- info->atomSize = (XMP_Int64) GetUns64BE ( &buffer[0] );
- info->hasLargeSize = true;
-
- }
-
- XMP_Assert ( status == kBadQT_NoError );
- return status;
-
-} // GetAtomInfo
-
-// =================================================================================================
-// CheckAtomList
-// =============
-//
-// Check that a sequence of atoms fills a given span. The I/O position must be at the start of the
-// span, it is left just past the span on success. Recursive checks are done for top level 'moov'
-// atoms, and second level 'udta' atoms ('udta' inside 'moov').
-//
-// Checking continues for "small inner" errors. They will be reported if no other kinds of errors
-// are found, otherwise the other error is reported. Checking is immediately aborted for any "large"
-// error. The rationale is that QuickTime can apparently handle small inner errors. They might be
-// arise from updates that shorten an atom by less than 8 bytes. Larger shrinkage should introduce a
-// 'free' atom.
-
-static QTErrorMode CheckAtomList ( const LFA_FileRef qtFile, XMP_Int64 spanSize, int nesting )
-{
- QTErrorMode status = kBadQT_NoError;
- AtomInfo info;
-
- const static XMP_Uns32 moovAtomType = 0x6D6F6F76; // ! Don't use MakeUns32BE, already big endian.
- const static XMP_Uns32 udtaAtomType = 0x75647461;
-
- for ( ; spanSize >= 8; spanSize -= info.atomSize ) {
-
- QTErrorMode atomStatus = GetAtomInfo ( qtFile, spanSize, nesting, &info );
- if ( atomStatus != kBadQT_NoError ) return atomStatus;
-
- XMP_Int64 headerSize = 8;
- if ( info.hasLargeSize ) headerSize = 16;
-
- if ( (info.atomSize < headerSize) || (info.atomSize > spanSize) ) {
- status = kBadQT_LargeInner;
- if ( nesting == 0 ) status += 2; // Convert to "outer".
- return status;
- }
-
- bool doChildren = false;
- if ( (nesting == 0) && (info.atomType == moovAtomType) ) doChildren = true;
- if ( (nesting == 1) && (info.atomType == udtaAtomType) ) doChildren = true;
-
- XMP_Int64 dataSize = info.atomSize - headerSize;
-
- if ( ! doChildren ) {
- LFA_Seek ( qtFile, dataSize, SEEK_CUR );
- } else {
- QTErrorMode innerStatus = CheckAtomList ( qtFile, dataSize, nesting+1 );
- if ( innerStatus > kBadQT_SmallInner ) return innerStatus; // Quit for serious errors.
- if ( status == kBadQT_NoError ) status = innerStatus; // Remember small inner errors.
- }
-
- }
-
- XMP_Assert ( status <= kBadQT_SmallInner ); // Else already returned.
- // ! Make sure inner kBadQT_SmallInner is propagated if this span is OK.
-
- if ( spanSize != 0 ) {
- LFA_Seek ( qtFile, spanSize, SEEK_CUR ); // ! Skip the trailing garbage of this span.
- status = kBadQT_SmallInner;
- if ( spanSize >= 8 ) status = kBadQT_LargeInner;
- if ( nesting == 0 ) status += 2; // Convert to "outer".
- }
-
- return status;
-
-} // CheckAtomList
-
-// =================================================================================================
-// AttemptFileRepair
-// =================
-
-static void AttemptFileRepair ( LFA_FileRef qtFile, XMP_Int64 fileSpace, QTErrorMode status )
-{
-
- switch ( status ) {
- case kBadQT_NoError : return; // Sanity check.
- case kBadQT_SmallInner : return; // Ignore these, QT seems to be able to handle them.
- case kBadQT_LargeInner : XMP_Throw ( "Can't repair QuickTime file", kXMPErr_BadFileFormat );
- case kBadQT_SmallOuter : break; // Truncate file below.
- case kBadQT_LargeOuter : break; // Truncate file below.
- default : XMP_Throw ( "Invalid QuickTime error mode", kXMPErr_InternalFailure );
- }
-
- AtomInfo info;
- XMP_Int64 headerSize;
-
- // Process the top level atoms until an error is found.
-
- LFA_Seek ( qtFile, 0, SEEK_SET );
-
- for ( ; fileSpace >= 8; fileSpace -= info.atomSize ) {
-
- QTErrorMode atomStatus = GetAtomInfo ( qtFile, fileSpace, 0, &info );
-
- headerSize = 8; // ! Set this before checking atomStatus, used after the loop.
- if ( info.hasLargeSize ) headerSize = 16;
-
- if ( atomStatus != kBadQT_NoError ) break;
- if ( (info.atomSize < headerSize) || (info.atomSize > fileSpace) ) break;
-
- XMP_Int64 dataSize = info.atomSize - headerSize;
- LFA_Seek ( qtFile, dataSize, SEEK_CUR );
-
- }
-
- // Truncate the file. If fileSpace >= 8 then the loop exited early due to a bad atom, seek back
- // to the atom's start. Otherwise, the loop exited because no mmore atoms are possible, no seek.
-
- if ( fileSpace >= 8 ) LFA_Seek ( qtFile, -headerSize, SEEK_CUR );
- XMP_Int64 currPos = LFA_Tell ( qtFile );
- LFA_Truncate ( qtFile, currPos );
-
-} // AttemptFileRepair
-
-// =================================================================================================
-// CheckFileStructure
-// ==================
-
-static void CheckFileStructure ( XMPFileHandler * thiz, bool doRepair )
-{
- XMPFiles * parent = thiz->parent;
-
- // Open the disk file so we can look inside and maybe repair.
-
- AutoFile localFile; // ! Don't use parent->fileRef keep this usage private.
- XMP_Assert ( parent->fileRef == 0 ); // The file should not be open yet.
-
- char openMode = 'r';
- if ( doRepair ) openMode = 'w';
- localFile.fileRef = LFA_Open ( parent->filePath.c_str(), openMode );
- if ( localFile.fileRef == 0 ) XMP_Throw ( "Can't open QuickTime file for update checks", kXMPErr_ExternalFailure );
- XMP_Int64 fileSize = LFA_Measure ( localFile.fileRef );
-
- // Check the basic file structure and try to repair if asked.
-
- QTErrorMode status = CheckAtomList ( localFile.fileRef, fileSize, 0 );
-
- if ( status != kBadQT_NoError ) {
- if ( doRepair ) {
- AttemptFileRepair ( localFile.fileRef, fileSize, status ); // Will throw if the attempt fails.
- } else if ( status != kBadQT_SmallInner ) {
- XMP_Throw ( "Ill-formed QuickTime file", kXMPErr_BadFileFormat );
- } else {
- return; // ! Ignore these, QT seems to be able to handle them.
- // *** Might want to throw for check-only, ignore when repairing.
- }
- }
-
-} // CheckFileStructure;
-
-
-// =================================================================================================
-// MOV_MetaHandler::CacheFileData
-// ==============================
-
-void MOV_MetaHandler::CacheFileData()
-{
-
- // Pre-check files opened for update. We've found bugs in Apple's QT code that make slightly
- // ill-formed files unreadable.
-
- XMPFiles * parent = this->parent;
-
- const bool isUpdate = XMP_OptionIsSet ( parent->openFlags, kXMPFiles_OpenForUpdate );
- const bool doRepair = XMP_OptionIsSet ( parent->openFlags, kXMPFiles_OpenRepairFile );
-
- if ( isUpdate ) {
- CheckFileStructure ( this, doRepair ); // Will throw for failure.
- }
-
- // Continue with the usual caching of the file's metadata.
-
- this->containsXMP = false;
-
- if ( this->OpenMovie ( kDataHCanRead ) ) {
-
- UserData movieUserData ( GetMovieUserData ( this->mMovie ) );
- if ( movieUserData != 0 ) {
-
- Handle XMPdataHandle ( NewHandle(0) );
- if ( XMPdataHandle != 0 ) {
-
- OSErr err = GetUserData ( movieUserData, XMPdataHandle, kXMPUserDataType, kXMPUserDataTypeIndex );
- if (err != noErr) { // userDataItemNotFound = -2026
-
- packetInfo.writeable = true; // If no packet found, created packets will be writeable
-
- } else {
-
- // Convert handles data, to std::string raw
- this->xmpPacket.clear();
- size_t dataSize = GetHandleSize ( XMPdataHandle );
- HLock(XMPdataHandle);
- this->xmpPacket.assign ( (const char*)(*XMPdataHandle), dataSize );
- HUnlock ( XMPdataHandle );
-
- this->packetInfo.offset = kXMPFiles_UnknownOffset;
- this->packetInfo.length = (XMP_Int32)dataSize;
- this->containsXMP = true;
-
- CreatorAtom_ReadStrings ( mCreatorAtomStrings, movieUserData );
-
- }
-
- DisposeHandle ( XMPdataHandle );
-
- }
-
- }
-
- }
-
-} // MOV_MetaHandler::CacheFileData
-
-// =================================================================================================
-// =================================================================================================
-
-// *** Could be pulled out, maybe refactored and partly shared with AVI and WAV.
-
-#pragma pack(push,1)
-
-// [TODO] Can we switch to using just a full path here?
-struct FSSpecLegacy
-{
- short vRefNum;
- long parID;
- char name[260]; // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/naming_a_file.asp -- 260 is "old school", 32000 is "new school".
-};
-
-struct CR8R_CreatorAtom
-{
- unsigned long magicLu;
-
- long atom_sizeL; // Size of this structure.
- short atom_vers_majorS; // Major atom version.
- short atom_vers_minorS; // Minor atom version.
-
- // mac
- unsigned long creator_codeLu; // Application code on MacOS.
- unsigned long creator_eventLu; // Invocation appleEvent.
-
- // windows
- char creator_extAC[16]; // Extension allowing registry search to app.
- char creator_flagAC[16]; // Flag passed to app at invocation time.
-
- char creator_nameAC[32]; // Name of the creator application.
-};
-
-typedef CR8R_CreatorAtom** CR8R_CreatorAtomHandle;
-
-typedef enum
-{
- Embed_ExportTypeMovie = 0,
- Embed_ExportTypeStill,
- Embed_ExportTypeAudio,
- Embed_ExportTypeCustom
-}
-Embed_ExportType;
-
-
-struct Embed_ProjectLinkAtom
-{
- // header data
- unsigned long magicLu;
- long atom_sizeL;
- short atom_vers_apiS;
- short atom_vers_codeS;
-
- // the link data
- unsigned long exportType; // See enum. The type of export that generated the file
-
- // [TODO] Can we switch to using just a full path here?
- FSSpecLegacy fullPath; // Full path of the project file
-};
-
-#pragma pack(pop)
-
-// -------------------------------------------------------------------------------------------------
-
-#define kCreatorTool "CreatorTool"
-#define AdobeCreatorAtomVersion_Major 1
-#define AdobeCreatorAtomVersion_Minor 0
-#define AdobeCreatorAtom_Magic 0xBEEFCAFE
-
-#define myCreatorAtom MakeFourCC ( 'C','r','8','r' )
-
-static void CreatorAtom_Initialize ( CR8R_CreatorAtom& creatorAtom )
-{
- memset ( &creatorAtom, 0, sizeof(CR8R_CreatorAtom) );
- creatorAtom.magicLu = AdobeCreatorAtom_Magic;
- creatorAtom.atom_vers_majorS = AdobeCreatorAtomVersion_Major;
- creatorAtom.atom_vers_minorS = AdobeCreatorAtomVersion_Minor;
- creatorAtom.atom_sizeL = sizeof(CR8R_CreatorAtom);
-}
-
-// -------------------------------------------------------------------------------------------------
-
-#define PR_PROJECT_LINK_ATOM_VERS_API 1
-#define PR_PROJECT_LINK_ATOM_VERS_CODE 0
-#define PR_PROJECT_LINK_ATOM_TYPE 'PrmL'
-#define PR_PROJECT_LINK_MAGIC 0x600DF00D // GoodFood
-
-#define myProjectLink MakeFourCC ( 'P','r','m','L')
-
-// -------------------------------------------------------------------------------------------------
-
-static void CreatorAtom_MakeValid ( CR8R_CreatorAtom * creator_atomP )
-{
- // If already valid, no conversion is needed.
- if ( creator_atomP->magicLu == AdobeCreatorAtom_Magic ) return;
-
- Flip4 ( &creator_atomP->magicLu );
- Flip2 ( &creator_atomP->atom_vers_majorS );
- Flip2 ( &creator_atomP->atom_vers_minorS );
-
- Flip4 ( &creator_atomP->atom_sizeL );
- Flip4 ( &creator_atomP->creator_codeLu );
- Flip4 ( &creator_atomP->creator_eventLu );
-
- XMP_Assert ( creator_atomP->magicLu == AdobeCreatorAtom_Magic );
-}
-
-// -------------------------------------------------------------------------------------------------
-
-static void CreatorAtom_ToBE ( CR8R_CreatorAtom * creator_atomP )
-{
- creator_atomP->atom_vers_majorS = MakeUns16BE ( creator_atomP->atom_vers_majorS );
- creator_atomP->atom_vers_minorS = MakeUns16BE ( creator_atomP->atom_vers_minorS );
-
- creator_atomP->magicLu = MakeUns32BE ( creator_atomP->magicLu );
- creator_atomP->atom_sizeL = MakeUns32BE ( creator_atomP->atom_sizeL );
- creator_atomP->creator_codeLu = MakeUns32BE ( creator_atomP->creator_codeLu );
- creator_atomP->creator_eventLu = MakeUns32BE ( creator_atomP->creator_eventLu );
-}
-
-// -------------------------------------------------------------------------------------------------
-
-static void ProjectLinkAtom_MakeValid ( Embed_ProjectLinkAtom * link_atomP )
-{
- // If already valid, no conversion is needed.
- if ( link_atomP->magicLu == PR_PROJECT_LINK_MAGIC ) return;
-
- // do the header
- Flip4 ( &link_atomP->magicLu );
- Flip4 ( &link_atomP->atom_sizeL );
- Flip2 ( &link_atomP->atom_vers_apiS );
- Flip2 ( &link_atomP->atom_vers_codeS );
-
- // do the FSSpec data
- Flip2 ( &link_atomP->fullPath.vRefNum );
- Flip4 ( &link_atomP->fullPath.parID );
-
- XMP_Assert ( link_atomP->magicLu == PR_PROJECT_LINK_MAGIC );
-}
-
-// -------------------------------------------------------------------------------------------------
-
-static void ProjectLinkAtom_Initialize ( Embed_ProjectLinkAtom& epla, Embed_ExportType type,
- const std::string& projectPathString)
-{
-
- memset ( &epla, 0, sizeof(Embed_ProjectLinkAtom) );
-
- epla.magicLu = PR_PROJECT_LINK_MAGIC;
- epla.atom_sizeL = epla.atom_vers_apiS = PR_PROJECT_LINK_ATOM_VERS_API;
- epla.atom_vers_codeS = PR_PROJECT_LINK_ATOM_VERS_CODE;
- epla.atom_sizeL = sizeof(Embed_ProjectLinkAtom);
- epla.exportType = type;
- epla.fullPath.vRefNum = 0;
- epla.fullPath.parID = 0;
-
- strncpy ( epla.fullPath.name, projectPathString.c_str(),
- min ( projectPathString.length(), sizeof(epla.fullPath.name) ) );
-
-}
-
-// -------------------------------------------------------------------------------------------------
-
-static bool Mov_ReadProjectLinkAtom ( UserData& movieUserData, Embed_ProjectLinkAtom* epla )
-{
- Handle PrmLdataHandle ( NewHandle(0) );
- if ( PrmLdataHandle == 0 ) return false;
-
- OSErr err = GetUserData ( movieUserData, PrmLdataHandle, 'PrmL', 1 );
- if ( err != noErr ) return false;
-
- // Convert handles data, to std::string raw
- // std::string PrmLPacket;
- // PrmLPacket.clear();
- size_t dataSize = GetHandleSize ( PrmLdataHandle );
- HLock ( PrmLdataHandle );
-
- bool ok = (dataSize == sizeof(Embed_ProjectLinkAtom));
- if ( ok ) {
- memcpy ( epla, (*PrmLdataHandle), dataSize );
- ProjectLinkAtom_MakeValid ( epla );
- }
-
- HUnlock ( PrmLdataHandle );
- DisposeHandle ( PrmLdataHandle );
-
- return ok;
-
-}
-
-// -------------------------------------------------------------------------------------------------
-
-static bool Mov_ReadCreatorAtom ( UserData& movieUserData, CR8R_CreatorAtom* creatorAtom )
-{
- Handle PrmLdataHandle ( NewHandle(0) );
- if ( PrmLdataHandle == 0 ) return false;
-
- OSErr err = GetUserData ( movieUserData, PrmLdataHandle, 'Cr8r', 1 );
- if ( err != noErr ) return false;
-
- // Convert handles data, to std::string raw
- // std::string PrmLPacket;
- // PrmLPacket.clear();
- size_t dataSize = GetHandleSize ( PrmLdataHandle );
- HLock ( PrmLdataHandle );
-
- bool ok = (sizeof(CR8R_CreatorAtom) == dataSize);
- if ( ok ) {
- memcpy ( creatorAtom, (*PrmLdataHandle), dataSize );
- CreatorAtom_MakeValid ( creatorAtom );
- }
-
- HUnlock ( PrmLdataHandle );
- DisposeHandle ( PrmLdataHandle );
-
- return ok;
-
-}
-
-// -------------------------------------------------------------------------------------------------
-
-static bool Mov_WriteCreatorAtom ( UserData& movieUserData, CR8R_CreatorAtom& creatorAtom, bool mustExist )
-{
- Handle PrmLdataHandle ( NewHandle(sizeof(CR8R_CreatorAtom)) );
- if ( PrmLdataHandle == 0 ) return false;
-
- OSErr err = GetUserData ( movieUserData, PrmLdataHandle, 'Cr8r', 1);
- if ( err == noErr ) {
- while ( ! RemoveUserData ( movieUserData, 'Cr8r', 1 ) ) {};
- } else {
- if ( mustExist ) return false;
- }
-
- // Convert handles data, to std::string raw
- // std::string PrmLPacket;
- // PrmLPacket.clear();
- size_t dataSize = GetHandleSize ( PrmLdataHandle );
- HLock ( PrmLdataHandle );
- memcpy ( (*PrmLdataHandle), &creatorAtom, sizeof(CR8R_CreatorAtom) );
- CreatorAtom_ToBE ( (CR8R_CreatorAtom*)(*PrmLdataHandle) );
- HUnlock ( PrmLdataHandle );
-
- OSErr movieErr = AddUserData ( movieUserData, PrmLdataHandle, 'Cr8r');
-
- DisposeHandle ( PrmLdataHandle );
-
- return movieErr==0;
-}
-
-// -------------------------------------------------------------------------------------------------
-
-#define DoAssignBufferedString(str,buffer) AssignBufferedString ( str, buffer, sizeof(buffer) )
-
-static inline void AssignBufferedString ( std::string & str, const char * buffer, size_t maxLen )
-{
- size_t len;
- for ( len = 0; (len < maxLen) && (buffer[len] != 0); ++len ) { /* empty body */ }
- str.assign ( buffer, len );
-}
-
-// -------------------------------------------------------------------------------------------------
-
-static bool CreatorAtom_ReadStrings ( MOV_MetaHandler::CreatorAtomStrings& creatorAtomStrings,
- UserData& movieUserData )
-{
- Embed_ProjectLinkAtom epla;
- bool ok = Mov_ReadProjectLinkAtom ( movieUserData, &epla );
-
- if ( ok ) {
-
- std::string projectPathString = epla.fullPath.name;
-
- if ( ! projectPathString.empty() ) {
-
- if ( projectPathString[0] == '/' ) {
- creatorAtomStrings.posixProjectPath = projectPathString;
- } else if ( projectPathString.substr(0,4) == std::string("\\\\?\\") ) {
- creatorAtomStrings.uncProjectPath = projectPathString;
- }
-
- switch ( epla.exportType ) {
- case Embed_ExportTypeMovie : creatorAtomStrings.projectRefType = "movie"; break;
- case Embed_ExportTypeStill : creatorAtomStrings.projectRefType = "still"; break;
- case Embed_ExportTypeAudio : creatorAtomStrings.projectRefType = "audio"; break;
- case Embed_ExportTypeCustom : creatorAtomStrings.projectRefType = "custom"; break;
- }
-
- }
-
- }
-
- CR8R_CreatorAtom creatorAtom;
- ok = Mov_ReadCreatorAtom ( movieUserData, &creatorAtom );
-
- if ( ok ) {
-
- char buffer[256];
-
- sprintf ( buffer, "%d", creatorAtom.creator_codeLu );
- creatorAtomStrings.applicationCode = buffer;
-
- sprintf ( buffer, "%d", creatorAtom.creator_eventLu );
- creatorAtomStrings.invocationAppleEvent = buffer;
-
- DoAssignBufferedString ( creatorAtomStrings.extension, creatorAtom.creator_extAC );
- DoAssignBufferedString ( creatorAtomStrings.invocationFlags, creatorAtom.creator_flagAC );
- DoAssignBufferedString ( creatorAtomStrings.creatorTool, creatorAtom.creator_nameAC );
-
- }
-
- return ok;
-
-}
-
-// -------------------------------------------------------------------------------------------------
-
-static bool CreatorAtom_SetProperties ( SXMPMeta& xmpObj,
- const MOV_MetaHandler::CreatorAtomStrings& creatorAtomStrings )
-{
- if ( ! creatorAtomStrings.posixProjectPath.empty() ) {
- xmpObj.SetStructField ( kXMP_NS_CreatorAtom, "macAtom",
- kXMP_NS_CreatorAtom, "posixProjectPath", creatorAtomStrings.posixProjectPath, 0 );
- }
-
- if ( ! creatorAtomStrings.uncProjectPath.empty() ) {
- xmpObj.SetStructField ( kXMP_NS_CreatorAtom, "windowsAtom",
- kXMP_NS_CreatorAtom, "uncProjectPath", creatorAtomStrings.uncProjectPath, 0 );
- }
-
- if ( ! creatorAtomStrings.projectRefType.empty() ) {
- xmpObj.SetStructField ( kXMP_NS_DM, "projectRef", kXMP_NS_DM, "type", creatorAtomStrings.projectRefType.c_str());
- }
-
- if ( ! creatorAtomStrings.applicationCode.empty() ) {
- xmpObj.SetStructField ( kXMP_NS_CreatorAtom, "macAtom",
- kXMP_NS_CreatorAtom, "applicationCode", creatorAtomStrings.applicationCode, 0 );
- }
-
- if ( ! creatorAtomStrings.invocationAppleEvent.empty() ) {
- xmpObj.SetStructField ( kXMP_NS_CreatorAtom, "macAtom",
- kXMP_NS_CreatorAtom, "invocationAppleEvent", creatorAtomStrings.invocationAppleEvent, 0 );
- }
-
- if ( ! creatorAtomStrings.extension.empty() ) {
- xmpObj.SetStructField ( kXMP_NS_CreatorAtom, "windowsAtom",
- kXMP_NS_CreatorAtom, "extension", creatorAtomStrings.extension, 0 );
- }
-
- if ( ! creatorAtomStrings.invocationFlags.empty() ) {
- xmpObj.SetStructField ( kXMP_NS_CreatorAtom, "windowsAtom",
- kXMP_NS_CreatorAtom, "invocationFlags", creatorAtomStrings.invocationFlags, 0 );
- }
-
- if ( ! creatorAtomStrings.creatorTool.empty() ) {
- xmpObj.SetProperty ( kXMP_NS_XMP, "CreatorTool", creatorAtomStrings.creatorTool, 0 );
- }
-
- return ok;
-
-}
-
-// -------------------------------------------------------------------------------------------------
-
-#define EnsureFinalNul(buffer) buffer [ sizeof(buffer) - 1 ] = 0
-
-static bool CreatorAtom_Update ( SXMPMeta& xmpObj,
- UserData& movieUserData )
-{
-
- // Get Creator Atom XMP values.
- bool found = false;
- std::string posixPathString, uncPathString;
- if ( xmpObj.GetStructField ( kXMP_NS_CreatorAtom, "macAtom", kXMP_NS_CreatorAtom, "posixProjectPath", &posixPathString, 0 ) ) found = true;
- if ( xmpObj.GetStructField ( kXMP_NS_CreatorAtom, "windowsAtom", kXMP_NS_CreatorAtom, "uncProjectPath", &uncPathString, 0 ) ) found = true;
-
- std::string applicationCodeString, invocationAppleEventString, extensionString, invocationFlagsString, creatorToolString;
- if ( xmpObj.GetStructField ( kXMP_NS_CreatorAtom, "macAtom", kXMP_NS_CreatorAtom, "applicationCode", &applicationCodeString, 0 ) ) found = true;
- if ( xmpObj.GetStructField ( kXMP_NS_CreatorAtom, "macAtom", kXMP_NS_CreatorAtom, "invocationAppleEvent", &invocationAppleEventString, 0 ) ) found = true;
- if ( xmpObj.GetStructField ( kXMP_NS_CreatorAtom, "windowsAtom", kXMP_NS_CreatorAtom, "extension", &extensionString, 0 ) ) found = true;
- if ( xmpObj.GetStructField ( kXMP_NS_CreatorAtom, "windowsAtom", kXMP_NS_CreatorAtom, "invocationFlags", &invocationFlagsString, 0 ) ) found = true;
- if ( xmpObj.GetProperty ( kXMP_NS_XMP, "CreatorTool", &creatorToolString, 0 ) ) found = true;
-
- // If no Creator Atom information found, don't write anything.
- if ( ! found ) return false;
-
- // Read Legacy Creator Atom.
- unsigned long creatorAtomSize = 0;
- CR8R_CreatorAtom creatorAtomLegacy;
- CreatorAtom_Initialize ( creatorAtomLegacy );
- bool ok = Mov_ReadCreatorAtom ( movieUserData, &creatorAtomLegacy );
-
- // Generate new Creator Atom from XMP.
- CR8R_CreatorAtom creatorAtomViaXMP;
- CreatorAtom_Initialize ( creatorAtomViaXMP );
-
- if ( ! applicationCodeString.empty() ) {
- creatorAtomViaXMP.creator_codeLu = strtoul ( applicationCodeString.c_str(), 0, 0 );
- }
- if ( ! invocationAppleEventString.empty() ) {
- creatorAtomViaXMP.creator_eventLu = strtoul ( invocationAppleEventString.c_str(), 0, 0 );
- }
- if ( ! extensionString.empty() ) {
- strncpy ( creatorAtomViaXMP.creator_extAC, extensionString.c_str(), sizeof(creatorAtomViaXMP.creator_extAC) );
- EnsureFinalNul ( creatorAtomViaXMP.creator_extAC );
- }
- if ( ! invocationFlagsString.empty() ) {
- strncpy ( creatorAtomViaXMP.creator_flagAC, invocationFlagsString.c_str(), sizeof(creatorAtomViaXMP.creator_flagAC) );
- EnsureFinalNul ( creatorAtomViaXMP.creator_flagAC );
- }
- if ( ! creatorToolString.empty() ) {
- strncpy ( creatorAtomViaXMP.creator_nameAC, creatorToolString.c_str(), sizeof(creatorAtomViaXMP.creator_nameAC) );
- EnsureFinalNul ( creatorAtomViaXMP.creator_nameAC );
- }
-
- // Write Creator Atom.
- if ( ok ) {
- // If there's legacy, update if atom generated from XMP doesn't match legacy.
- if ( memcmp ( &creatorAtomViaXMP, &creatorAtomLegacy, sizeof(CR8R_CreatorAtom) ) != 0 ) {
- ok = Mov_WriteCreatorAtom ( movieUserData, creatorAtomViaXMP, true );
- }
- } else {
- // Write completely new atom from XMP.
- ok = Mov_WriteCreatorAtom ( movieUserData, creatorAtomViaXMP, false );
- }
-
- return ok;
-
-}
-
-// =================================================================================================
-
-#endif // XMP_64 || XMP_UNIXBuild
Deleted: trunk/dports/graphics/exempi/files/patch-bugzilla-20554.diff
===================================================================
--- trunk/dports/graphics/exempi/files/patch-bugzilla-20554.diff 2009-07-01 17:53:08 UTC (rev 53226)
+++ trunk/dports/graphics/exempi/files/patch-bugzilla-20554.diff 2009-07-01 18:04:46 UTC (rev 53227)
@@ -1,58 +0,0 @@
-diff --git a/configure.ac b/configure.ac
-index 55320b1..988cca1 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -153,7 +153,7 @@ case $build_vendor in
- apple)
- EXEMPI_PLATFORM_DEF=MAC_ENV
- CPPFLAGS="$CPPFLAGS -I/Developer/Headers/FlatCarbon"
-- LDFLAGS="$LDFLAGS -framework CoreServices"
-+ LDFLAGS="$LDFLAGS -framework CoreServices -framework QuickTime"
- ;;
- *)
- EXEMPI_PLATFORM_DEF=UNIX_ENV
-diff --git a/exempi/Makefile.am b/exempi/Makefile.am
-index 1f4f668..ebec07d 100644
---- a/exempi/Makefile.am
-+++ b/exempi/Makefile.am
-@@ -55,7 +55,7 @@ libexempi_la_LIBADD = $(top_builddir)/source/common/libxmpcommon.la \
- $(top_builddir)/third-party/MD5/libmd5.la \
- -lexpat -lz
- libexempi_la_LDFLAGS = -version-info @EXEMPI_VERSION_INFO@ \
-- -Wl,--retain-symbols-file=$(srcdir)/libexempi.sym
-+ -Wl
-
- EXTRA_DIST = libexempi.sym
-
-diff --git a/source/XMPFiles/FileHandlers/Makefile.am b/source/XMPFiles/FileHandlers/Makefile.am
-index 8235fbb..bc07151 100644
---- a/source/XMPFiles/FileHandlers/Makefile.am
-+++ b/source/XMPFiles/FileHandlers/Makefile.am
-@@ -58,7 +58,7 @@ GIF_Handler.cpp GIF_Handler.hpp\
- InDesign_Handler.cpp InDesign_Handler.hpp\
- JPEG_Handler.cpp JPEG_Handler.hpp\
- MP3_Handler.cpp MP3_Handler.hpp\
--MOV_Handler.hpp\
-+MOV_Handler.cpp MOV_Handler.hpp\
- MPEG2_Handler.cpp MPEG2_Handler.hpp \
- MPEG4_Handler.cpp MPEG4_Handler.hpp \
- P2_Handler.cpp P2_Handler.hpp\
-diff --git a/source/XMPFiles/FormatSupport/Makefile.am b/source/XMPFiles/FormatSupport/Makefile.am
-index d6c8ddd..cc05d66 100644
---- a/source/XMPFiles/FormatSupport/Makefile.am
-+++ b/source/XMPFiles/FormatSupport/Makefile.am
-@@ -38,7 +38,6 @@ noinst_LTLIBRARIES = libformatsupport.la
- noinst_HEADERS = IPTC_Support.hpp PSIR_Support.hpp\
- Reconcile_Impl.hpp RIFF_Support.hpp XMPScanner.hpp\
- ID3_Support.hpp PNG_Support.hpp QuickTime_Support.hpp\
-- QuickTime_Support.cpp\
- ReconcileLegacy.hpp TIFF_Support.hpp GIF_Support.hpp
-
-
-@@ -59,5 +58,6 @@ libformatsupport_la_SOURCES = ID3_Support.cpp PSIR_FileWriter.cpp Reconcile
- SWF_Support.hpp SWF_Support.cpp\
- XDCAM_Support.hpp XDCAM_Support.cpp\
- TIFF_FileWriter.cpp XMPScanner.cpp GIF_Support.cpp \
-+ QuickTime_Support.cpp \
- ASF_Support.hpp ASF_Support.cpp \
- $(NULL)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090701/a897eb1a/attachment-0001.html>
More information about the macports-changes
mailing list