Main Content

Use Advanced Property Support in the GigE Vision and GenICam GenTL Interfaces

Advanced Property Support

The Image Acquisition Toolbox™ has added GenICam™ property enhancements for the GigE Vision® (gige) and GenICam GenTL (gentl) adaptors used with the videoinput object in R2016a. These features were already included in the gigecam object.

  • Ability to change properties while the acquisition is running

  • Dynamic accessibility and readability

  • Dynamic constraints

  • Grouped selector properties

Change Properties While the Acquisition Is Running

This ability is useful for properties that you want to change dynamically, such as exposure time. For example, you can now do this:

% Create the videoinput object using the GigE adaptor
vid = videoinput('gige')

% Get the video source
src = getselectedsource(vid);

% Set the frames per trigger on the source
vid.FramesPerTrigger = Inf;

% Start acquiring frames
start(vid)

% Change the exposure time during the acquisition
src.ExposureTime = 4; 

Previously, changing the exposure time after starting the acquisition resulted in an error.

Note

This workflow is not supported in the Image Acquisition Explorer. While the acquisition is running, you can not change a property on the Device Properties tab.

Dynamic Accessibility and Readability

Device-specific properties, or camera GenICam properties, are now dynamically accessible. In previous releases, camera GenICam properties that were not accessible were hidden. If you display the device-specific properties using the disp, get or propinfo functions, properties that previously did not show up now show up with labels.

The propinfo function includes a new field called Accessible, which is a read-only boolean property. A disp on a property that has Accessible set to 0 results in “Currently not accessible.” To enable accessibility, set Accessible to 1. For example, if you have the ReverseY property set to Accessible, the following:

 propinfo(src,'ReverseY')

would result in a disp showing:

 Accessible: 1

The same is true for the ReadOnly property. Readability is now dynamic and the propinfo function shows a ReadOnly property as either 'notCurrently', if it is writable, or 'currently', if it is read-only. The example in the Dynamic Constraints section demonstrates the dynamic use of this property.

You can view the source properties to see if any properties are currently not accessible. In this example, for the part of the disp shown below, AcquisitionFrameCount and BalanceRatioRaw are currently not accessible.

>> src = vid.Source

src = 

   Display Summary for Video Source Object:

      General Settings:
        Parent = [1x1 videoinput]
        Selected = on
        SourceName = input1
        Tag = [0x0 character vector]
        Type = videosource

      Device Specific Properties:
        AcquisitionFrameCount = (Currently not accessible)
        AcquisitionFrameRate = 4.5
        AcquisitionFrameRateAuto = Off
        AcquisitionFrameRateEnabled = True
        BalanceRatioRaw = (Currently not accessible)
        BinningHorizontal = 1
        BinningVertical = 1
        BlackLevel = 1.001
        ...

Dynamic Constraints

If you change a property that results in a change of possible values, or constraint change, for another property, the other property’s constraint values are updated dynamically. Consider a camera that has an automatic sharpness setting that you can set to Continuous to automatically adjust the sharpness or set to Off. The automatic sharpness property then affects the related Sharpness property. In this example, when SharpnessAuto is set to Continuous, a disp of the Sharpness property shows the constrained values and that it is not able to be set.

>> propinfo(src, 'SharpnessAuto')

ans = 

               Type: 'character vector'
         Constraint: 'enum'
    ConstraintValue: {'Continuous'  'Off'}
       DefaultValue: 'Continuous'
           ReadOnly: 'notCurrently'
     DeviceSpecific: 1
         Accessible: 1

>> propinfo(src, 'Sharpness')

ans = 

               Type: 'integer'
         Constraint: 'bounded'
    ConstraintValue: [1532 1532]
       DefaultValue: 1532
           ReadOnly: 'currently'
     DeviceSpecific: 1
         Accessible: 1

If you then set the SharpnessAuto property to Off, a second disp of the Sharpness property shows that the constrained values have dynamically updated, and that it is now able to be set (no longer read-only).

>> src.SharpnessAuto = 'Off'
>> propinfo(src, 'Sharpness')

ans = 

               Type: 'integer'
         Constraint: 'bounded'
    ConstraintValue: [0 4095]
       DefaultValue: 1532
           ReadOnly: 'notCurrently'
     DeviceSpecific: 1
         Accessible: 1

Grouped Selector Properties

In both the Image Acquisition Explorer and the command line, selector properties are now grouped. In the tool, you can see the groupings in the Device Properties tab. In the property display on the command line, the related properties are grouped – the selector property is listed, with its possible values appearing below it.

For example, in previous versions of the toolbox, for a GainSelector with possible values of Red, Blue, and Green and a Gain property, the gain properties displayed as follows:

>> vid = videoinput('gige')
>> src = getselectedsource(vid)
...
...
RedGain = 0.4
BlueGain = 0.2
GreenGain = 0.1
...

They now display as separate values on one selector property instead:

>> vid = videoinput('gige')
>> src = getselectedsource(vid)
...
...
GainSelector = 'Red'
Gain = 0.2
... 

Compatibility Considerations

The grouping of selector properties results in a compatibility consideration starting in R2016a because of the change in how selector properties are displayed, read, or written. There are now fewer properties since some are shown as a single selector property with separate values, whereas they used to be separate properties.

If you have any MATLAB® code written prior to R2016a which references the previous, separate properties, you need to change the code to reflect them as values on the selector property. Setting and getting properties that belong to a selector using the previous composite-name style is no longer supported. For example, RedGain no longer works. Instead use GainSelector set to Red, as shown in the example.

To set a property value, first set the selector value, then set the property value:

src.GainSelector = 'Green';
src.Gain = 0.1;