//----------------------------------------------------------------------------- // // ImageLib Sources // Copyright (C) 2000-2009 by Denton Woods // Last modified: 02/26/2009 // // Filename: src-IL/include/il_dpx.h // // Description: Reads from a Digital Picture Exchange (.dpx) file. // Specifications for this format were found at // http://www.cineon.com/ff_draft.php and // http://www.fileformat.info/format/dpx/. // //----------------------------------------------------------------------------- #ifndef DPX_H #define DPX_H #include "il_internal.h" #ifdef _WIN32 #pragma pack(push, packed_struct, 1) #endif typedef struct R32 { ILubyte r, g, b, a; } IL_PACKSTRUCT R32; #ifdef _WIN32 #pragma pack(pop, packed_struct) #endif typedef struct DPX_FILE_INFO { ILuint MagicNum; /* magic number 0x53445058 (SDPX) or 0x58504453 (XPDS) */ ILuint Offset; /* offset to image data in bytes */ ILbyte Vers[8]; /* which header format version is being used (v1.0)*/ ILuint FileSize; /* file size in bytes */ ILuint DittoKey; /* read time short cut - 0 = same, 1 = new */ ILuint GenHdrSize; /* generic header length in bytes */ ILuint IndHdrSize; /* industry header length in bytes */ ILuint UserDataSize; /* user-defined data length in bytes */ ILbyte FileName[100]; /* image file name */ ILbyte CreateTime[24]; /* file creation date "yyyy:mm:dd:hh:mm:ss:LTZ" */ ILbyte Creator[100]; /* file creator's name */ ILbyte Project[200]; /* project name */ ILbyte Copyright[200]; /* right to use or copyright info */ ILuint Key; /* encryption ( FFFFFFFF = unencrypted ) */ ILbyte Reserved[104]; /* reserved field TBD (need to pad) */ } DPX_FILE_INFO; typedef struct DPX_IMAGE_ELEMENT { ILuint DataSign; /* data sign (0 = unsigned, 1 = signed ) */ /* "Core set images are unsigned" */ ILuint RefLowData; /* reference low data code value */ R32 RefLowQuantity; /* reference low quantity represented */ ILuint RefHighData; /* reference high data code value */ R32 RefHighQuantity;/* reference high quantity represented */ ILubyte Descriptor; /* descriptor for image element */ ILubyte Transfer; /* transfer characteristics for element */ ILubyte Colorimetric; /* colormetric specification for element */ ILubyte BitSize; /* bit size for element */ ILushort Packing; /* packing for element */ ILushort Encoding; /* encoding for element */ ILuint DataOffset; /* offset to data of element */ ILuint EolPadding; /* end of line padding used in element */ ILuint EoImagePadding; /* end of image padding used in element */ ILbyte Description[32];/* description of element */ } DPX_IMAGE_ELEMENT; /* NOTE THERE ARE EIGHT OF THESE */ typedef struct DPX_IMAGE_INFO { ILushort Orientation; /* image orientation */ ILushort NumElements; /* number of image elements */ ILuint Width; /* or x value */ ILuint Height; /* or y value, per element */ DPX_IMAGE_ELEMENT ImageElement[8]; ILubyte reserved[52]; /* reserved for future use (padding) */ } DPX_IMAGE_INFO; typedef struct DPX_IMAGE_ORIENT { ILuint XOffset; /* X offset */ ILuint YOffset; /* Y offset */ R32 XCenter; /* X center */ R32 YCenter; /* Y center */ ILuint XOrigSize; /* X original size */ ILuint YOrigSize; /* Y original size */ ILbyte FileName[100]; /* source image file name */ ILbyte CreationTime[24]; /* source image creation date and time */ ILbyte InputDev[32]; /* input device name */ ILbyte InputSerial[32]; /* input device serial number */ ILushort Border[4]; /* border validity (XL, XR, YT, YB) */ ILuint PixelAspect[2]; /* pixel aspect ratio (H:V) */ ILubyte Reserved[28]; /* reserved for future use (padding) */ } DPX_IMAGE_ORIENT; typedef struct DPX_MOTION_PICTURE_HEAD { ILbyte film_mfg_id[2]; /* film manufacturer ID code (2 digits from film edge code) */ ILbyte film_type[2]; /* file type (2 digits from film edge code) */ ILbyte offset[2]; /* offset in perfs (2 digits from film edge code)*/ ILbyte prefix[6]; /* prefix (6 digits from film edge code) */ ILbyte count[4]; /* count (4 digits from film edge code)*/ ILbyte format[32]; /* format (i.e. academy) */ ILuint frame_position; /* frame position in sequence */ ILuint sequence_len; /* sequence length in frames */ ILuint held_count; /* held count (1 = default) */ R32 frame_rate; /* frame rate of original in frames/sec */ R32 shutter_angle; /* shutter angle of camera in degrees */ ILbyte frame_id[32]; /* frame identification (i.e. keyframe) */ ILbyte slate_info[100]; /* slate information */ ILubyte reserved[56]; /* reserved for future use (padding) */ } DPX_MOTION_PICTURE_HEAD; typedef struct DPX_TELEVISION_HEAD { ILuint tim_code; /* SMPTE time code */ ILuint userBits; /* SMPTE user bits */ ILubyte interlace; /* interlace ( 0 = noninterlaced, 1 = 2:1 interlace*/ ILubyte field_num; /* field number */ ILubyte video_signal; /* video signal standard (table 4)*/ ILubyte unused; /* used for byte alignment only */ R32 hor_sample_rate; /* horizontal sampling rate in Hz */ R32 ver_sample_rate; /* vertical sampling rate in Hz */ R32 frame_rate; /* temporal sampling rate or frame rate in Hz */ R32 time_offset; /* time offset from sync to first pixel */ R32 gamma; /* gamma value */ R32 black_level; /* black level code value */ R32 black_gain; /* black gain */ R32 break_point; /* breakpoint */ R32 white_level; /* reference white level code value */ R32 integration_times; /* integration time(s) */ ILubyte reserved[76]; /* reserved for future use (padding) */ } DPX_TELEVISION_HEAD; // For checking and reading ILboolean iIsValidDpx(void); //ILboolean iCheckDpx(DPXHEAD *Header); ILboolean iLoadDpxInternal(void); #endif//PCX_H