Fix DPX image output having invalid float metadata
Casting 0xFFFFFFFF to float does not give NaN as is needed here. Found through compiler warning which is now fixed.
This commit is contained in:
parent
b14b57fc05
commit
4f25e168a2
|
@ -123,16 +123,16 @@ static void fillDpxMainHeader(LogImageFile *dpx,
|
|||
header->televisionHeader.field_number = DPX_UNDEFINED_U8;
|
||||
header->televisionHeader.video_signal = DPX_UNDEFINED_U8;
|
||||
header->televisionHeader.padding = DPX_UNDEFINED_U8;
|
||||
header->televisionHeader.horizontal_sample_rate = DPX_UNDEFINED_R32;
|
||||
header->televisionHeader.vertical_sample_rate = DPX_UNDEFINED_R32;
|
||||
header->televisionHeader.frame_rate = DPX_UNDEFINED_R32;
|
||||
header->televisionHeader.time_offset = DPX_UNDEFINED_R32;
|
||||
header->televisionHeader.horizontal_sample_rate = swap_float(DPX_UNDEFINED_R32, dpx->isMSB);
|
||||
header->televisionHeader.vertical_sample_rate = swap_float(DPX_UNDEFINED_R32, dpx->isMSB);
|
||||
header->televisionHeader.frame_rate = swap_float(DPX_UNDEFINED_R32, dpx->isMSB);
|
||||
header->televisionHeader.time_offset = swap_float(DPX_UNDEFINED_R32, dpx->isMSB);
|
||||
header->televisionHeader.gamma = swap_float(dpx->gamma, dpx->isMSB);
|
||||
header->televisionHeader.black_level = swap_float(dpx->referenceBlack, dpx->isMSB);
|
||||
header->televisionHeader.black_gain = DPX_UNDEFINED_R32;
|
||||
header->televisionHeader.breakpoint = DPX_UNDEFINED_R32;
|
||||
header->televisionHeader.black_gain = swap_float(DPX_UNDEFINED_R32, dpx->isMSB);
|
||||
header->televisionHeader.breakpoint = swap_float(DPX_UNDEFINED_R32, dpx->isMSB);
|
||||
header->televisionHeader.white_level = swap_float(dpx->referenceWhite, dpx->isMSB);
|
||||
header->televisionHeader.integration_times = DPX_UNDEFINED_R32;
|
||||
header->televisionHeader.integration_times = swap_float(DPX_UNDEFINED_R32, dpx->isMSB);
|
||||
}
|
||||
|
||||
LogImageFile *dpxOpen(const unsigned char *byteStuff, int fromMemory, size_t bufferSize)
|
||||
|
@ -339,13 +339,11 @@ LogImageFile *dpxOpen(const unsigned char *byteStuff, int fromMemory, size_t buf
|
|||
dpx->element[i].refHighData = (unsigned int)dpx->element[i].maxValue;
|
||||
}
|
||||
|
||||
if (dpx->element[i].refLowQuantity == DPX_UNDEFINED_R32 ||
|
||||
isnan(dpx->element[i].refLowQuantity)) {
|
||||
if (IS_DPX_UNDEFINED_R32(dpx->element[i].refLowQuantity)) {
|
||||
dpx->element[i].refLowQuantity = 0.0f;
|
||||
}
|
||||
|
||||
if (dpx->element[i].refHighQuantity == DPX_UNDEFINED_R32 ||
|
||||
isnan(dpx->element[i].refHighQuantity)) {
|
||||
if (IS_DPX_UNDEFINED_R32(dpx->element[i].refHighQuantity)) {
|
||||
if (ELEM(dpx->element[i].transfer, transfer_PrintingDensity, transfer_Logarithmic)) {
|
||||
dpx->element[i].refHighQuantity = 2.048f;
|
||||
}
|
||||
|
@ -370,13 +368,11 @@ LogImageFile *dpxOpen(const unsigned char *byteStuff, int fromMemory, size_t buf
|
|||
dpx->element[i].refHighData = 235.0f / 255.0f * dpx->element[i].maxValue;
|
||||
}
|
||||
|
||||
if (dpx->element[i].refLowQuantity == DPX_UNDEFINED_R32 ||
|
||||
isnan(dpx->element[i].refLowQuantity)) {
|
||||
if (IS_DPX_UNDEFINED_R32(dpx->element[i].refLowQuantity)) {
|
||||
dpx->element[i].refLowQuantity = 0.0f;
|
||||
}
|
||||
|
||||
if (dpx->element[i].refHighQuantity == DPX_UNDEFINED_R32 ||
|
||||
isnan(dpx->element[i].refHighQuantity)) {
|
||||
if (IS_DPX_UNDEFINED_R32(dpx->element[i].refHighQuantity)) {
|
||||
dpx->element[i].refHighQuantity = 0.7f;
|
||||
}
|
||||
|
||||
|
@ -391,10 +387,9 @@ LogImageFile *dpxOpen(const unsigned char *byteStuff, int fromMemory, size_t buf
|
|||
dpx->referenceWhite = swap_float(header.televisionHeader.white_level, dpx->isMSB);
|
||||
dpx->gamma = swap_float(header.televisionHeader.gamma, dpx->isMSB);
|
||||
|
||||
if ((dpx->referenceBlack == DPX_UNDEFINED_R32 || isnan(dpx->referenceBlack)) ||
|
||||
(dpx->referenceWhite == DPX_UNDEFINED_R32 || dpx->referenceWhite <= dpx->referenceBlack ||
|
||||
isnan(dpx->referenceWhite)) ||
|
||||
(dpx->gamma == DPX_UNDEFINED_R32 || dpx->gamma <= 0 || isnan(dpx->gamma))) {
|
||||
if (IS_DPX_UNDEFINED_R32(dpx->referenceBlack) ||
|
||||
(dpx->referenceWhite <= dpx->referenceBlack || IS_DPX_UNDEFINED_R32(dpx->referenceWhite)) ||
|
||||
(dpx->gamma <= 0 || IS_DPX_UNDEFINED_R32(dpx->gamma))) {
|
||||
dpx->referenceBlack = 95.0f / 1023.0f * dpx->element[0].maxValue;
|
||||
dpx->referenceWhite = 685.0f / 1023.0f * dpx->element[0].maxValue;
|
||||
dpx->gamma = 1.7f;
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "logImageCore.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -34,7 +36,8 @@ extern "C" {
|
|||
#define DPX_UNDEFINED_U8 0xFF
|
||||
#define DPX_UNDEFINED_U16 0xFFFF
|
||||
#define DPX_UNDEFINED_U32 0xFFFFFFFF
|
||||
#define DPX_UNDEFINED_R32 0xFFFFFFFF
|
||||
#define DPX_UNDEFINED_R32 NAN
|
||||
#define IS_DPX_UNDEFINED_R32(x) isnan(x)
|
||||
#define DPX_UNDEFINED_CHAR 0
|
||||
|
||||
typedef struct {
|
||||
|
|
Loading…
Reference in New Issue