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;