简体   繁体   中英

VideoStream::setVideoMode() function doesn't work

I want to change VideoStream setting in my program, but it doesn't work

#include <OpenNI.h>

int main()
{
    OpenNI::initialize();
    Device device;
    device.open(ANY_DEVICE);
    VideoStream depthStream;
    depthStream.create(device, SENSOR_DEPTH);
    depthStream.start();

    VideoMode depthMode;
    depthMode.setFps(20);
    depthMode.setResolution(640, 480);
    depthMode.setPixelFormat(PIXEL_FORMAT_DEPTH_100_UM);
    depthStream.setVideoMode(depthMode);

    ...
}

Even I change depthStream.start() line after setVideoMode() function, but still doesn't work.

I changed Fps to 24, 20, 5, 1 but it doesn't change anything.

ps : This is my simple code, without error handling.


Edit:

Answer: with the help of dear "api55" i found that my device (Kinect Xbox) support only one mode of videoMode. so I can't change it.

My only supported video is :

FPS:30
Width:640
Height:480

I change the VideoMode succesfully in a code a did before. After creating the VideoStream you should do something like:

rc = depth.create(device, openni::SENSOR_DEPTH);
if (rc != openni::STATUS_OK)
    error_manager(3);

// set the new resolution and fps
openni::VideoMode depth_videoMode  = depth.getVideoMode();
depth_videoMode.setResolution(frame_width,frame_height);
depth_videoMode.setFps(30);
depth.setVideoMode(depth_videoMode);

rc = depth.start();
if (rc != openni::STATUS_OK)
    error_manager(4);

First I get the VideoMode that is inside the stream to conserve the other values and only change what I wanted. I think your code should work, but not all settings work in all cameras. To check the possible settings you can use the function openni::VideoStream::getSensorInfo . The code to check this should be something like:

#include <OpenNI.h>

int main()
{
    OpenNI::initialize();
    Device device;
    device.open(ANY_DEVICE);
    VideoStream depthStream;
    depthStream.create(device, SENSOR_DEPTH);
    depthStream.start();

    SensorInfo& info = depthStream.getSensorInfo();
    Array& videoModes = info.getSupportedVideoModes();
    for (int i = 0; i < videoModes.getSize(); i++){
         std::cout << "VideoMode " << i << std::endl;
         std::cout << "FPS:" << videoModes[i].getFps() << std::endl;
         std::cout << "Width:" << videoModes[i].getResolutionX() << std::endl;
         std::cout << "Height:" << videoModes[i].getResolutionY() << std::endl;
    }

    ...
}

I haven't test this last piece of code, so it may have errors, but you get the idea of it. The supported settings change with each camera, but I think the supported FPS in my camera were 15 and 30.

I hope this helps you

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM