{ * ColorSync - ColorSyncCMM.h * Copyright (c) 2008 Apple Inc. * All rights reserved. } { Pascal Translation: Jonas Maebe, , October 2009 } { Modified for use with Free Pascal Version 308 Please report any bugs to } {$ifc not defined MACOSALLINCLUDE or not MACOSALLINCLUDE} {$mode macpas} {$packenum 1} {$macro on} {$inline on} {$calling mwpascal} unit ColorSyncCMM; interface {$setc UNIVERSAL_INTERFACES_VERSION := $0400} {$setc GAP_INTERFACES_VERSION := $0308} {$ifc not defined USE_CFSTR_CONSTANT_MACROS} {$setc USE_CFSTR_CONSTANT_MACROS := TRUE} {$endc} {$ifc defined CPUPOWERPC and defined CPUI386} {$error Conflicting initial definitions for CPUPOWERPC and CPUI386} {$endc} {$ifc defined FPC_BIG_ENDIAN and defined FPC_LITTLE_ENDIAN} {$error Conflicting initial definitions for FPC_BIG_ENDIAN and FPC_LITTLE_ENDIAN} {$endc} {$ifc not defined __ppc__ and defined CPUPOWERPC32} {$setc __ppc__ := 1} {$elsec} {$setc __ppc__ := 0} {$endc} {$ifc not defined __ppc64__ and defined CPUPOWERPC64} {$setc __ppc64__ := 1} {$elsec} {$setc __ppc64__ := 0} {$endc} {$ifc not defined __i386__ and defined CPUI386} {$setc __i386__ := 1} {$elsec} {$setc __i386__ := 0} {$endc} {$ifc not defined __x86_64__ and defined CPUX86_64} {$setc __x86_64__ := 1} {$elsec} {$setc __x86_64__ := 0} {$endc} {$ifc not defined __arm__ and defined CPUARM} {$setc __arm__ := 1} {$elsec} {$setc __arm__ := 0} {$endc} {$ifc defined cpu64} {$setc __LP64__ := 1} {$elsec} {$setc __LP64__ := 0} {$endc} {$ifc defined __ppc__ and __ppc__ and defined __i386__ and __i386__} {$error Conflicting definitions for __ppc__ and __i386__} {$endc} {$ifc defined __ppc__ and __ppc__} {$setc TARGET_CPU_PPC := TRUE} {$setc TARGET_CPU_PPC64 := FALSE} {$setc TARGET_CPU_X86 := FALSE} {$setc TARGET_CPU_X86_64 := FALSE} {$setc TARGET_CPU_ARM := FALSE} {$setc TARGET_OS_MAC := TRUE} {$setc TARGET_OS_IPHONE := FALSE} {$setc TARGET_IPHONE_SIMULATOR := FALSE} {$elifc defined __ppc64__ and __ppc64__} {$setc TARGET_CPU_PPC := FALSE} {$setc TARGET_CPU_PPC64 := TRUE} {$setc TARGET_CPU_X86 := FALSE} {$setc TARGET_CPU_X86_64 := FALSE} {$setc TARGET_CPU_ARM := FALSE} {$setc TARGET_OS_MAC := TRUE} {$setc TARGET_OS_IPHONE := FALSE} {$setc TARGET_IPHONE_SIMULATOR := FALSE} {$elifc defined __i386__ and __i386__} {$setc TARGET_CPU_PPC := FALSE} {$setc TARGET_CPU_PPC64 := FALSE} {$setc TARGET_CPU_X86 := TRUE} {$setc TARGET_CPU_X86_64 := FALSE} {$setc TARGET_CPU_ARM := FALSE} {$ifc defined(iphonesim)} {$setc TARGET_OS_MAC := FALSE} {$setc TARGET_OS_IPHONE := TRUE} {$setc TARGET_IPHONE_SIMULATOR := TRUE} {$elsec} {$setc TARGET_OS_MAC := TRUE} {$setc TARGET_OS_IPHONE := FALSE} {$setc TARGET_IPHONE_SIMULATOR := FALSE} {$endc} {$elifc defined __x86_64__ and __x86_64__} {$setc TARGET_CPU_PPC := FALSE} {$setc TARGET_CPU_PPC64 := FALSE} {$setc TARGET_CPU_X86 := FALSE} {$setc TARGET_CPU_X86_64 := TRUE} {$setc TARGET_CPU_ARM := FALSE} {$setc TARGET_OS_MAC := TRUE} {$setc TARGET_OS_IPHONE := FALSE} {$setc TARGET_IPHONE_SIMULATOR := FALSE} {$elifc defined __arm__ and __arm__} {$setc TARGET_CPU_PPC := FALSE} {$setc TARGET_CPU_PPC64 := FALSE} {$setc TARGET_CPU_X86 := FALSE} {$setc TARGET_CPU_X86_64 := FALSE} {$setc TARGET_CPU_ARM := TRUE} { will require compiler define when/if other Apple devices with ARM cpus ship } {$setc TARGET_OS_MAC := FALSE} {$setc TARGET_OS_IPHONE := TRUE} {$setc TARGET_IPHONE_SIMULATOR := FALSE} {$elsec} {$error __ppc__ nor __ppc64__ nor __i386__ nor __x86_64__ nor __arm__ is defined.} {$endc} {$ifc defined __LP64__ and __LP64__ } {$setc TARGET_CPU_64 := TRUE} {$elsec} {$setc TARGET_CPU_64 := FALSE} {$endc} {$ifc defined FPC_BIG_ENDIAN} {$setc TARGET_RT_BIG_ENDIAN := TRUE} {$setc TARGET_RT_LITTLE_ENDIAN := FALSE} {$elifc defined FPC_LITTLE_ENDIAN} {$setc TARGET_RT_BIG_ENDIAN := FALSE} {$setc TARGET_RT_LITTLE_ENDIAN := TRUE} {$elsec} {$error Neither FPC_BIG_ENDIAN nor FPC_LITTLE_ENDIAN are defined.} {$endc} {$setc ACCESSOR_CALLS_ARE_FUNCTIONS := TRUE} {$setc CALL_NOT_IN_CARBON := FALSE} {$setc OLDROUTINENAMES := FALSE} {$setc OPAQUE_TOOLBOX_STRUCTS := TRUE} {$setc OPAQUE_UPP_TYPES := TRUE} {$setc OTCARBONAPPLICATION := TRUE} {$setc OTKERNEL := FALSE} {$setc PM_USE_SESSION_APIS := TRUE} {$setc TARGET_API_MAC_CARBON := TRUE} {$setc TARGET_API_MAC_OS8 := FALSE} {$setc TARGET_API_MAC_OSX := TRUE} {$setc TARGET_CARBON := TRUE} {$setc TARGET_CPU_68K := FALSE} {$setc TARGET_CPU_MIPS := FALSE} {$setc TARGET_CPU_SPARC := FALSE} {$setc TARGET_OS_UNIX := FALSE} {$setc TARGET_OS_WIN32 := FALSE} {$setc TARGET_RT_MAC_68881 := FALSE} {$setc TARGET_RT_MAC_CFM := FALSE} {$setc TARGET_RT_MAC_MACHO := TRUE} {$setc TYPED_FUNCTION_POINTERS := TRUE} {$setc TYPE_BOOL := FALSE} {$setc TYPE_EXTENDED := FALSE} {$setc TYPE_LONGLONG := TRUE} uses MacTypes,ColorSyncProfile,ColorSyncTransform,CFBase,CFArray,CFBundle,CFDictionary; {$endc} {not MACOSALLINCLUDE} {$ifc TARGET_OS_MAC} {$ALIGN POWER} { * Notes: * - Color conversions are performed by a Color Management Module (CMM) which is a plugin to ColorSync. * - ColorSync contains Apple CMM, which is not replaceable, but third parties can install their own CMMs * - ColorSync provides access to installed CMMs as well as those that can be part of the application bundle. * - CMM can be selected and specified as a preferred CMM per color transform created by the application * - if the third party CMM fails to perform a task, Apple CMM will take it over * - ColorSyncCMMRef is a light weight wrapper of CFBundleRef * - See /Developer/Examples/ColorSync/DemoCMM } type ColorSyncCMMRef = ^SInt32; { an opaque type } function ColorSyncCMMGetTypeID: CFTypeID; external name '_ColorSyncCMMGetTypeID'; { * returns the CFTypeID for ColorSyncCMMs. } function ColorSyncCMMCreate( cmmBundle: CFBundleRef ): ColorSyncCMMRef; external name '_ColorSyncCMMCreate'; function ColorSyncCMMGetBundle( cmm: ColorSyncCMMRef ): CFBundleRef; external name '_ColorSyncCMMGetBundle'; // will return NULL for built-in Apple CMM function ColorSyncCMMCopyLocalizedName( cmm: ColorSyncCMMRef ): CFStringRef; external name '_ColorSyncCMMCopyLocalizedName'; // needed to get the name of built-in CMM function ColorSyncCMMCopyCMMIdentifier( cmm: ColorSyncCMMRef ): CFStringRef; external name '_ColorSyncCMMCopyCMMIdentifier'; // needed to get the identifier of built-in CMM type ColorSyncCMMIterateCallback = function( cmm: ColorSyncCMMRef; userInfo: UnivPtr ): CBool; { * Note: If the ColorSyncCMMIterateCallback returns false, the iteration stops * } procedure ColorSyncIterateInstalledCMMs( callBack: ColorSyncCMMIterateCallback; userInfo: UnivPtr ); external name '_ColorSyncIterateInstalledCMMs'; { * callBack - pointer to a client provided function * user Info - (optional) pointer to the userIndo to be passed to the callback * } { * ========================================================================================== * This part defines the interface for developers of third party CMMs for ColorSync. * ========================================================================================== } type CMMInitializeLinkProfileProc = function( profile: ColorSyncMutableProfileRef; profileInfo: CFArrayRef; options: CFDictionaryRef ): CBool; type CMMInitializeTransformProc = function( profile: ColorSyncTransformRef; profileInfo: CFArrayRef; options: CFDictionaryRef ): CBool; type CMMApplyTransformProc = function( transform: ColorSyncTransformRef; width: size_t; height: size_t; dstPlanes: size_t; var dst: UnivPtr; dstDepth: ColorSyncDataDepth; dstFormat: ColorSyncDataLayout; dstBytesPerRow: size_t; srcPlanes: size_t; var src: UnivPtr; srcDepth: ColorSyncDataDepth; srcFormat: ColorSyncDataLayout; srcBytesPerRow: size_t; options: CFDictionaryRef ): CBool; type CMMCreateTransformPropertyProc = function( transform: ColorSyncTransformRef; key: CFTypeRef; options: CFDictionaryRef ): CFTypeRef; var kCMMInitializeLinkProfileProcName: CFStringRef; external name '_kCMMInitializeLinkProfileProcName'; (* attribute const *) { CMMInitializeLinkProfileProcName } var kCMMInitializeTransformProcName: CFStringRef; external name '_kCMMInitializeTransformProcName'; (* attribute const *) { CMMInitializeTransformProcName } var kCMMApplyTransformProcName: CFStringRef; external name '_kCMMApplyTransformProcName'; (* attribute const *) { CMMApplyTransformProcName } var kCMMCreateTransformPropertyProcName: CFStringRef; external name '_kCMMCreateTransformPropertyProcName'; (* attribute const *) { CMMCreateTransformPropertyProcName } { * Following keys are expected to be present in the CMM bundle info dictionary: * * Standard Mac OS X bundle keys: * kCFBundleExecutableKey * kCFBundleIdentifierKey * kCFBundleVersionKey * kCFBundleNameKey * * CMM specific keys: * kCMMInitializeLinkProfileProcName - CFStringRef of the name of a CMMInitializeLinkProfile * function implemented in the CMM bundle executable. * * kCMMInitializeTransformProcName - CFStringRef of the name of a CMMInitializeTransform * function implemented in the CMM bundle executable. * * kCMMApplyTransformProcName - CFStringRef of the name of a CMMApplyTransform function * implemented in the CMM bundle executable. * * kCMMCreateTransformPropertyProcName - CFStringRef of the name of a CMMCreateTransformProperty * function implemented in the CMM bundle executable. * Optional. } {$endc} {TARGET_OS_MAC} {$ifc not defined MACOSALLINCLUDE or not MACOSALLINCLUDE} end. {$endc} {not MACOSALLINCLUDE}