First question, might be stupid, but are you compiling in 64-bit? 32-bit
will definitely crash, and unreliably do so.

Second, in a bit of PD, I think this might have something to do with it:

private:
    std::ifstream m_file;
    std::string m_current_line; ///< Buffer the image pixels
    const char * m_pos;
    unsigned int m_pnm_type, m_max_val; // shouldn't this be long?

    bool read_file_scanline (void * data);
    bool read_file_header ();
};


and this shows up here:

Line 267:
            if (m_max_val > std::numeric_limits<unsigned char>::max())
                raw_to_raw ((unsigned short *)&buf[0], (unsigned short *)
data,
                            nsamples, (unsigned short)m_max_val);
            else
                raw_to_raw ((unsigned char *)&buf[0], (unsigned char *) data
,
                            nsamples, (unsigned char)m_max_val); // casting
to a char?
            break;

Lots of places show up that could cause problems with massive file sizes.
I'm no expert.

Kevin


On Mon, Sep 9, 2013 at 11:16 AM, Ramiro Pereira de Magalhães <
[email protected]> wrote:

> Hi,
>
> I have just learned about OIIO and I wrote a simple program with
> OpenImageIO to load a 10GB PGM file into memory. To try things out I wrote
> a simple program to load a 10GB PGM (yeah, PGM) file into memory. Sadly,
> the program crashes prior to completing its task with a Segmentation Fault.
> The machine where this is running has 64GB RAM, most of it free. Can anyone
> help me figure out this issue?
>
> Bellow is the program I wrote. It is pretty simple: load the image given
> as argument to it into a buffer, then close the file, clean the buffers and
> leave.
>
> ================CODE================
> #include <iostream>
> #include <string>
> #include <sstream>
> #include <OpenImageIO/imageio.h>
>
> OIIO_NAMESPACE_USING
>
> int main(int argc, char* args[])
> {
>     if (argc != 2)
>     {
>         return 1;
>     }
>     const std::string filePath = args[1];
>
>     ImageInput *in = ImageInput::open (filePath);
>     const ImageSpec & spec = in->spec();
>     const int size = spec.width * spec.height;
>
>     unsigned char * pixels = new unsigned char[size];
>     in->read_image(TypeDesc::UCHAR, pixels);
>     std::cout << "Done reading." << std::endl;
>     in->close();
>     std::cout << "Closed file." << std::endl;
>
>     delete in;
>     delete pixels;
>
>     std::cout << "Outta here." << std::endl;
>     return 0;
> }
> ================CODE================
>
>
> Segfault happens at line 173 of onminput.cpp. Here is the call stack given
> by Qt Builder:
>
> 0    OpenImageIO::v1_3::raw_to_raw<unsigned char>    pnminput.cpp
> 173    0x7ffff798c1e6
> 1    OpenImageIO::v1_3::PNMInput::read_file_scanline    pnminput.cpp
> 272    0x7ffff798b09c
> 2    OpenImageIO::v1_3::PNMInput::read_native_scanline    pnminput.cpp
> 385    0x7ffff798b91e
> 3    OpenImageIO::v1_3::ImageInput::read_native_scanlines
> imageinput.cpp    260    0x7ffff76d9280
> 4    OpenImageIO::v1_3::ImageInput::read_scanlines    imageinput.cpp
> 197    0x7ffff76d8c24
> 5    OpenImageIO::v1_3::ImageInput::read_scanlines    imageinput.cpp
> 165    0x7ffff76d8977
> 6    OpenImageIO::v1_3::ImageInput::read_image    imageinput.cpp    631
> 0x7ffff76db3c8
> 7    main    show.cpp    31    0x4012b7
>
>
> I compiled OIIO from the git commit
> d64b9ac8a63261040ae0263b0709924d8fecf4df (Tue Sep 3 12:53:12 2013 -0700).
>
> I appreciate any help.
>
> _______________________________________________
> Oiio-dev mailing list
> [email protected]
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>
>


-- 
Kevin Brightwell
*BESc. and BSc. Candidate 2015*
Western University www.westernu.ca <http://www.uwo.ca>
e. [email protected] c. 226.678.4927
_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to