/*-------------------------------*/
typedef struct _DPXHeader
{
uint32_t magic;
uint32_t image_offset;
uint8_t version[8];
uint32_t file_size;
uint32_t ditto_key;
uint32_t generic_hdr_size;
uint32_t industry_hdr_size;
uint32_t user_data_size;
uint8_t file_name[100];
uint8_t creation_date[24];
uint8_t creator[100];
uint8_t project[200];
uint8_t copyright[200];
uint32_t encrypt_key;
uint8_t reserved[104];
} DPXHeader;
typedef struct DPXImageElement {
uint32_t data_sign;
uint32_t ref_low_data;
float ref_low_quality;
uint32_t ref_high_data;
float ref_high_quality;
uint8_t descriptor;
uint8_t transfer;
uint8_t colorimetric;
uint8_t bit_size;
uint16_t packing;
uint16_t encoding;
uint32_t data_offset;
uint32_t eol_padding;
uint32_t eo_image_padding;
uint8_t description[32];
} DPXImageElement;
typedef struct _ImageHeader {
uint16_t orientation;
uint16_t number_of_elements;
uint32_t img_width; /* pixels_per_line */
uint32_t img_height; /* lines_per_element */
DPXImageElement img_element[8];
uint8_t reserved[52];
} DPXImageHeader;
typedef struct _ImageOrientation {
uint32_t x_offset;
uint32_t y_offset;
float x_center;
float y_center;
uint32_t x_original_size;
uint32_t y_original_size;
uint8_t file_name[100];
uint8_t creation_time[24];
uint8_t input_dev[32];
uint8_t input_serial[32];
uint16_t border[4];
uint32_t pixel_aspect_x;
uint32_t pixel_aspect_y;
uint8_t reserved[28];
} DPXImageOrientation;
typedef struct _FilmHeader {
uint8_t manufacturer_id[2];
uint8_t film_type[2];
uint8_t offset[2];
uint8_t prefix[6];
uint8_t count[4];
uint8_t format[32];
uint32_t frame_position;
uint32_t sequence_len;
uint32_t held_count;
float framerate;
float shutter_angle;
uint8_t frame_id[32];
uint8_t slate_info[100];
uint8_t reserved[56];
} DPXFilmHeader;
typedef union _SMPTETimecode {
struct {
uint8_t hours;
uint8_t minutes;
uint8_t seconds;
uint8_t frames;
};
uint32_t value;
} SMPTETimecode;
typedef struct _TVHeader {
SMPTETimecode timecode;
uint32_t user_bits;
uint8_t interlace;
uint8_t field_num;
uint8_t video_signal;
uint8_t unused;
float horz_sample_rate;
float vert_sample_rate;
float framerate;
float time_offset;
float gamma;
float black_level;
float black_gain;
float break_point;
float white_level;
float integration_times;
uint8_t reserved[76];
} DPXTVHeader;
typedef struct _DPXUserData {
uint8_t user_id[32];
/**
* This can contains any number of data you need
* the size if defined at DPXHeader::user_data_size above
*/
void* pvData;
} DPXUserData;