Combining Deep Images with a Shared Framebuffer

"Ashley Whetter" <[email protected]> Thu, 29 Jun 2017 00:35:14 +0100 (BST)
Newsgroups gmane.comp.video.openexr.devel
Message-ID <[email protected]>
Hello all,

I'm trying to combine some deep exrs together and I'm having problem with IlmThread so I thought that I'd check that what I'm doing is valid.

I have multiple scanline "tile" images that each form a part of the final image. For example this output image is formed of 4 smaller images.
--------
|A | B |
--------
|C | D |
--------
A, B, C, and D are all deep scanline exrs. Their data windows do not overlap. I'm trying to combine these images together into the final image by sharing a framebuffer between all of the input images and the output image, to avoid having to copy from each input file into an intermediate buffer.
So in pseudo code this looks like:

foreach data_window.scanlines
    foreach input_files
        input_file.readPixelSampleCounts(scanline)
    end

    resizeSampleBuffers(sample_counts, buffers, sample_buffers)

    foreach input_files
        input_file.readPixels(scanline)
    end

    output_file.writePixels(1)
end

Is it valid to share frame buffers in this way for deep images? I'm doing something similar for regular scanline images and I'm having no issues. For deep images though I get an assertion error from IlmThread while reading the pixels of tile B (I'm guessing due to it being the same scanline as A) because one of the mutexes on a TaskGroup is getting destroyed while still being used.

Thanks,
Ashley