Blender  V2.93
dpxlib.c
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * Copyright 1999 - 2002 David Hodson <hodsond@acm.org>
17  */
18 
25 #include "dpxlib.h"
26 #include "logmemfile.h"
27 
28 #include <math.h>
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <sys/types.h>
33 #include <time.h>
34 
35 #include "BLI_fileops.h"
36 #include "BLI_utildefines.h"
37 
38 #include "MEM_guardedalloc.h"
39 
40 /*
41  * For debug purpose
42  */
43 
44 static int verbose = 0;
45 
46 void dpxSetVerbose(int verbosity)
47 {
48  verbose = verbosity;
49 }
50 
51 /*
52  * Headers
53  */
54 
56  DpxMainHeader *header,
57  const char *filename,
58  const char *creator)
59 {
60  time_t fileClock;
61  struct tm *fileTime;
62 
63  memset(header, 0, sizeof(DpxMainHeader));
64 
65  /* --- File header --- */
67  header->fileHeader.offset = swap_uint(dpx->element[0].dataOffset, dpx->isMSB);
68  strcpy(header->fileHeader.version, "V2.0");
69  header->fileHeader.file_size = swap_uint(
70  dpx->element[0].dataOffset + dpx->height * getRowLength(dpx->width, dpx->element[0]),
71  dpx->isMSB);
72  header->fileHeader.ditto_key = 0;
74  sizeof(DpxFileHeader) + sizeof(DpxImageHeader) + sizeof(DpxOrientationHeader), dpx->isMSB);
76  dpx->isMSB);
78  strncpy(header->fileHeader.file_name, filename, 99);
79  header->fileHeader.file_name[99] = 0;
80  fileClock = time(NULL);
81  fileTime = localtime(&fileClock);
82  strftime(header->fileHeader.creation_date, 24, "%Y:%m:%d:%H:%M:%S%Z", fileTime);
83  header->fileHeader.creation_date[23] = 0;
84  strncpy(header->fileHeader.creator, creator, 99);
85  header->fileHeader.creator[99] = 0;
86  header->fileHeader.project[0] = 0;
87  header->fileHeader.copyright[0] = 0;
88  header->fileHeader.key = 0xFFFFFFFF;
89 
90  /* --- Image header --- */
91  header->imageHeader.orientation = 0;
93  header->imageHeader.pixels_per_line = swap_uint(dpx->width, dpx->isMSB);
94  header->imageHeader.lines_per_element = swap_uint(dpx->height, dpx->isMSB);
95 
96  /* Fills element */
97  header->imageHeader.element[0].data_sign = 0;
98  header->imageHeader.element[0].ref_low_data = swap_uint(dpx->element[0].refLowData, dpx->isMSB);
100  dpx->isMSB);
102  dpx->isMSB);
104  dpx->isMSB);
105  header->imageHeader.element[0].descriptor = dpx->element[0].descriptor;
106  header->imageHeader.element[0].transfer = dpx->element[0].transfer;
107  header->imageHeader.element[0].colorimetric = 0;
109  header->imageHeader.element[0].packing = swap_ushort(dpx->element[0].packing, dpx->isMSB);
110  header->imageHeader.element[0].encoding = 0;
111  header->imageHeader.element[0].data_offset = swap_uint(dpx->element[0].dataOffset, dpx->isMSB);
112  header->imageHeader.element[0].line_padding = 0;
113  header->imageHeader.element[0].element_padding = 0;
114  header->imageHeader.element[0].description[0] = 0;
115 
116  /* --- Orientation header --- */
117  /* we leave it blank */
118 
119  /* --- Television header --- */
130  header->televisionHeader.gamma = swap_float(dpx->gamma, dpx->isMSB);
136 }
137 
138 LogImageFile *dpxOpen(const unsigned char *byteStuff, int fromMemory, size_t bufferSize)
139 {
140  DpxMainHeader header;
141  LogImageFile *dpx = (LogImageFile *)MEM_mallocN(sizeof(LogImageFile), __func__);
142  const char *filename = (const char *)byteStuff;
143  int i;
144 
145  if (dpx == NULL) {
146  if (verbose) {
147  printf("DPX: Failed to malloc dpx file structure.\n");
148  }
149  return NULL;
150  }
151 
152  /* zero the header */
153  memset(&header, 0, sizeof(DpxMainHeader));
154 
155  /* for close routine */
156  dpx->file = NULL;
157 
158  if (fromMemory == 0) {
159  /* byteStuff is then the filename */
160  dpx->file = BLI_fopen(filename, "rb");
161  if (dpx->file == NULL) {
162  if (verbose) {
163  printf("DPX: Failed to open file \"%s\".\n", filename);
164  }
165  logImageClose(dpx);
166  return NULL;
167  }
168  /* not used in this case */
169  dpx->memBuffer = NULL;
170  dpx->memCursor = NULL;
171  dpx->memBufferSize = 0;
172  }
173  else {
174  dpx->memBuffer = (unsigned char *)byteStuff;
175  dpx->memCursor = (unsigned char *)byteStuff;
176  dpx->memBufferSize = bufferSize;
177  }
178 
179  if (logimage_fread(&header, sizeof(header), 1, dpx) == 0) {
180  if (verbose) {
181  printf("DPX: Not enough data for header in \"%s\".\n", byteStuff);
182  }
183  logImageClose(dpx);
184  return NULL;
185  }
186 
187  /* endianness determination */
188  if (header.fileHeader.magic_num == swap_uint(DPX_FILE_MAGIC, 1)) {
189  dpx->isMSB = 1;
190  if (verbose) {
191  printf("DPX: File is MSB.\n");
192  }
193  }
194  else if (header.fileHeader.magic_num == DPX_FILE_MAGIC) {
195  dpx->isMSB = 0;
196  if (verbose) {
197  printf("DPX: File is LSB.\n");
198  }
199  }
200  else {
201  if (verbose) {
202  printf("DPX: Bad magic number %u in \"%s\".\n", header.fileHeader.magic_num, byteStuff);
203  }
204  logImageClose(dpx);
205  return NULL;
206  }
207 
208  dpx->srcFormat = format_DPX;
210  size_t max_elements = ARRAY_SIZE(header.imageHeader.element);
211  if (dpx->numElements == 0 || dpx->numElements >= max_elements) {
212  if (verbose) {
213  printf("DPX: Wrong number of elements: %d\n", dpx->numElements);
214  }
215  logImageClose(dpx);
216  return NULL;
217  }
218 
219  dpx->width = swap_uint(header.imageHeader.pixels_per_line, dpx->isMSB);
220  dpx->height = swap_uint(header.imageHeader.lines_per_element, dpx->isMSB);
221 
222  if (dpx->width == 0 || dpx->height == 0) {
223  if (verbose) {
224  printf("DPX: Wrong image dimension: %dx%d\n", dpx->width, dpx->height);
225  }
226  logImageClose(dpx);
227  return NULL;
228  }
229 
230  dpx->depth = 0;
231 
232  for (i = 0; i < dpx->numElements; i++) {
233  dpx->element[i].descriptor = header.imageHeader.element[i].descriptor;
234 
235  switch (dpx->element[i].descriptor) {
236  case descriptor_Red:
237  case descriptor_Green:
238  case descriptor_Blue:
239  case descriptor_Alpha:
242  dpx->depth++;
243  dpx->element[i].depth = 1;
244  break;
245 
246  case descriptor_CbYCrY:
247  dpx->depth += 2;
248  dpx->element[i].depth = 2;
249  break;
250 
251  case descriptor_RGB:
252  case descriptor_CbYCr:
253  case descriptor_CbYACrYA:
254  dpx->depth += 3;
255  dpx->element[i].depth = 3;
256  break;
257 
258  case descriptor_RGBA:
259  case descriptor_ABGR:
260  case descriptor_CbYCrA:
261  dpx->depth += 4;
262  dpx->element[i].depth = 4;
263  break;
264 
265  case descriptor_Depth:
267  /* unsupported */
268  break;
269  }
270 
271  if (dpx->depth == 0 || dpx->depth > 4) {
272  if (verbose) {
273  printf("DPX: Unsupported image depth: %d\n", dpx->depth);
274  }
275  logImageClose(dpx);
276  return NULL;
277  }
278 
280  if (!ELEM(dpx->element[i].bitsPerSample, 1, 8, 10, 12, 16)) {
281  if (verbose) {
282  printf("DPX: Unsupported bitsPerSample for elements %d: %d\n",
283  i,
284  dpx->element[i].bitsPerSample);
285  }
286  logImageClose(dpx);
287  return NULL;
288  }
289 
290  dpx->element[i].maxValue = powf(2, dpx->element[i].bitsPerSample) - 1.0f;
291 
292  dpx->element[i].packing = swap_ushort(header.imageHeader.element[i].packing, dpx->isMSB);
293  if (dpx->element[i].packing > 2) {
294  if (verbose) {
295  printf("DPX: Unsupported packing for element %d: %d\n", i, dpx->element[i].packing);
296  }
297  logImageClose(dpx);
298  return NULL;
299  }
300 
301  /* Sometimes, the offset is not set correctly in the header */
302  dpx->element[i].dataOffset = swap_uint(header.imageHeader.element[i].data_offset, dpx->isMSB);
303  if (dpx->element[i].dataOffset == 0 && dpx->numElements == 1) {
304  dpx->element[i].dataOffset = swap_uint(header.fileHeader.offset, dpx->isMSB);
305  }
306 
307  if (dpx->element[i].dataOffset == 0) {
308  if (verbose) {
309  printf("DPX: Image header is corrupted.\n");
310  }
311  logImageClose(dpx);
312  return NULL;
313  }
314 
315  dpx->element[i].transfer = header.imageHeader.element[i].transfer;
316 
317  /* if undefined, assign default */
318  dpx->element[i].refLowData = swap_uint(header.imageHeader.element[i].ref_low_data, dpx->isMSB);
320  dpx->isMSB);
322  dpx->isMSB);
324  dpx->isMSB);
325 
326  switch (dpx->element[i].descriptor) {
327  case descriptor_Red:
328  case descriptor_Green:
329  case descriptor_Blue:
330  case descriptor_Alpha:
331  case descriptor_RGB:
332  case descriptor_RGBA:
333  case descriptor_ABGR:
334  if (dpx->element[i].refLowData == DPX_UNDEFINED_U32) {
335  dpx->element[i].refLowData = 0;
336  }
337 
338  if (dpx->element[i].refHighData == DPX_UNDEFINED_U32) {
339  dpx->element[i].refHighData = (unsigned int)dpx->element[i].maxValue;
340  }
341 
343  dpx->element[i].refLowQuantity = 0.0f;
344  }
345 
348  dpx->element[i].refHighQuantity = 2.048f;
349  }
350  else {
351  dpx->element[i].refHighQuantity = dpx->element[i].maxValue;
352  }
353  }
354 
355  break;
356 
359  case descriptor_CbYCrY:
360  case descriptor_CbYCr:
361  case descriptor_CbYACrYA:
362  case descriptor_CbYCrA:
363  if (dpx->element[i].refLowData == DPX_UNDEFINED_U32) {
364  dpx->element[i].refLowData = 16.0f / 255.0f * dpx->element[i].maxValue;
365  }
366 
367  if (dpx->element[i].refHighData == DPX_UNDEFINED_U32) {
368  dpx->element[i].refHighData = 235.0f / 255.0f * dpx->element[i].maxValue;
369  }
370 
372  dpx->element[i].refLowQuantity = 0.0f;
373  }
374 
376  dpx->element[i].refHighQuantity = 0.7f;
377  }
378 
379  break;
380 
381  default:
382  break;
383  }
384  }
385 
388  dpx->gamma = swap_float(header.televisionHeader.gamma, dpx->isMSB);
389 
392  (dpx->gamma <= 0 || IS_DPX_UNDEFINED_R32(dpx->gamma))) {
393  dpx->referenceBlack = 95.0f / 1023.0f * dpx->element[0].maxValue;
394  dpx->referenceWhite = 685.0f / 1023.0f * dpx->element[0].maxValue;
395  dpx->gamma = 1.7f;
396  }
397 
398  if (verbose) {
399  printf("size %d x %d x %d elements\n", dpx->width, dpx->height, dpx->numElements);
400  for (i = 0; i < dpx->numElements; i++) {
401  printf(" Element %d:\n", i);
402  printf(" Bits per sample: %d\n", dpx->element[i].bitsPerSample);
403  printf(" Depth: %d\n", dpx->element[i].depth);
404  printf(" Transfer characteristics: %d\n", dpx->element[i].transfer);
405  printf(" Packing: %d\n", dpx->element[i].packing);
406  printf(" Descriptor: %d\n", dpx->element[i].descriptor);
407  printf(" Data offset: %d\n", dpx->element[i].dataOffset);
408  printf(" Reference low data: %u\n", dpx->element[i].refLowData);
409  printf(" Reference low quantity: %f\n", dpx->element[i].refLowQuantity);
410  printf(" Reference high data: %u\n", dpx->element[i].refHighData);
411  printf(" Reference high quantity: %f\n", dpx->element[i].refHighQuantity);
412  printf("\n");
413  }
414 
415  printf("Gamma: %f\n", dpx->gamma);
416  printf("Reference black: %f\n", dpx->referenceBlack);
417  printf("Reference white: %f\n", dpx->referenceWhite);
418  printf("Orientation: %d\n", header.imageHeader.orientation);
419  printf("----------------------------\n");
420  }
421  return dpx;
422 }
423 
424 LogImageFile *dpxCreate(const char *filename,
425  int width,
426  int height,
427  int bitsPerSample,
428  int hasAlpha,
429  int isLogarithmic,
430  int referenceWhite,
431  int referenceBlack,
432  float gamma,
433  const char *creator)
434 {
435  DpxMainHeader header;
436  const char *shortFilename = NULL;
437  unsigned char pad[6044];
438 
439  LogImageFile *dpx = (LogImageFile *)MEM_mallocN(sizeof(LogImageFile), __func__);
440  if (dpx == NULL) {
441  if (verbose) {
442  printf("DPX: Failed to malloc dpx file structure.\n");
443  }
444  return NULL;
445  }
446 
447  dpx->width = width;
448  dpx->height = height;
449  dpx->element[0].bitsPerSample = bitsPerSample;
450  dpx->element[0].dataOffset = 8092;
451  dpx->element[0].maxValue = powf(2, dpx->element[0].bitsPerSample) - 1.0f;
452  dpx->isMSB = 1;
453  dpx->numElements = 1;
454 
455  switch (bitsPerSample) {
456  case 8:
457  case 16:
458  dpx->element[0].packing = 0;
459  break;
460 
461  case 10:
462  case 12:
463  /* Packed Type A padding is the most common 10/12 bits format */
464  dpx->element[0].packing = 1;
465  break;
466 
467  default:
468  if (verbose) {
469  printf("DPX: bitsPerSample not supported: %d\n", bitsPerSample);
470  }
471  logImageClose(dpx);
472  return NULL;
473  }
474 
475  if (hasAlpha == 0) {
476  dpx->depth = 3;
477  dpx->element[0].depth = 3;
479  }
480  else {
481  dpx->depth = 4;
482  dpx->element[0].depth = 4;
484  }
485 
486  if (isLogarithmic == 0) {
487  dpx->element[0].transfer = transfer_Linear;
488  dpx->element[0].refHighQuantity = dpx->element[0].maxValue;
489  }
490  else {
492  dpx->element[0].refHighQuantity = 2.048f;
493  }
494 
495  dpx->element[0].refLowQuantity = 0;
496  dpx->element[0].refLowData = 0;
497  dpx->element[0].refHighData = dpx->element[0].maxValue;
498 
499  if (referenceWhite > 0) {
500  dpx->referenceWhite = referenceWhite;
501  }
502  else {
503  dpx->referenceWhite = 685.0f / 1023.0f * dpx->element[0].maxValue;
504  }
505 
506  if (referenceBlack > 0) {
507  dpx->referenceBlack = referenceBlack;
508  }
509  else {
510  dpx->referenceBlack = 95.0f / 1023.0f * dpx->element[0].maxValue;
511  }
512 
513  if (gamma > 0.0f) {
514  dpx->gamma = gamma;
515  }
516  else {
517  dpx->gamma = 1.7f;
518  }
519 
520  shortFilename = strrchr(filename, '/');
521  if (shortFilename == NULL) {
522  shortFilename = filename;
523  }
524  else {
525  shortFilename++;
526  }
527 
528  dpx->file = BLI_fopen(filename, "wb");
529 
530  if (dpx->file == NULL) {
531  if (verbose) {
532  printf("DPX: Couldn't open file %s\n", filename);
533  }
534  logImageClose(dpx);
535  return NULL;
536  }
537 
538  fillDpxMainHeader(dpx, &header, shortFilename, creator);
539 
540  if (fwrite(&header, sizeof(header), 1, dpx->file) == 0) {
541  if (verbose) {
542  printf("DPX: Couldn't write image header\n");
543  }
544  logImageClose(dpx);
545  return NULL;
546  }
547 
548  /* Header should be rounded to next 8k block
549  * 6044 = 8092 - sizeof(DpxMainHeader) */
550  memset(&pad, 0, 6044);
551  if (fwrite(&pad, 6044, 1, dpx->file) == 0) {
552  if (verbose) {
553  printf("DPX: Couldn't write image header\n");
554  }
555  logImageClose(dpx);
556  return NULL;
557  }
558 
559  return dpx;
560 }
File and directory operations.
FILE * BLI_fopen(const char *filename, const char *mode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition: fileops.c:1003
#define ARRAY_SIZE(arr)
#define ELEM(...)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
Read Guarded memory(de)allocation.
double time
void dpxSetVerbose(int verbosity)
Definition: dpxlib.c:46
static int verbose
Definition: dpxlib.c:44
static void fillDpxMainHeader(LogImageFile *dpx, DpxMainHeader *header, const char *filename, const char *creator)
Definition: dpxlib.c:55
LogImageFile * dpxCreate(const char *filename, int width, int height, int bitsPerSample, int hasAlpha, int isLogarithmic, int referenceWhite, int referenceBlack, float gamma, const char *creator)
Definition: dpxlib.c:424
LogImageFile * dpxOpen(const unsigned char *byteStuff, int fromMemory, size_t bufferSize)
Definition: dpxlib.c:138
#define DPX_UNDEFINED_U32
Definition: dpxlib.h:38
#define DPX_UNDEFINED_U8
Definition: dpxlib.h:36
#define DPX_UNDEFINED_R32
Definition: dpxlib.h:39
#define IS_DPX_UNDEFINED_R32(x)
Definition: dpxlib.h:40
#define DPX_FILE_MAGIC
Definition: dpxlib.h:35
#define powf(x, y)
void logImageClose(LogImageFile *logImage)
Definition: logImageCore.c:190
size_t getRowLength(size_t width, LogImageElement logElement)
Definition: logImageCore.c:212
@ format_DPX
Definition: logImageCore.h:48
@ descriptor_Chrominance
Definition: logImageCore.h:160
@ descriptor_CbYCr
Definition: logImageCore.h:168
@ descriptor_Red
Definition: logImageCore.h:155
@ descriptor_Composite
Definition: logImageCore.h:162
@ descriptor_Depth
Definition: logImageCore.h:161
@ descriptor_CbYCrA
Definition: logImageCore.h:169
@ descriptor_Luminance
Definition: logImageCore.h:159
@ descriptor_Green
Definition: logImageCore.h:156
@ descriptor_ABGR
Definition: logImageCore.h:165
@ descriptor_CbYCrY
Definition: logImageCore.h:166
@ descriptor_Blue
Definition: logImageCore.h:157
@ descriptor_RGB
Definition: logImageCore.h:163
@ descriptor_CbYACrYA
Definition: logImageCore.h:167
@ descriptor_Alpha
Definition: logImageCore.h:158
@ descriptor_RGBA
Definition: logImageCore.h:164
BLI_INLINE float swap_float(float x, int swap)
Definition: logImageCore.h:233
@ transfer_PrintingDensity
Definition: logImageCore.h:113
@ transfer_Linear
Definition: logImageCore.h:114
@ transfer_Logarithmic
Definition: logImageCore.h:115
BLI_INLINE unsigned short swap_ushort(unsigned short x, int swap)
Definition: logImageCore.h:213
BLI_INLINE unsigned int swap_uint(unsigned int x, int swap)
Definition: logImageCore.h:223
int logimage_fread(void *buffer, size_t size, unsigned int count, LogImageFile *logFile)
Definition: logmemfile.c:72
void *(* MEM_mallocN)(size_t len, const char *str)
Definition: mallocn.c:47
unsigned int line_padding
Definition: dpxlib.h:74
unsigned int ref_low_data
Definition: dpxlib.h:63
float ref_high_quantity
Definition: dpxlib.h:66
unsigned int element_padding
Definition: dpxlib.h:75
unsigned int data_offset
Definition: dpxlib.h:73
unsigned char bits_per_sample
Definition: dpxlib.h:70
unsigned short encoding
Definition: dpxlib.h:72
unsigned short packing
Definition: dpxlib.h:71
unsigned char colorimetric
Definition: dpxlib.h:69
unsigned char transfer
Definition: dpxlib.h:68
unsigned int ref_high_data
Definition: dpxlib.h:65
float ref_low_quantity
Definition: dpxlib.h:64
unsigned int data_sign
Definition: dpxlib.h:62
char description[32]
Definition: dpxlib.h:76
unsigned char descriptor
Definition: dpxlib.h:67
unsigned int file_size
Definition: dpxlib.h:47
unsigned int magic_num
Definition: dpxlib.h:44
char copyright[200]
Definition: dpxlib.h:56
char version[8]
Definition: dpxlib.h:46
unsigned int user_data_size
Definition: dpxlib.h:51
unsigned int key
Definition: dpxlib.h:57
unsigned int ind_hdr_size
Definition: dpxlib.h:50
char file_name[100]
Definition: dpxlib.h:52
char project[200]
Definition: dpxlib.h:55
unsigned int offset
Definition: dpxlib.h:45
unsigned int ditto_key
Definition: dpxlib.h:48
unsigned int gen_hdr_size
Definition: dpxlib.h:49
char creation_date[24]
Definition: dpxlib.h:53
char creator[100]
Definition: dpxlib.h:54
DpxElementHeader element[8]
Definition: dpxlib.h:84
unsigned int lines_per_element
Definition: dpxlib.h:83
unsigned int pixels_per_line
Definition: dpxlib.h:82
unsigned short elements_per_image
Definition: dpxlib.h:81
unsigned short orientation
Definition: dpxlib.h:80
DpxFileHeader fileHeader
Definition: dpxlib.h:142
DpxTelevisionHeader televisionHeader
Definition: dpxlib.h:146
DpxImageHeader imageHeader
Definition: dpxlib.h:143
unsigned char interlace
Definition: dpxlib.h:124
unsigned int time_code
Definition: dpxlib.h:122
unsigned char padding
Definition: dpxlib.h:127
float horizontal_sample_rate
Definition: dpxlib.h:128
unsigned int user_bits
Definition: dpxlib.h:123
float vertical_sample_rate
Definition: dpxlib.h:129
unsigned char field_number
Definition: dpxlib.h:125
float integration_times
Definition: dpxlib.h:137
unsigned char video_signal
Definition: dpxlib.h:126
unsigned int refLowData
Definition: logImageCore.h:59
float refLowQuantity
Definition: logImageCore.h:61
float refHighQuantity
Definition: logImageCore.h:62
unsigned int refHighData
Definition: logImageCore.h:60
uintptr_t memBufferSize
Definition: logImageCore.h:82
float referenceWhite
Definition: logImageCore.h:76
unsigned char * memBuffer
Definition: logImageCore.h:81
unsigned char * memCursor
Definition: logImageCore.h:83
LogImageElement element[8]
Definition: logImageCore.h:72
float referenceBlack
Definition: logImageCore.h:75