Software Archive
Read-only legacy content
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
17060 Discussions

R200 can't start color/depth streams AND left/right streams

Henning_J_
New Contributor I
2,056 Views

I can't start the left or right streams in combination with the color and/or depth stream. Is this by design? I would have thought I'd need the left and right streams to produce the depth stream anyways, so why can't I view them at the same time?

0 Kudos
13 Replies
Xusheng_L_Intel
Employee
2,056 Views

What is your combinations? There are usually constraints on multiple stream configurations. For example, the configuration of an inferred stream may be tied to the corresponding depth stream. When enumerating multiple stream configurations, the QueryStreamProfileSet function returns the unique combinations of all valid stream configurations. Use the IsStreamProfileSetValid function to validate certain stream configuration. You can find detail info @https://software.intel.com/sites/landingpage/realsense/camera-sdk/v1.1/documentation/html/index.html?manuals_enumerate_stream_configuration.html

0 Kudos
Henning_J_
New Contributor I
2,056 Views

I just ran some more tests with the example you linked and got some interesting results.

I ran the following code to test all possible combinations of streams if there are ANY valid configurations:

  for (int i = 1; i < 0x0020; ++i)
  {
    if (i & PXCCapture::STREAM_TYPE_IR)
      continue;

    std::cout << "Streams: ";
    if (i & PXCCapture::STREAM_TYPE_COLOR) { std::cout << "COLOR "; } else { std::cout << "      "; }
    if (i & PXCCapture::STREAM_TYPE_DEPTH) { std::cout << "DEPTH "; } else { std::cout << "      "; }
    if (i & PXCCapture::STREAM_TYPE_LEFT)  { std::cout << "LEFT  "; } else { std::cout << "      "; }
    if (i & PXCCapture::STREAM_TYPE_RIGHT) { std::cout << "RIGHT "; } else { std::cout << "      "; }

    PXCCapture::StreamType streams = static_cast<PXCCapture::StreamType>(i);
    PXCCapture::Device::StreamProfileSet profiles = {};
    pxcStatus sts = device->QueryStreamProfileSet(streams, 0, &profiles);
    if (sts == PXC_STATUS_NO_ERROR)
      std::cout << "=> OK" << std::endl;
    else
      std::cout << "=> no valid streams" << std::endl;
  }

...and got this result:

Streams: COLOR                   => OK
Streams:       DEPTH             => OK
Streams: COLOR DEPTH             => OK
Streams:             LEFT        => OK
Streams: COLOR       LEFT        => no valid streams
Streams:       DEPTH LEFT        => no valid streams
Streams: COLOR DEPTH LEFT        => OK
Streams:                   RIGHT => OK
Streams: COLOR             RIGHT => no valid streams
Streams:       DEPTH       RIGHT => no valid streams
Streams: COLOR DEPTH       RIGHT => no valid streams
Streams:             LEFT  RIGHT => OK
Streams: COLOR       LEFT  RIGHT => no valid streams
Streams:       DEPTH LEFT  RIGHT => no valid streams
Streams: COLOR DEPTH LEFT  RIGHT => OK

I don't really see a pattern here that makes sense to me.

0 Kudos
Xusheng_L_Intel
Employee
2,056 Views

Yes, Not every combination is supported. So it is good for you to check if it is supported.

0 Kudos
Henning_J_
New Contributor I
2,056 Views

Yeah, I know that. The question was: Why? For example, why does COLOR DEPTH LEFT work, but COLOR DEPTH Right doesn't?

0 Kudos
Henning_J_
New Contributor I
2,056 Views

And, even though it shows valid configurations for the RIGHT stream only, I still can't initialize it.

  PXCVideoModule::DataDesc desc = {};
  desc.deviceInfo.streams = PXCCapture::STREAM_TYPE_RIGHT;
  st = senseManager->EnableStreams(&desc);
  if (st < PXC_STATUS_NO_ERROR) // this is fine
    return -1;

  st = senseManager->Init();
  if (st < PXC_STATUS_NO_ERROR) // here I get PXC_STATUS_ITEM_UNAVAILABLE
    return -1;

 

0 Kudos
Xusheng_L_Intel
Employee
2,056 Views

What combination do you want to use? Just enable STREAM_TYPE_RIGHT?

Henning J. wrote:

And, even though it shows valid configurations for the RIGHT stream only, I still can't initialize it.

  PXCVideoModule::DataDesc desc = {};
  desc.deviceInfo.streams = PXCCapture::STREAM_TYPE_RIGHT;
  st = senseManager->EnableStreams(&desc);
  if (st < PXC_STATUS_NO_ERROR) // this is fine
    return -1;

  st = senseManager->Init();
  if (st < PXC_STATUS_NO_ERROR) // here I get PXC_STATUS_ITEM_UNAVAILABLE
    return -1;

 

0 Kudos
Henning_J_
New Contributor I
2,056 Views

What combination do you want to use? Just enable STREAM_TYPE_RIGHT?

Yes, in that case I just wanted to run STREAM_TYPE_RIGHT and it didn't work.

But I'd also like to understand why some of the stream combinations are not supported.

0 Kudos
Xusheng_L_Intel
Employee
2,056 Views

Henning, even from your result, ONLY STREAM_TYPE_RIGHT is not a  valid stream for R200.

Streams:       DEPTH       RIGHT => no valid streams

Some stream combinations are not supported due to hardware and firmware limitation. 

Thanks!

Henning J. wrote:

I just ran some more tests with the example you linked and got some interesting results.

I ran the following code to test all possible combinations of streams if there are ANY valid configurations:

  for (int i = 1; i < 0x0020; ++i)
  {
    if (i & PXCCapture::STREAM_TYPE_IR)
      continue;

    std::cout << "Streams: ";
    if (i & PXCCapture::STREAM_TYPE_COLOR) { std::cout << "COLOR "; } else { std::cout << "      "; }
    if (i & PXCCapture::STREAM_TYPE_DEPTH) { std::cout << "DEPTH "; } else { std::cout << "      "; }
    if (i & PXCCapture::STREAM_TYPE_LEFT)  { std::cout << "LEFT  "; } else { std::cout << "      "; }
    if (i & PXCCapture::STREAM_TYPE_RIGHT) { std::cout << "RIGHT "; } else { std::cout << "      "; }

    PXCCapture::StreamType streams = static_cast<PXCCapture::StreamType>(i);
    PXCCapture::Device::StreamProfileSet profiles = {};
    pxcStatus sts = device->QueryStreamProfileSet(streams, 0, &profiles);
    if (sts == PXC_STATUS_NO_ERROR)
      std::cout << "=> OK" << std::endl;
    else
      std::cout << "=> no valid streams" << std::endl;
  }

...and got this result:

Streams: COLOR                   => OK
Streams:       DEPTH             => OK
Streams: COLOR DEPTH             => OK
Streams:             LEFT        => OK
Streams: COLOR       LEFT        => no valid streams
Streams:       DEPTH LEFT        => no valid streams
Streams: COLOR DEPTH LEFT        => OK
Streams:                   RIGHT => OK
Streams: COLOR             RIGHT => no valid streams
Streams:       DEPTH       RIGHT => no valid streams
Streams: COLOR DEPTH       RIGHT => no valid streams
Streams:             LEFT  RIGHT => OK
Streams: COLOR       LEFT  RIGHT => no valid streams
Streams:       DEPTH LEFT  RIGHT => no valid streams
Streams: COLOR DEPTH LEFT  RIGHT => OK

I don't really see a pattern here that makes sense to me.

0 Kudos
Henning_J_
New Contributor I
2,056 Views

No, the one you quoted is DEPTH and RIGHT together. That doesn't show any valid streams, so it's obvious why it doesn't work.

But only RIGHT show valid streams, but doesn't start.

Streams:                   RIGHT => OK

 

 

0 Kudos
Xusheng_L_Intel
Employee
2,056 Views

It works for me. You can try Capture Viewer under RealSense SDK tool. Here is my screenshot.

 

Henning J. wrote:

No, the one you quoted is DEPTH and RIGHT together. That doesn't show any valid streams, so it's obvious why it doesn't work.

But only RIGHT show valid streams, but doesn't start.

Streams:                   RIGHT => OK

 

 

0 Kudos
Henning_J_
New Contributor I
2,056 Views

Interesting. With the Capture Viewer it works just fine. With the Raw Streams sample or my own code it still doesn't work.

0 Kudos
Xusheng_L_Intel
Employee
2,056 Views

I think it is a bug and we will fix it in the future release. Thanks!

0 Kudos
Henning_J_
New Contributor I
2,056 Views

Good to know, thanks

0 Kudos
Reply