/* File: QuickTimeVRFormat.h Contains: QuickTime VR interfaces Version: QuickTime 7.3 Copyright: (c) 2007 (c) 1997-2007 by Apple Inc., all rights reserved. Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __QUICKTIMEVRFORMAT__ #define __QUICKTIMEVRFORMAT__ #ifndef __CONDITIONALMACROS__ #include #endif #ifndef __MOVIES__ #include #endif #ifndef __QUICKTIMEVR__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=mac68k #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif /* QuickTime is not available to 64-bit clients */ #if !__LP64__ /* File Format Version numbers */ #define kQTVRMajorVersion (2) #define kQTVRMinorVersion (0) /* User data type for the Movie Controller type specifier*/ enum { kQTControllerType = kQTVRControllerSubType, /* Atom & ID of where our*/ kQTControllerID = 1 /* ...controller name is stored*/ }; /* VRWorld atom types*/ enum { kQTVRWorldHeaderAtomType = FOUR_CHAR_CODE('vrsc'), kQTVRImagingParentAtomType = FOUR_CHAR_CODE('imgp'), kQTVRPanoImagingAtomType = FOUR_CHAR_CODE('impn'), kQTVRObjectImagingAtomType = FOUR_CHAR_CODE('imob'), kQTVRNodeParentAtomType = FOUR_CHAR_CODE('vrnp'), kQTVRNodeIDAtomType = FOUR_CHAR_CODE('vrni'), kQTVRNodeLocationAtomType = FOUR_CHAR_CODE('nloc'), kQTVRCursorParentAtomType = FOUR_CHAR_CODE('vrcp'), /* New with 2.1*/ kQTVRCursorAtomType = FOUR_CHAR_CODE('CURS'), /* New with 2.1*/ kQTVRColorCursorAtomType = FOUR_CHAR_CODE('crsr') /* New with 2.1*/ }; /* NodeInfo atom types*/ enum { kQTVRNodeHeaderAtomType = FOUR_CHAR_CODE('ndhd'), kQTVRHotSpotParentAtomType = FOUR_CHAR_CODE('hspa'), kQTVRHotSpotAtomType = FOUR_CHAR_CODE('hots'), kQTVRHotSpotInfoAtomType = FOUR_CHAR_CODE('hsin'), kQTVRLinkInfoAtomType = FOUR_CHAR_CODE('link') }; /* Miscellaneous atom types*/ enum { kQTVRStringAtomType = FOUR_CHAR_CODE('vrsg'), kQTVRStringEncodingAtomType = FOUR_CHAR_CODE('vrse'), /* New with 2.1*/ kQTVRPanoSampleDataAtomType = FOUR_CHAR_CODE('pdat'), kQTVRObjectInfoAtomType = FOUR_CHAR_CODE('obji'), kQTVRImageTrackRefAtomType = FOUR_CHAR_CODE('imtr'), /* Parent is kQTVRObjectInfoAtomType. Required if track ref is not 1 as required by 2.0 format.*/ kQTVRHotSpotTrackRefAtomType = FOUR_CHAR_CODE('hstr'), /* Parent is kQTVRObjectInfoAtomType. Required if track ref is not 1 as required by 2.0 format.*/ kQTVRAngleRangeAtomType = FOUR_CHAR_CODE('arng'), kQTVRTrackRefArrayAtomType = FOUR_CHAR_CODE('tref'), kQTVRPanConstraintAtomType = FOUR_CHAR_CODE('pcon'), kQTVRTiltConstraintAtomType = FOUR_CHAR_CODE('tcon'), kQTVRFOVConstraintAtomType = FOUR_CHAR_CODE('fcon'), kQTVRCubicViewAtomType = FOUR_CHAR_CODE('cuvw'), /* New with 5.0*/ kQTVRCubicFaceDataAtomType = FOUR_CHAR_CODE('cufa') /* New with 5.0*/ }; enum { kQTVRObjectInfoAtomID = 1, kQTVRObjectImageTrackRefAtomID = 1, /* New with 2.1, it adds a track reference to select between multiple image tracks*/ kQTVRObjectHotSpotTrackRefAtomID = 1 /* New with 2.1, it adds a track reference to select between multiple hotspot tracks*/ }; /* Track reference types*/ enum { kQTVRImageTrackRefType = FOUR_CHAR_CODE('imgt'), kQTVRHotSpotTrackRefType = FOUR_CHAR_CODE('hott') }; /* Old hot spot types*/ enum { kQTVRHotSpotNavigableType = FOUR_CHAR_CODE('navg') }; /* Valid bits used in QTVRLinkHotSpotAtom*/ enum { kQTVRValidPan = 1L << 0, kQTVRValidTilt = 1L << 1, kQTVRValidFOV = 1L << 2, kQTVRValidViewCenter = 1L << 3 }; /* Values for flags field in QTVRPanoSampleAtom*/ enum { kQTVRPanoFlagHorizontal = 1L << 0, kQTVRPanoFlagLast = 1L << 31 }; /* Values for locationFlags field in QTVRNodeLocationAtom*/ enum { kQTVRSameFile = 0 }; /* Header for QTVR track's Sample Description record (vrWorld atom container is appended)*/ struct QTVRSampleDescription { UInt32 descSize; /* total size of the QTVRSampleDescription*/ UInt32 descType; /* must be 'qtvr'*/ UInt32 reserved1; /* must be zero*/ UInt16 reserved2; /* must be zero*/ UInt16 dataRefIndex; /* must be zero*/ UInt32 data; /* Will be extended to hold vrWorld QTAtomContainer*/ }; typedef struct QTVRSampleDescription QTVRSampleDescription; typedef QTVRSampleDescription * QTVRSampleDescriptionPtr; typedef QTVRSampleDescriptionPtr * QTVRSampleDescriptionHandle; /* ================================================================================================= Definitions and structures used in the VRWorld QTAtomContainer ------------------------------------------------------------------------------------------------- */ struct QTVRStringAtom { UInt16 stringUsage; UInt16 stringLength; unsigned char theString[4]; /* field previously named "string"*/ }; typedef struct QTVRStringAtom QTVRStringAtom; typedef QTVRStringAtom * QTVRStringAtomPtr; struct QTVRWorldHeaderAtom { UInt16 majorVersion; UInt16 minorVersion; QTAtomID nameAtomID; UInt32 defaultNodeID; UInt32 vrWorldFlags; UInt32 reserved1; UInt32 reserved2; }; typedef struct QTVRWorldHeaderAtom QTVRWorldHeaderAtom; typedef QTVRWorldHeaderAtom * QTVRWorldHeaderAtomPtr; /* Valid bits used in QTVRPanoImagingAtom*/ enum { kQTVRValidCorrection = 1L << 0, kQTVRValidQuality = 1L << 1, kQTVRValidDirectDraw = 1L << 2, kQTVRValidFirstExtraProperty = 1L << 3 }; struct QTVRPanoImagingAtom { UInt16 majorVersion; UInt16 minorVersion; UInt32 imagingMode; UInt32 imagingValidFlags; UInt32 correction; UInt32 quality; UInt32 directDraw; UInt32 imagingProperties[6]; /* for future properties*/ UInt32 reserved1; UInt32 reserved2; }; typedef struct QTVRPanoImagingAtom QTVRPanoImagingAtom; typedef QTVRPanoImagingAtom * QTVRPanoImagingAtomPtr; struct QTVRNodeLocationAtom { UInt16 majorVersion; UInt16 minorVersion; OSType nodeType; UInt32 locationFlags; UInt32 locationData; UInt32 reserved1; UInt32 reserved2; }; typedef struct QTVRNodeLocationAtom QTVRNodeLocationAtom; typedef QTVRNodeLocationAtom * QTVRNodeLocationAtomPtr; /* ================================================================================================= Definitions and structures used in the Nodeinfo QTAtomContainer ------------------------------------------------------------------------------------------------- */ struct QTVRNodeHeaderAtom { UInt16 majorVersion; UInt16 minorVersion; OSType nodeType; QTAtomID nodeID; QTAtomID nameAtomID; QTAtomID commentAtomID; UInt32 reserved1; UInt32 reserved2; }; typedef struct QTVRNodeHeaderAtom QTVRNodeHeaderAtom; typedef QTVRNodeHeaderAtom * QTVRNodeHeaderAtomPtr; struct QTVRAngleRangeAtom { Float32 minimumAngle; Float32 maximumAngle; }; typedef struct QTVRAngleRangeAtom QTVRAngleRangeAtom; typedef QTVRAngleRangeAtom * QTVRAngleRangeAtomPtr; struct QTVRHotSpotInfoAtom { UInt16 majorVersion; UInt16 minorVersion; OSType hotSpotType; QTAtomID nameAtomID; QTAtomID commentAtomID; SInt32 cursorID[3]; /* canonical view for this hot spot*/ Float32 bestPan; Float32 bestTilt; Float32 bestFOV; QTVRFloatPoint bestViewCenter; /* Bounding box for this hot spot*/ Rect hotSpotRect; UInt32 flags; UInt32 reserved1; UInt32 reserved2; }; typedef struct QTVRHotSpotInfoAtom QTVRHotSpotInfoAtom; typedef QTVRHotSpotInfoAtom * QTVRHotSpotInfoAtomPtr; struct QTVRLinkHotSpotAtom { UInt16 majorVersion; UInt16 minorVersion; UInt32 toNodeID; UInt32 fromValidFlags; Float32 fromPan; Float32 fromTilt; Float32 fromFOV; QTVRFloatPoint fromViewCenter; UInt32 toValidFlags; Float32 toPan; Float32 toTilt; Float32 toFOV; QTVRFloatPoint toViewCenter; Float32 distance; UInt32 flags; UInt32 reserved1; UInt32 reserved2; }; typedef struct QTVRLinkHotSpotAtom QTVRLinkHotSpotAtom; typedef QTVRLinkHotSpotAtom * QTVRLinkHotSpotAtomPtr; /* ================================================================================================= Definitions and structures used in Panorama and Object tracks ------------------------------------------------------------------------------------------------- */ struct QTVRPanoSampleAtom { UInt16 majorVersion; UInt16 minorVersion; UInt32 imageRefTrackIndex; /* track reference index of the full res image track*/ UInt32 hotSpotRefTrackIndex; /* track reference index of the full res hot spot track*/ Float32 minPan; Float32 maxPan; Float32 minTilt; Float32 maxTilt; Float32 minFieldOfView; Float32 maxFieldOfView; Float32 defaultPan; Float32 defaultTilt; Float32 defaultFieldOfView; /* Info for highest res version of image track*/ UInt32 imageSizeX; /* pixel width of the panorama (e.g. 768)*/ UInt32 imageSizeY; /* pixel height of the panorama (e.g. 2496)*/ UInt16 imageNumFramesX; /* diced frames wide (e.g. 1)*/ UInt16 imageNumFramesY; /* diced frames high (e.g. 24)*/ /* Info for highest res version of hotSpot track*/ UInt32 hotSpotSizeX; /* pixel width of the hot spot panorama (e.g. 768)*/ UInt32 hotSpotSizeY; /* pixel height of the hot spot panorama (e.g. 2496)*/ UInt16 hotSpotNumFramesX; /* diced frames wide (e.g. 1)*/ UInt16 hotSpotNumFramesY; /* diced frames high (e.g. 24)*/ UInt32 flags; OSType panoType; UInt32 reserved2; }; typedef struct QTVRPanoSampleAtom QTVRPanoSampleAtom; typedef QTVRPanoSampleAtom * QTVRPanoSampleAtomPtr; /* View atom for cubes (since same fields in QTVRPanoSampleAtom are set to special values for backwards compatibility and hence are ignored by the cubic engine) */ struct QTVRCubicViewAtom { Float32 minPan; Float32 maxPan; Float32 minTilt; Float32 maxTilt; Float32 minFieldOfView; Float32 maxFieldOfView; Float32 defaultPan; Float32 defaultTilt; Float32 defaultFieldOfView; }; typedef struct QTVRCubicViewAtom QTVRCubicViewAtom; typedef QTVRCubicViewAtom * QTVRCubicViewAtomPtr; struct QTVRCubicFaceData { Float32 orientation[4]; /* WXYZ quaternion of absolute orientation*/ Float32 center[2]; /* Center of image relative to center of projection (default = (0,0)) in normalized units*/ Float32 aspect; /* aspect>1 => tall pixels; aspect <1 => squat pixels (default = 1)*/ Float32 skew; /* skew x by y (default = 0)*/ }; typedef struct QTVRCubicFaceData QTVRCubicFaceData; typedef QTVRCubicFaceData * QTVRCubicFaceDataPtr; /* Special resolution values for the Image Track Reference Atoms. Use only one value per track reference.*/ enum { kQTVRFullTrackRes = kQTVRFullRes, kQTVRHalfTrackRes = kQTVRHalfRes, kQTVRQuarterTrackRes = kQTVRQuarterRes, kQTVRPreviewTrackRes = 0x8000 }; struct QTVRTrackRefEntry { UInt32 trackRefType; UInt16 trackResolution; UInt32 trackRefIndex; }; typedef struct QTVRTrackRefEntry QTVRTrackRefEntry; /* ================================================================================================= Object File format 2.0 ------------------------------------------------------------------------------------------------- */ enum { kQTVRObjectAnimateViewFramesOn = (1L << 0), kQTVRObjectPalindromeViewFramesOn = (1L << 1), kQTVRObjectStartFirstViewFrameOn = (1L << 2), kQTVRObjectAnimateViewsOn = (1L << 3), kQTVRObjectPalindromeViewsOn = (1L << 4), kQTVRObjectSyncViewToFrameRate = (1L << 5), kQTVRObjectDontLoopViewFramesOn = (1L << 6), kQTVRObjectPlayEveryViewFrameOn = (1L << 7), kQTVRObjectStreamingViewsOn = (1L << 8) }; enum { kQTVRObjectWrapPanOn = (1L << 0), kQTVRObjectWrapTiltOn = (1L << 1), kQTVRObjectCanZoomOn = (1L << 2), kQTVRObjectReverseHControlOn = (1L << 3), kQTVRObjectReverseVControlOn = (1L << 4), kQTVRObjectSwapHVControlOn = (1L << 5), kQTVRObjectTranslationOn = (1L << 6) }; enum { kGrabberScrollerUI = 1, /* "Object" */ kOldJoyStickUI = 2, /* "1.0 Object as Scene" */ kJoystickUI = 3, /* "Object In Scene"*/ kGrabberUI = 4, /* "Grabber only"*/ kAbsoluteUI = 5 /* "Absolute pointer"*/ }; struct QTVRObjectSampleAtom { UInt16 majorVersion; /* kQTVRMajorVersion*/ UInt16 minorVersion; /* kQTVRMinorVersion*/ UInt16 movieType; /* ObjectUITypes*/ UInt16 viewStateCount; /* The number of view states 1 based*/ UInt16 defaultViewState; /* The default view state number. The number must be 1 to viewStateCount*/ UInt16 mouseDownViewState; /* The mouse down view state. The number must be 1 to viewStateCount*/ UInt32 viewDuration; /* The duration of each view including all animation frames in a view*/ UInt32 columns; /* Number of columns in movie*/ UInt32 rows; /* Number rows in movie*/ Float32 mouseMotionScale; /* 180.0 for kStandardObject or kQTVRObjectInScene, actual degrees for kOldNavigableMovieScene.*/ Float32 minPan; /* Start horizontal pan angle in degrees*/ Float32 maxPan; /* End horizontal pan angle in degrees*/ Float32 defaultPan; /* Initial horizontal pan angle in degrees (poster view)*/ Float32 minTilt; /* Start vertical pan angle in degrees*/ Float32 maxTilt; /* End vertical pan angle in degrees*/ Float32 defaultTilt; /* Initial vertical pan angle in degrees (poster view) */ Float32 minFieldOfView; /* minimum field of view setting (appears as the maximum zoom effect) must be >= 1*/ Float32 fieldOfView; /* the field of view range must be >= 1*/ Float32 defaultFieldOfView; /* must be in minFieldOfView and maxFieldOfView range inclusive*/ Float32 defaultViewCenterH; Float32 defaultViewCenterV; Float32 viewRate; Float32 frameRate; UInt32 animationSettings; /* 32 reserved bit fields*/ UInt32 controlSettings; /* 32 reserved bit fields*/ }; typedef struct QTVRObjectSampleAtom QTVRObjectSampleAtom; typedef QTVRObjectSampleAtom * QTVRObjectSampleAtomPtr; /* ================================================================================================= QuickTime VR Authoring Components ------------------------------------------------------------------------------------------------- */ /* ComponentDescription constants for QTVR Export components (componentType = MovieExportType; componentSubType = MovieFileType) */ enum { kQTVRFlattenerManufacturer = FOUR_CHAR_CODE('vrwe'), /* aka QTVRFlattenerType*/ kQTVRSplitterManufacturer = FOUR_CHAR_CODE('vrsp'), kQTVRObjExporterManufacturer = FOUR_CHAR_CODE('vrob') }; /* QuickTime VR Flattener atom types*/ enum { kQTVRFlattenerSettingsParentAtomType = FOUR_CHAR_CODE('VRWe'), /* parent of settings atoms (other than compression)*/ kQTVRFlattenerPreviewResAtomType = FOUR_CHAR_CODE('PRes'), /* preview resolution Int16*/ kQTVRFlattenerImportSpecAtomType = FOUR_CHAR_CODE('ISpe'), /* import file spec FSSpec*/ kQTVRFlattenerCreatePreviewAtomType = FOUR_CHAR_CODE('Prev'), /* Boolean*/ kQTVRFlattenerImportPreviewAtomType = FOUR_CHAR_CODE('IPre'), /* Boolean*/ kQTVRFlattenerBlurPreviewAtomType = FOUR_CHAR_CODE('Blur') /* Boolean*/ }; /* QuickTime VR Splitter atom types*/ enum { kQTVRSplitterSettingsParentAtomType = FOUR_CHAR_CODE('VRSp'), /* parent of settings atoms (other than compression)*/ kQTVRSplitterGenerateHTMLAtomType = FOUR_CHAR_CODE('Ghtm'), /* Boolean*/ kQTVRSplitterOverwriteFilesAtomType = FOUR_CHAR_CODE('Owfi'), /* Boolean*/ kQTVRSplitterUseFlattenerAtomType = FOUR_CHAR_CODE('Usef'), /* Boolean*/ kQTVRSplitterShowControllerAtomType = FOUR_CHAR_CODE('Shco'), /* Boolean*/ kQTVRSplitterTargetMyselfAtomType = FOUR_CHAR_CODE('Tgtm') /* Boolean*/ }; /* QuickTime VR Object Exporter atom types*/ enum { kQTVRObjExporterSettingsBlockSize = FOUR_CHAR_CODE('bsiz'), /* block size for compression*/ kQTVRObjExporterSettingsTargetSize = FOUR_CHAR_CODE('tsiz') /* target file size*/ }; #if OLDROUTINENAMES typedef QTVRStringAtom VRStringAtom; typedef QTVRWorldHeaderAtom VRWorldHeaderAtom; typedef QTVRPanoImagingAtom VRPanoImagingAtom; typedef QTVRNodeLocationAtom VRNodeLocationAtom; typedef QTVRNodeHeaderAtom VRNodeHeaderAtom; typedef QTVRAngleRangeAtom VRAngleRangeAtom; typedef QTVRHotSpotInfoAtom VRHotSpotInfoAtom; typedef QTVRLinkHotSpotAtom VRLinkHotSpotAtom; typedef QTVRPanoSampleAtom VRPanoSampleAtom; typedef QTVRTrackRefEntry VRTrackRefEntry; typedef QTVRObjectSampleAtom VRObjectSampleAtom; #endif /* OLDROUTINENAMES */ #endif // !__LP64__ #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __QUICKTIMEVRFORMAT__ */