libcamera: controls: Add policy parameter to ControlList::merge()

This is useful in many cases although not included in the stl.

Note: This is an ABI incompatible change.

Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
This commit is contained in:
Stefan Klug 2024-03-07 11:27:38 +01:00
parent 2e2ba223f3
commit d54abd32af
3 changed files with 73 additions and 4 deletions

View file

@ -196,6 +196,56 @@ protected:
return TestFail;
}
/*
* Create two lists with overlapping controls. Merge them with
* overwriteExisting = true, verifying that the existing control
* values *get* overwritten.
*/
mergeList.clear();
mergeList.set(controls::Brightness, 0.7f);
mergeList.set(controls::Saturation, 0.4f);
list.clear();
list.set(controls::Brightness, 0.5f);
list.set(controls::Contrast, 1.1f);
mergeList.merge(list, ControlList::MergePolicy::OverwriteExisting);
if (mergeList.size() != 3) {
cout << "Merged list should contain three elements" << endl;
return TestFail;
}
if (list.size() != 2) {
cout << "The list to merge should contain two elements"
<< endl;
return TestFail;
}
if (!mergeList.get(controls::Brightness) ||
!mergeList.get(controls::Contrast) ||
!mergeList.get(controls::Saturation)) {
cout << "Merged list does not contain all controls" << endl;
return TestFail;
}
if (mergeList.get(controls::Brightness) != 0.5f) {
cout << "Brightness control value did not change after merging lists"
<< endl;
return TestFail;
}
if (mergeList.get(controls::Contrast) != 1.1f) {
cout << "Contrast control value changed after merging lists"
<< endl;
return TestFail;
}
if (mergeList.get(controls::Saturation) != 0.4f) {
cout << "Saturation control value changed after merging lists"
<< endl;
return TestFail;
}
return TestPass;
}
};