Two Sources on Pleora iPORT Analog-Pros

Dear Forum,

The Pleora iPORT allows a user to connect two cameras to one IP Address. By using the feature “SourceSelector”, a user can switch between the two sources.

By default when I bring up a camera using arv_gv_device_new, feature “SourceSelector” is set as “Source1”. This results in the stream being brought up to properly connect to my camera connected to the iPORT on Source1.

Does anyone else have a setup where they have two cameras to one IP Address? If so, what steps did you take to properly stream from them using Aravis?

Another question would be I noticed that when using arv_gv_device_new, it links the device_address with the port ARV_GVCP_PORT (3956). Will I run into issues if I have both streams coming from the same port then since they are both on the same IP Address?

Hi,

I don’t know how it is implemented in Pleora iPort, but GigEVision standard allows to have several stream channels, whic is exposed in the ArvCamera API:

https://aravisproject.github.io/docs/aravis-0.6/ArvCamera.html#arv-camera-gv-get-n-stream-channels

The proper sequence of operations is something like:

  • arv_camera_new
  • arv_camera_select_stream_channel (0)
  • arv_camera_create_stream
  • arv_camera_select_stream_channel (1)
  • arv_camera_create_stream

But this is a feature I have not tested by myself, as I don’t own a camera with this functionality.
Please keep us informed of the result of your tries.

Cheers.

1 Like

Thanks for that information @Emmanuel

I’ve had some more time to work on this today. I managed to get the camera to display the first port via arv-viewer. My next attempt is trying to view only the camera on the second source. Below is my attempt modifying arv-viewer for an idea on what I will need to do inside of my Qt application.

Inside of arv_viewer_select_camera_cb, right after the check to make sure the camera isn’t NULL after the call to arv_camera_new, I call arv_camera_gv_select_stream_channel(1). However, there is no display when I rebuild and launch arv-viewer. I have asked Pleora for documentation on how they meet the GigE Standard and to see if I need to set any additional features.

Just to double-check, do I need to create a stream on both channel0 and channel1, or should in theory the idea above work?

I got a response from Pleora. They gave me their eBUS Player, from which I was able to get the GenICam XML information as well as test toggling between the channels.

From debugging their setup, I have a good idea on how to switch between the two channels now. It appears that they use GevSCSP, GevSCDA, GevSCPHostPort, and SourceSelector in addition to GevStreamChannelSelector to debug/set values.

By adapting the process from them, I was able to figure out that when I switch between the channels, all the values are being updated correctly except for GevSCDA and GevSCPHostPort. When I read back the value using arv_device_get_integer_feature_value(), I am getting a 0 returned for both. However, using arv-tool-0.4, I get the correct values returned.

I’ll keep digging into this and keep you guys posted.

Hi @jkmoonblade,

have you made any progress in this regard?

I am working with the JAI Fusion 3200D, which also has two sources coming from the same IP address.
I was able to get both streams using the Pleora SDK, but I would also like to recreate this in aravis + ROS.

I am trying the approach mentioned by @Emmanuel which opens both streams using arv_camera_create_stream but I haven’t had a lot of success so far.

Thank you in advance!

Hi @Peter

I was since pulled off the project/feature onto higher priority items at my work. We have not resolved this issue however. My notes above are the latest I was able to figure out. When you read the GevSCDA and GevSCPHostPort using arv_device_get_integer_feature_value(), do you get the correct values returned? I know when I left off I was trying to figure out why I was getting 0 returned for both.

Hi @jkmoonblade

for the JAI Fusion 3200D the GevSCDA and GevSCPHostPort are correctly updated when switching between the channels.

I managed to get the both streams working in conjunction with the camera_aravis node in ROS, but this required adding a second ArvStream in the same nodelet, instead of calling two separate nodelets.

This all still seems pretty hacky, so I haven’t created a pull request for the camera_aravis node with this yet.

But this follows @Emmanuel’s suggestion of calling:

  • arv_camera_new
  • arv_camera_select_stream_channel (0)
  • arv_camera_create_stream
  • arv_camera_select_stream_channel (1)
  • arv_camera_create_stream

I will post here again if these changes make it into the camera_aravis node.

Thank you!

I realize this is a couple years old, but I’m working on integrating the Pleora IPort Analog Pro with 2 channels via Aravis. I think I have something working so far, but one piece that I would like to have is to be able to determine if we have an active signal on a given stream channel. Changing SourceSelector doesn’t seem to care if there is a camera plugged into the analog input or not. If I set it up with only one input connected and i try to grab an image off the other input, it just hangs waiting for a frame. I WANT to be able to determine if there’s an active signal on that channel before trying to read it (so as not to lock up my app waiting for a frame that will never come). Anyone know how i can check a given streaming channel to determine if there is a signal (analog device attached in this case)?

Thanks so much!

Hi Brian,

If there is mean to know if a analog signal is present, it should be available as one of the genicam features of the pleora board.

But anyway, there is no reason your code is blocked while waiting for a buffer if you use either arv_stream_try_pop_buffer() or arv_stream_timeout_pop_buffer().

Emmanuel.

You’re right. Perhaps “lock up” was the wrong wording. I just mean that until our internal timeout expires as we’re polling using “try_pop_buffer()”.
i will look more closely at the GenICam XML to see if they provide a way. If not, we might not have that functionality.
Thanks!

After reaching out to Pleora, it looks like the GenICam register for SDProcLocked is exactly what i was looking for: True if an analog signal is detected on the currently selected channel, False if not.