/*
 	File:		ImageCodec.r
 
 	Contains:	QuickTime interfaces
 
 	Version:	Technology:	
 				Release:	QuickTime 4.0
 
 	Copyright:	© 1990-1998 by Apple Computer, Inc., all rights reserved
 
 	Bugs?:		For bug reports, consult the following page on
 				the World Wide Web:
 
 					http://developer.apple.com/bugreporter/
 
*/

#ifndef __IMAGECODEC_R__
#define __IMAGECODEC_R__

#ifndef __CONDITIONALMACROS_R__
#include "ConditionalMacros.r"
#endif

#include "Components.r"
#include "ImageCompression.r"
#define kParameterTitleName 			'name'
#define kParameterTitleID 				1

#define kParameterWhatName 				'what'
#define kParameterWhatID 				1

#define kParameterVersionName 			'vers'
#define kParameterVersionID 			1

#define kParameterRepeatableName 		'pete'
#define kParameterRepeatableID 			1


	#define kParameterRepeatableTrue	long { "1" }
	#define kParameterRepeatableFalse	long { "0" }

#define kParameterAlternateCodecName 	'subs'
#define kParameterAlternateCodecID 		1

#define kParameterSourceCountName 		'srcs'
#define kParameterSourceCountID 		1

#define kParameterDependencyName 		'deep'
#define kParameterDependencyID 			1


	#define kParameterListDependsUponColorProfiles	OSType { "prof" }
	#define kParameterListDependsUponFonts			OSType { "font" }

#define kParameterEnumList 				'enum'
#define kParameterAtomTypeAndID 		'type'

		#define kNoAtom 						OSType { "none" }
		#define kAtomNoFlags 					long { "0" }
		#define kAtomNotInterpolated 			long { "1" }
		#define kAtomInterpolateIsOptional 		long { "2" }
		#define kAtomMayBeIndexed		 		long { "4" }
		#define kAtomNotInterpMayBeIndexed		long { "5" }
		#define kAtomOptionalInterpMayBeIndexed	long { "6" }

#define kParameterDataType 				'data'

		#define kParameterTypeDataLong 		long { "2" }
		#define kParameterTypeDataFixed 	long { "3" }
		#define kParameterTypeDataRGBValue 	long { "8" }
		#define kParameterTypeDataDouble 	long { "11" }
		#define kParameterTypeDataText 		OSType { "text" }
		#define kParameterTypeDataEnum		OSType { "enum" }
		#define kParameterTypeDataBitField 	OSType { "bool" }
		#define kParameterTypeDataImage		OSType { "imag" }

#define kParameterDataRange 			'rang'

		#define kParameterImageNoFlags		long { "0" }
		#define kParameterImageIsPreset		long { "1" }


		#define kStandardPresetGroup		OSType { "pset" }

#define kParameterDataBehavior 			'ditl'

	// items edited via typing
		#define kParameterItemEditText 		OSType { "edit" }
		#define kParameterItemEditLong 		OSType { "long" }
		#define kParameterItemEditFixed 	OSType { "fixd" }
		#define kParameterItemEditDouble 	OSType { "doub" }

	// items edited via control(s)
		#define kParameterItemPopUp 		OSType { "popu" }
		#define kParameterItemRadioCluster 	OSType { "radi" }
		#define kParameterItemCheckBox 		OSType { "chex" }
		#define kParameterItemControl 		OSType { "cntl" }
		
	// special user items
		#define kParameterItemLine 			OSType { "line" }
		#define kParameterItemColorPicker 	OSType { "pick" }
		#define kParameterItemGroupDivider	OSType { "divi" }
		#define kParameterItemStaticText	OSType { "stat" }
		#define kParameterItemDragImage		OSType { "imag" }



		// flags valid for lines and groups
		#define kGraphicsNoFlags 			long { "0" }
		#define kGraphicsFlagsGray 			long { "1" }

		// flags valid for groups
		#define kGroupNoFlags 						long { "0" }
		#define kGroupAlignText 					long { "65536" }
		#define kGroupSurroundBox 					long { "131072" }
		#define kGroupMatrix 						long { "262144" }
		#define kGroupNoName						long { "524288" }
		#define kGroupSurroundWithGray				long { "131073" }
		#define kGroupSurroundWithGrayAlign			long { "196609" }
		#define kGroupSurroundWithGrayNoName		long { "655361" }
		#define kGroupSurroundWithGrayAlignNoName	long { "720897" }
		#define kGroupAlignTextNoName				long { "589824" }
		
		// flags valid for popup/radiocluster/checkbox/control
		#define kDisableControl			long { "1" }
		#define kDisableWhenNotEqual	long { "1" }
		#define kDisableWhenEqual		long { "17" }
		#define kDisableWhenLessThan	long { "33" }
		#define kDisableWhenGreaterThan	long { "49" }

		// flags valid for popups
		#define kPopupStoreAsString		long { "65536" }

#define kParameterDataUsage 			'use '

		#define kParameterUsagePixels			OSType { "pixl" }
		#define kParameterUsageRectangle		OSType { "rect" }
		#define kParameterUsagePoint			OSType { "xy  " }
		#define kParameterUsage3DPoint			OSType { "xyz " }
		#define kParameterUsageDegrees			OSType { "degr" }
		#define kParameterUsageRadians			OSType { "rads" }
		#define kParameterUsagePercent			OSType { "pcnt" }
		#define kParameterUsageSeconds			OSType { "secs" }
		#define kParameterUsageMilliseconds		OSType { "msec" }
		#define kParameterUsageMicroseconds		OSType { "µsec" }
		#define kParameterUsage3by3Matrix		OSType { "3by3" }
		#define kParameterUsageCircularDegrees	OSType { "degc" }
		#define kParameterUsageCircularRadians	OSType { "radc" }

#define kParameterDataDefaultItem 		'dflt'
#define kParameterInfoLongName 			'©nam'
#define kParameterInfoCopyright 		'©cpy'
#define kParameterInfoDescription 		'©inf'
#define kParameterInfoWindowTitle 		'©wnt'
#define kParameterInfoPicture 			'©pix'
#define kParameterInfoManufacturer 		'©man'
#define kParameterInfoIDs 				1


type 'cdec' {
	hex string;
};


type 'cdci' {
	pstring[31];
	hex integer	version;
	hex integer	revlevel;
	hex longint	vendor;
	hex longint	decompressFlags;
	hex longint	compressFlags;
	hex longint	formatFlags;
	byte		compressionAccuracy;
	byte		decompressionAccuracy;
	integer		compressionSpeed;
	integer		decompressionSpeed;
	byte		compressionLevel;
	byte		resvd;
	integer		minimumHeight;
	integer		minimumWidth;
	integer		decompressPipelineLatency;
	integer		compressPipelineLatency;
	longint		privateData;
};


#define	compressorComponentType			'imco'
#define	decompressorComponentType		'imdc'


/* Resource type used for the creation of parameter description atoms */
type 'atms' {
	longint;	// root atom count
	
	array AtomArray {
		literal longint;		// atomType
		longint;				// atomID
		longint noChildren = 0;	// children
		longint =  $$CountOf(AtomData);
		array AtomData {
			switch {
			case long:
				key literal longint = 'long';
				pstring;			// data
			case short:
				key literal longint = 'shrt';
				pstring;			// data
			case noMininumFixed:
				key literal longint = 'nmiF';
				pstring = "";		// data
			case noMaximumFixed:
				key literal longint = 'nmaF';
				pstring = "";		// data
			case noMininumDouble:
				key literal longint = 'nmiD';
				pstring = "";		// data
			case noMaximumDouble:
				key literal longint = 'nmaD';
				pstring = "";		// data
			case fixed:
				key literal longint = 'fixd';
				pstring;			// data
			case double:
				key literal longint = 'doub';
				pstring;			// data
			case string:
				key literal longint = 'str ';
				pstring;			// data
			case lstring:
				key literal longint = 'lstr';
	LongStringStart:	longint = ((LongStringEnd[$$ArrayIndex(AtomArray),$$ArrayIndex(AtomData)] - LongStringStart[$$ArrayIndex(AtomArray),$$ArrayIndex(AtomData)]) >> 3) - 4;
				hex string [$$Word(LongStringStart[$$ArrayIndex(AtomArray),$$ArrayIndex(AtomData)]) - 4];
	LongStringEnd:
			case OSType:
				key literal longint = 'osty';
				pstring;			// data
			};
			
		};
	};
};

/* used by decompressors to list their AVI file four cc's */
type 'avvd' {
	array {
		literal longint;					/* avi four cc type */
	};
};

/* used by compressors to list their AVI file four cc's */
type 'avvc' {
	array {
		literal longint;					/* avi four cc type */
	};
};

/* used by compressors to list their supported compress pixel format surfaces */
type 'cpix' {
	array {
		literal longint;
	};
};


#endif /* __IMAGECODEC_R__ */

