Skip to content

Commit ce5548e

Browse files
committed
save_exr: fix incorrect header
1 parent 5af105b commit ce5548e

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

src/tinyexr_wrapper.cu

+17-19
Original file line numberDiff line numberDiff line change
@@ -54,47 +54,45 @@ __global__ void interleave_and_cast_kernel(const uint32_t num_pixels, bool has_a
5454
*((uint64_t*)&out[i*4]) = *((uint64_t*)&rgba_out[0]);
5555
}
5656

57-
void save_exr(const float* data, int width, int height, int nChannels, int channelStride, const char* outfilename) {
57+
void save_exr(const float* data, int width, int height, int n_channels, int channel_stride, const char* outfilename) {
5858
EXRHeader header;
5959
InitEXRHeader(&header);
6060

6161
EXRImage image;
6262
InitEXRImage(&image);
6363

64-
image.num_channels = nChannels;
64+
image.num_channels = n_channels;
6565

66-
std::vector<std::vector<float>> images(nChannels);
67-
std::vector<float*> image_ptr(nChannels);
68-
for (int i = 0; i < nChannels; ++i) {
66+
std::vector<std::vector<float>> images(n_channels);
67+
std::vector<float*> image_ptr(n_channels);
68+
for (int i = 0; i < n_channels; ++i) {
6969
images[i].resize(width * height);
7070
}
7171

72-
for (int i = 0; i < nChannels; ++i) {
73-
image_ptr[i] = images[nChannels - i - 1].data();
72+
for (int i = 0; i < n_channels; ++i) {
73+
image_ptr[i] = images[n_channels - i - 1].data();
7474
}
7575

7676
for (size_t i = 0; i < (size_t)width * height; i++) {
77-
for (int c = 0; c < nChannels; ++c) {
78-
images[c][i] = data[channelStride*i+c];
77+
for (int c = 0; c < n_channels; ++c) {
78+
images[c][i] = data[channel_stride * i + c];
7979
}
8080
}
8181

8282
image.images = (unsigned char**)image_ptr.data();
8383
image.width = width;
8484
image.height = height;
8585

86-
header.num_channels = nChannels;
86+
header.num_channels = n_channels;
8787
header.channels = (EXRChannelInfo *)malloc(sizeof(EXRChannelInfo) * header.num_channels);
88+
8889
// Must be (A)BGR order, since most of EXR viewers expect this channel order.
89-
strncpy(header.channels[0].name, "B", 255); header.channels[0].name[strlen("B")] = '\0';
90-
if (nChannels > 1) {
91-
strncpy(header.channels[1].name, "G", 255); header.channels[1].name[strlen("G")] = '\0';
92-
}
93-
if (nChannels > 2) {
94-
strncpy(header.channels[2].name, "R", 255); header.channels[2].name[strlen("R")] = '\0';
95-
}
96-
if (nChannels > 3) {
97-
strncpy(header.channels[3].name, "A", 255); header.channels[3].name[strlen("A")] = '\0';
90+
const char* channel_names[] = {
91+
"R", "G", "B", "A"
92+
};
93+
94+
for (size_t i = 0; i < n_channels; ++i) {
95+
strncpy(header.channels[i].name, channel_names[n_channels - i - 1], 255);
9896
}
9997

10098
header.pixel_types = (int *)malloc(sizeof(int) * header.num_channels);

0 commit comments

Comments
 (0)