Definitely sounds like a bug. Thanks for the repro case, knowing that it's 
related to checknan will help narrow it down. In the mean time, I assume that 
by disabling checknan, you can get unstuck and make some forward progress?

        -- lg


On Sep 30, 2014, at 3:53 PM, Nathan Rusch <[email protected]> wrote:

> Hey Larry,
> 
> As requested, I stripped it down to a minimal set of operations, and after 
> playing with a couple of things, it appears to be a side-effect of turning on 
> "maketx:checknan". In my case, the source buffer is always of type FLOAT, so 
> the "checknan" block in make_texture will never be skipped if that attribute 
> is set.
> 
> Here's the code I used to reproduce it:
> 
> 
> #include <iostream>
> 
> #include "OpenImageIO/imagebuf.h"
> #include "OpenImageIO/imagebufalgo.h"
> 
> 
> #define WIDTH 640
> #define HEIGHT 480
> #define CHANNELS 3
> 
> 
> OIIO_NAMESPACE_USING
> 
> int main (int argc, char* argv[]) {
>     if (argc < 2) {
>         std::cout << "ERROR: An output file path is required" << std::endl;
>         return 1;
>     }
> 
>     const char* filename = argv[1];
> 
>     ImageSpec srcSpec(WIDTH, HEIGHT, CHANNELS, TypeDesc::FLOAT);
>     ImageBuf srcBuffer(srcSpec);
> 
>     float zero[CHANNELS];
>     for (int i = 0; i < CHANNELS; i++)
>         zero[i] = 0.0f;
> 
>     for (int y = 0; y < HEIGHT; y++)
>         for (int x = 0; x < WIDTH; x++)
>             srcBuffer.setpixel(x, y, &zero[0]);
> 
>     ImageSpec destSpec(WIDTH, HEIGHT, CHANNELS, TypeDesc::FLOAT);
> 
>     destSpec.attribute("maketx:filtername", "box");
> 
>     // This is bad news
>     destSpec.attribute("maketx:checknan", 1);
> 
>     destSpec.attribute("maketx:verbose", 1);
>     destSpec.attribute("maketx:stats", 1);
>     destSpec.attribute("maketx:oiio_options", 1);
> 
>     OIIO::attribute("threads", 4);
> 
>     std::cout << "Calling make_texture" << std::endl;
>     if (!ImageBufAlgo::make_texture(ImageBufAlgo::MakeTxTexture, srcBuffer,
>                                     filename, destSpec, &std::cout)) {
>         std::cout << "ImageBufAlgo::make_texture failed to write file " << 
> filename << std::endl;
>         return 1;
>     }
>     return 0;
> }
> 
> 
> 
> Let me know if I can provide any more info.
> 
> -Nathan
> 
> On Tue, Sep 30, 2014 at 2:54 PM, Larry Gritz <[email protected]> wrote:
> Smells like maybe some kind of a bug, but I'll need to look into it.
> 
> Can you possibly reduce it down to the minimal C++ program that will 
> reproduce the crash?
> 
> 
> 
> On Sep 30, 2014, at 2:37 PM, Nathan Rusch <[email protected]> wrote:
> 
>> Hello all,
>> 
>> I'm running into an error when using ImageBufAlgo::make_texture to create a 
>> mipmapped .tx file from an ImageBuf, using OIIO 1.4.12.. I've tried to do my 
>> due diligence in looking for previous questions about this, as well as 
>> trying to track it down myself, but so far I've had no luck. I haven't gone 
>> as far as patching and playing around with the OIIO code yet though.
>> 
>> Here's a rough outline of what I'm doing:
>> 
>> ImageSpec srcSpec(w, h, chanCount, TypeDesc::FLOAT);
>> ImageBuf srcBuffer(srcSpec);
>> // ...
>> // Fill in srcBuffer, currently using setpixel,
>> // but eventually (hopefully) using an iterator
>> // ...
>> ImageSpec destSpec(w, h, chanCount, TypeDesc::FLOAT);
>> // ...or some other BASETYPE
>> // ...
>> // Set various "maketx:" attributes
>> ImageBufAlgo::make_texture(ImageBufAlgo::MakeTxTexture, srcBuffer,
>>                            filename, destSpec, &std::cout);
>> 
>> 
>> When this runs, I get a failed assertion '0 && "ImageBuf wrapping client 
>> buffer not yet supported"'. I've looked through various source files, and 
>> while this is originating in the ImageBuf copy constructor, it looks like 
>> the assertion should only be hit if the original ImageBuf was constructed 
>> with an external buffer pointer. I'm obviously not doing this, and I have 
>> confirmed that my buffer's storage mode is set to LOCALBUFFER, so I'm not 
>> sure what else could be going on.
>> 
>> So my question to you good people is, am I just doing and/or overlooking 
>> something really dumb here? Or does this look like a bug in make_texture?
>> 
>> Thanks for any help or ideas.
>> 
>> 
>> -Nathan
>> _______________________________________________
>> Oiio-dev mailing list
>> [email protected]
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
> 
> --
> Larry Gritz
> [email protected]
> 
> 
> 
> 
> _______________________________________________
> Oiio-dev mailing list
> [email protected]
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
> 
> 
> _______________________________________________
> Oiio-dev mailing list
> [email protected]
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

--
Larry Gritz
[email protected]



_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to