1

i was trying to write a plugin for return RGB image stream from ASUS Xtion PRO LIVE using openni. So in my Dll program i implement getdata() function of VideoFrameRef class to return pointer from image data. when i call this function from my test program it throws an exception.

hear is my dll code

    void* MyRgbStrem::GetStream()
    {
        Device          device;     
        VideoStream     color;      
        VideoFrameRef   vframeRef; 
        VideoMode       vmode;      
        Status status = STATUS_OK;

        status = openni::OpenNI::initialize ();
        status = device.open(openni::ANY_DEVICE);
        status = color.create (device, SENSOR_COLOR);
        status = color.start();

        while (true)
        {
            if (device.getSensorInfo(SENSOR_COLOR) != NULL)
            {
                status = color. readFrame(&vframeRef);
                if (vframeRef.isValid())
                {
                    return ( uint16_t*) vframeRef.getData();
                }
            } 

        }
    }

and in the header file  i declar class MyRgbStrem

  namespace Rgbstream
{
    class MyRgbStrem
    {
    public:

     static __declspec(dllexport) void* GetStream();

    };
}

in my test program i use opencv for image processing and to get frame width, height and size i declae few more functions in dll program and call them in test application

this is the program i use to call dll

{
    Mat rgb,bgr;
    int height, width, size;

    height = Rgbstream::MyRgbStrem::GetFrameSize_H();
    width  = Rgbstream::MyRgbStrem::GetFrameSize_W();
    size    = Rgbstream::MyRgbStrem::getSizeOfData();

    bgr.create ( height,width, CV_8UC3);
    rgb.create (height,width, CV_8UC3);


        while (true)
    {
        const void* imgbuff = Rgbstream::MyRgbStrem::GetStream();

        memcpy (bgr.data, imgbuff, size );

        cvtColor(rgb,bgr, CV_RGB2BGR);
        namedWindow ("Color Video",CV_WINDOW_AUTOSIZE);
        imshow ("Color Video", bgr);

        char key = waitKey (10);
        if (key == 27) break;
    }
    return 0;

}

when i run this program it throws an exception like this

Unhandled exception at 0x0F97E89A (msvcr110d.dll) in CallRgbStream.exe: 0xC0000005: Access violation reading location 0x00268000. The program '[9544] CallRgbStream.exe' has exited with code 0 (0x0).

any help is appreciate. thanks

santi
  • 11
  • 1
  • have you tried using OpenCV compiled with OpenNI support ? Have a look [here](http://stackoverflow.com/questions/14983248/how-to-initialize-multiple-openni-sensors-with-opencv) – George Profenza Jul 30 '13 at 11:11

0 Answers0