Re: Deep data API: another batch of questions.
Piotr Stanczyk <[email protected]>
| Newsgroups | gmane.comp.video.openexr.devel |
|---|---|
| Message-ID | <CALVgk2rwsUb_i7cyrBoR811+VZRw43zQeUTHd7way3mWvCt8=w@mail.gmail.com> |
The docs hold a fully fleshed out version of this approach for flat images that serve as an excellent example. Piotr On 21 April 2014 09:02, Lerenard Michel <[email protected]> wrote: > Thanks for your answer. I didn't thought I could pass an "illegal" pointer > to the function, i'll try this method instead. > > > 2014-04-21 0:19 GMT+02:00 Peter Hillman <[email protected]>: > > You will need to call setFrameBuffer before every call to writePixels, as >> you need to update the frame pointers. >> The pointer you pass to Slice/DeepSlice is the memory location of pixel >> (0,0) in the image. This point will move in memory as you update your >> memory block with different scanlines. >> >> Your first call is probably doing the right thing. For each subsequent >> call you need to set up a new FrameBuffer with yStride*currentScanLine() >> subtracted from the base pointer, where currentScanLine() is the y offset >> of the first scanline you are writing. >> >> The library will only access the memory locations it needs to for >> writePixels() - there's no problem in passing an "illegal address" as a >> base pointer to setFrameBuffer, as long as (base+yStride*currentScanLine() >> + dataWindow.min.x*xStride) is always a valid location when writePixels() >> is called. >> >> The above is true for xSampling=1 and ySampling=1 - you may need to >> adjust the logic accordingly otherwise. >> >> >> >> On 19/04/14 21:18, Lerenard Michel wrote: >> >> Hi, >> >> still trying to write deep data image, i'm struggling a bit with >> FrameBuffers. >> As I need to write subsampled deep images, I cannot use Tiled images. I >> went for the scanline approach. My idea was to write batches of n >> scanlines, in increasing Y order. >> >> This way I was thinking I would be able to limit the memory footprint: >> OpenEXR would not need to cache data, and I would be able to reuse the >> same buffers for every batch of lines: one buffer for Z and one for each >> visible channel. >> >> So I created a bunch of buffers, whose size was my image width * 32. >> (arbitrary value). I planned to feed these buffers to the DeepSlices I >> added to the FrameBuffer. >> Thing is, it appears the FrameBuffer/Slices cannot work that way: they >> need to have memory allocated for the whole image. I couldn't find any >> function limiting / defining the region I want to work on. >> >> Here are my questions: >> - Is the statement above correct ? >> - Should I work differently ? I doesn't look like using several >> framebuffers would help, I out of ideas at the moment. >> >> I can explain in more details my process if it can help. >> >> >> Thanks >> >> Michel >> >> >> _______________________________________________ >> Openexr-devel mailing [email protected]://lists.nongnu.org/mailman/listinfo/openexr-devel >> >> >> > > _______________________________________________ > Openexr-devel mailing list > [email protected] > https://lists.nongnu.org/mailman/listinfo/openexr-devel > > _______________________________________________ Openexr-devel mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/openexr-devel