|
|
/*
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 <ConditionalMacros.h>
#endif
#ifndef __MOVIES__
#include <Movies.h>
#endif
#ifndef __QUICKTIMEVR__
#include <QuickTimeVR.h>
#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__ */
|