Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
06e2db5
initial implementaiton with runtime validity checks
henrypinkard Feb 26, 2025
1931993
Working with runtime checks for required properties
henrypinkard Feb 27, 2025
30de537
add comment
henrypinkard Feb 27, 2025
8789d67
cleanup
henrypinkard Feb 28, 2025
5759cc0
more cleanup
henrypinkard Feb 28, 2025
88833b1
change comment
henrypinkard Feb 28, 2025
e5ea9ce
add code review fixes
henrypinkard Mar 4, 2025
3633c1f
split camera base class into Base and LegacyBase
henrypinkard Mar 5, 2025
652991c
restore using statements
henrypinkard Mar 5, 2025
9c0bb8b
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 5, 2025
40c3d02
initial commit resuming previous work on camera api. Still have a com…
henrypinkard Mar 5, 2025
49b01c5
fix namespace and constructor errors from previous commits
henrypinkard Mar 5, 2025
1cef0b6
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 5, 2025
a85a54f
resotre commented code
henrypinkard Mar 5, 2025
9ff9c1f
fix more namespace issues
henrypinkard Mar 5, 2025
e250f83
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 5, 2025
60bd4b4
working build with basler camera
henrypinkard Mar 5, 2025
d0b45a8
converted many methods to standard properties
henrypinkard Mar 5, 2025
979d571
added mechanism for skipping required standard property
henrypinkard Mar 5, 2025
c496157
add skip standard props
henrypinkard Mar 5, 2025
79017f4
remove required flag from standard properties. Default to required an…
henrypinkard Mar 6, 2025
b37e5c3
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 6, 2025
5e6ab94
split out old and new camera api paths and clean up basler
henrypinkard Mar 6, 2025
a39a41c
remove from skipped registry upon creation
henrypinkard Mar 6, 2025
44ade7a
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 6, 2025
aa32a0c
Basler: standard prop action handlers
henrypinkard Mar 6, 2025
758e20b
standard properties must declare values at initialization
henrypinkard Mar 6, 2025
fd46240
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 6, 2025
5a4a894
basler progress
henrypinkard Mar 6, 2025
efdf7f9
successful auto-query of standard properties from basler
henrypinkard Mar 6, 2025
7766760
Events work in progress
henrypinkard Mar 7, 2025
da30e68
add method for updating standard property values
henrypinkard Mar 7, 2025
35f171c
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 7, 2025
c3bd38e
fix bug
henrypinkard Mar 7, 2025
a7ab1e2
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 7, 2025
9eac505
add checker method
henrypinkard Mar 7, 2025
5cd87df
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 7, 2025
2e4a937
WIP dynamic properties
henrypinkard Mar 7, 2025
a73d75e
add ability to dynamically delete properties
henrypinkard Mar 7, 2025
d210f4f
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 7, 2025
afca015
refactoring dynamic properties
henrypinkard Mar 7, 2025
9ca35fa
fix method name
henrypinkard Mar 7, 2025
71d6155
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 7, 2025
0a5b88b
readd skips
henrypinkard Mar 7, 2025
e1ebc27
remove from map correctly
henrypinkard Mar 7, 2025
d3d5cbb
Merge branch 'standard_props' into camera_api2025
henrypinkard Mar 7, 2025
f34266d
generic event handler
henrypinkard Mar 7, 2025
e4c396d
backwards compat for sequences in new camera API
henrypinkard Mar 8, 2025
3d7c29d
fix bug and only register handler once
henrypinkard Mar 8, 2025
f345c8f
allow snap to call insertImage instead of keeping its own buffer
henrypinkard Mar 8, 2025
6adb4bf
allow snap to call insertImage instead of keeping its own buffer
henrypinkard Mar 8, 2025
8a0dd5d
remove future new camera api changes
henrypinkard Mar 8, 2025
46d6ea0
complete merge
henrypinkard Mar 8, 2025
6183045
fix ncomponents
henrypinkard Mar 8, 2025
aed4e97
changes for multi-channel cameras
henrypinkard Mar 8, 2025
f6594f2
merge multi channel camera changes
henrypinkard Mar 9, 2025
b385397
change variable name
henrypinkard Mar 9, 2025
3bdfa47
merge multichannel camera fixes
henrypinkard Mar 9, 2025
4b47590
always return
henrypinkard Mar 9, 2025
75764f1
delete unused
henrypinkard Mar 9, 2025
786d872
Merge branch 'snap_insert_image' into camera_api2025
henrypinkard Mar 9, 2025
224e5e1
fix compiler warnings
henrypinkard Mar 9, 2025
f972ed1
Merge branch 'snap_insert_image' into camera_api2025
henrypinkard Mar 9, 2025
2db1497
finished adding new camera API to core
henrypinkard Mar 9, 2025
2a68d14
camera events/callbacks and more standard properties
henrypinkard Mar 11, 2025
1f242d2
enable frame burst property
henrypinkard Mar 11, 2025
9001af1
comment out rolling shutter standard props for now
henrypinkard Mar 14, 2025
221409b
remove commented
henrypinkard Mar 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
enable frame burst property
  • Loading branch information
henrypinkard committed Mar 11, 2025
commit 1f242d297fabfb2cfed8d734c894d09a1c7589a2
52 changes: 51 additions & 1 deletion DeviceAdapters/Basler/BaslerPylonCamera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ int BaslerCamera::Initialize()
InitOrSyncAcquisitionStatusSelectorStandardProperty();
InitOrSyncAcquisitionStatusStandardProperty();

SkipBurstFrameCountStandardProperty();
InitOrSyncAcquisitionBurstFrameCountStandardProperty();

SkipRollingShutterLineOffsetStandardProperty();
SkipRollingShutterActiveLinesStandardProperty();
Expand Down Expand Up @@ -1424,6 +1424,32 @@ int BaslerCamera::OnAcquisitionStatus(MM::PropertyBase* pProp, MM::ActionType eA
return DEVICE_OK;
}

int BaslerCamera::OnAcquisitionBurstFrameCount(MM::PropertyBase* pProp, MM::ActionType eAct)
{
try
{
CIntegerPtr AcquisitionBurstFrameCount(nodeMap_->GetNode("AcquisitionBurstFrameCount"));
if (AcquisitionBurstFrameCount != NULL && IsAvailable(AcquisitionBurstFrameCount))
{
if (eAct == MM::AfterSet) {
std::string countStr;
pProp->Get(countStr);
AcquisitionBurstFrameCount->SetValue(std::stoi(countStr));
}
else if (eAct == MM::BeforeGet) {
pProp->Set(std::to_string(AcquisitionBurstFrameCount->GetValue()).c_str());
}
}
}
catch (const GenericException & e)
{
// Error handling.
AddToLog(e.GetDescription());
return DEVICE_ERR;
}
return DEVICE_OK;
}

int BaslerCamera::OnLineMode(MM::PropertyBase* pProp, MM::ActionType eAct)
{
int ret = HandleEnumerationProperty(pProp, eAct, "LineMode");
Expand Down Expand Up @@ -3028,4 +3054,28 @@ int BaslerCamera::InitOrSyncAcquisitionStatusStandardProperty()
return DEVICE_OK;
}

int BaslerCamera::InitOrSyncAcquisitionBurstFrameCountStandardProperty()
{
CIntegerPtr node(nodeMap_->GetNode("AcquisitionBurstFrameCount"));
bool cameraHasIt = IsAvailable(node);
bool propertyExists = HasStandardProperty("AcquisitionBurstFrameCount");

if (cameraHasIt && !propertyExists) {
// Camera has the feature but property doesn't exist yet - initialize it
std::string currentValue = node->ToString();
CPropertyAction* action = new CPropertyAction(this, &BaslerCamera::OnAcquisitionBurstFrameCount);
return CreateAcquisitionBurstFrameCountStandardProperty(currentValue.c_str(), action);
}
else if (!cameraHasIt && propertyExists) {
// Camera doesn't have the feature but property exists - remove it
SkipAcquisitionBurstFrameCountStandardProperty();
}
else {
// It doesn't exist, mark to skip
SkipAcquisitionBurstFrameCountStandardProperty();
}

return DEVICE_OK;
}


19 changes: 3 additions & 16 deletions DeviceAdapters/Basler/BaslerPylonCamera.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ class BaslerCamera : public CNewAPICameraBase<BaslerCamera> {
int OnAcquisitionStatusSelector(MM::PropertyBase* pProp, MM::ActionType eAct);
int OnAcquisitionStatus(MM::PropertyBase* pProp, MM::ActionType eAct);

int OnAcquisitionBurstFrameCount(MM::PropertyBase* pProp, MM::ActionType eAct);


// non-standard properties
int OnAcqFramerate(MM::PropertyBase* pProp, MM::ActionType eAct);
Expand Down Expand Up @@ -189,22 +191,6 @@ class BaslerCamera : public CNewAPICameraBase<BaslerCamera> {

std::vector<std::string> GetAvailableEnumValues(const GenApi::IEnumeration& node);

// Standard property initialization functions
int InitTriggerSelectorStandardProperty();
int InitTriggerModeStandardProperty();
int InitTriggerSourceStandardProperty();
int InitTriggerActivationStandardProperty();
int InitTriggerDelayStandardProperty();
int InitTriggerOverlapStandardProperty();
int InitExposureModeStandardProperty();
int InitExposureTimeStandardProperty();
int InitLineSelectorStandardProperty();
int InitLineModeStandardProperty();
int InitLineInverterStandardProperty();
int InitLineSourceStandardProperty();
int InitLineStatusStandardProperty();
int InitEventSelectorStandardProperty();
int InitEventNotificationStandardProperty();

private:

Expand Down Expand Up @@ -263,6 +249,7 @@ class BaslerCamera : public CNewAPICameraBase<BaslerCamera> {
int InitOrSyncAcquisitionFrameRateEnableStandardProperty();
int InitOrSyncAcquisitionStatusSelectorStandardProperty();
int InitOrSyncAcquisitionStatusStandardProperty();
int InitOrSyncAcquisitionBurstFrameCountStandardProperty();

};

Expand Down
10 changes: 5 additions & 5 deletions MMDevice/DeviceBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -229,12 +229,12 @@ class CDeviceBase : public T
SkipStandardProperty<MM::g_ExposureModeProperty>();
}

int CreateBurstFrameCountStandardProperty(const char* value, MM::ActionFunctor* pAct = 0) {
return CreateStandardProperty<MM::g_BurstFrameCountProperty>(value, pAct);
int CreateAcquisitionBurstFrameCountStandardProperty(const char* value, MM::ActionFunctor* pAct = 0) {
return CreateStandardProperty<MM::g_AcquisitionBurstFrameCountProperty>(value, pAct);
}

void SkipBurstFrameCountStandardProperty() {
SkipStandardProperty<MM::g_BurstFrameCountProperty>();
void SkipAcquisitionBurstFrameCountStandardProperty() {
SkipStandardProperty<MM::g_AcquisitionBurstFrameCountProperty>();
}

int CreateLineSelectorStandardProperty(const char* value, const std::vector<std::string>& values, MM::ActionFunctor* pAct = 0) {
Expand Down Expand Up @@ -1972,7 +1972,7 @@ class COldAPICameraBase : public CAllCamerasBase<U>
SkipExposureModeStandardProperty();
SkipExposureTimeStandardProperty();

SkipBurstFrameCountStandardProperty();
SkipAcquisitionBurstFrameCountStandardProperty();
SkipLineSelectorStandardProperty();
SkipLineInverterStandardProperty();
SkipLineSourceStandardProperty();
Expand Down
6 changes: 3 additions & 3 deletions MMDevice/MMDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -467,8 +467,8 @@ namespace MM {
// the FrameBurstStart trigger is enabled and the FrameBurstEnd trigger is disabled. Note that
// the total number of frames captured is also conditioned by AcquisitionFrameCount if
//AcquisitionMode is MultiFrame and ignored if AcquisitionMode is Single.
static const MM::StandardProperty g_BurstFrameCountProperty{
"BurstFrameCount", // name
static const MM::StandardProperty g_AcquisitionBurstFrameCountProperty{
"AcquisitionBurstFrameCount", // name
Integer, // type
false, // isReadOnly
false, // isPreInit
Expand All @@ -477,7 +477,7 @@ namespace MM {
1, // lowerLimit
PropertyLimitUndefined, // upperLimit
};
MM_INTERNAL_LINK_STANDARD_PROP_TO_DEVICE_TYPE(CameraDevice, g_BurstFrameCountProperty)
MM_INTERNAL_LINK_STANDARD_PROP_TO_DEVICE_TYPE(CameraDevice, g_AcquisitionBurstFrameCountProperty)


// Selects the physical line (or pin) of the external device connector to configure.
Expand Down