[libcamera-devel] [PATCH v4 6/7] test: delayed_controls: Fixup tests after recent DelayedControls changes
Kieran Bingham
kieran.bingham at ideasonboard.com
Fri Mar 12 14:37:55 CET 2021
Hi Naush,
On 04/03/2021 08:17, Naushir Patuck wrote:
> The recent fixes applied to DelayedControls change the behavior of the
> library. As such, the tests ended up failing as they relied on the old
> behavior of the helper. Update the tests to account for the new behavior
> and get the tests passing again.
>
> Specifically, the following changes have been made for each test:
>
> singleControlNoDelay():
> - Add a call to reset() to initialise internal DelayedControls state
> only after setting the control on the device.
> - Trigger a first frame start by calling applyControls() as a pipeline
> handler would.
> - Test frames from 1 onwards, as we will never have a queue item at
> frame 0, since the reset() handles that.
>
> singleControlWithDelay():
> - Trigger a first frame start by calling applyControls() as a pipeline
> handler would.
> - Test frames from 1 onwards, as we will never have a queue item at
> frame 0, since the reset() handles that.
>
> dualControlsWithDelay() and dualControlsMultiQueue():
> - Trigger a first frame start by calling applyControls() as a pipeline
> handler would.
> - Test frames from (startOffset + 1) onwards, as we will never have a
> queue item at frame startOffset.
> - Use the max delay (2 in this case) to determine the expected result
> value.
>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
I wondered if these should be squashed into the commits that change it -
but I don't think it's a problem.
Hard to track all these offsets :-( I'm glad you've created a tool to
help debugging!
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
> test/delayed_contols.cpp | 35 ++++++++++++++++++++++++++---------
> 1 file changed, 26 insertions(+), 9 deletions(-)
>
> diff --git a/test/delayed_contols.cpp b/test/delayed_contols.cpp
> index 3855eb18ecd4..c6f195b7bc7f 100644
> --- a/test/delayed_contols.cpp
> +++ b/test/delayed_contols.cpp
> @@ -82,9 +82,13 @@ protected:
> /* Reset control to value not used in test. */
> ctrls.set(V4L2_CID_BRIGHTNESS, 1);
> dev_->setControls(&ctrls);
> + delayed->reset();
> +
> + /* Trigger the first frame start event */
> + delayed->applyControls(0);
>
> /* Test control without delay are set at once. */
> - for (unsigned int i = 0; i < 100; i++) {
> + for (unsigned int i = 1; i < 100; i++) {
> int32_t value = 100 + i;
>
> ctrls.set(V4L2_CID_BRIGHTNESS, value);
> @@ -122,8 +126,11 @@ protected:
> dev_->setControls(&ctrls);
> delayed->reset();
>
> + /* Trigger the first frame start event */
> + delayed->applyControls(0);
> +
> /* Test single control with delay. */
> - for (unsigned int i = 0; i < 100; i++) {
> + for (unsigned int i = 1; i < 100; i++) {
> int32_t value = 10 + i;
>
> ctrls.set(V4L2_CID_BRIGHTNESS, value);
> @@ -150,9 +157,11 @@ protected:
>
> int dualControlsWithDelay(uint32_t startOffset)
> {
> + static const unsigned int maxDelay = 2;
> +
> std::unordered_map<uint32_t, DelayedControls::ControlParams> delays = {
> { V4L2_CID_BRIGHTNESS, { 1, false } },
> - { V4L2_CID_CONTRAST, { 2, false } },
> + { V4L2_CID_CONTRAST, { maxDelay, false } },
> };
> std::unique_ptr<DelayedControls> delayed =
> std::make_unique<DelayedControls>(dev_.get(), delays);
> @@ -165,8 +174,11 @@ protected:
> dev_->setControls(&ctrls);
> delayed->reset();
>
> + /* Trigger the first frame start event */
> + delayed->applyControls(startOffset);
> +
> /* Test dual control with delay. */
> - for (unsigned int i = 0; i < 100; i++) {
> + for (unsigned int i = 1; i < 100; i++) {
> uint32_t frame = startOffset + i;
> int32_t value = 10 + i;
>
> @@ -189,7 +201,7 @@ protected:
> return TestFail;
> }
>
> - expected = i < 1 ? expected : value - 1;
> + expected = i < maxDelay ? expected : value - 1;
> }
>
> return TestPass;
> @@ -197,9 +209,11 @@ protected:
>
> int dualControlsMultiQueue()
> {
> + static const unsigned int maxDelay = 2;
> +
> std::unordered_map<uint32_t, DelayedControls::ControlParams> delays = {
> { V4L2_CID_BRIGHTNESS, { 1, false } },
> - { V4L2_CID_CONTRAST, { 2, false } }
> + { V4L2_CID_CONTRAST, { maxDelay, false } }
> };
> std::unique_ptr<DelayedControls> delayed =
> std::make_unique<DelayedControls>(dev_.get(), delays);
> @@ -212,6 +226,9 @@ protected:
> dev_->setControls(&ctrls);
> delayed->reset();
>
> + /* Trigger the first frame start event */
> + delayed->applyControls(0);
> +
> /*
> * Queue all controls before any fake frame start. Note we
> * can't queue up more then the delayed controls history size
> @@ -226,8 +243,8 @@ protected:
> }
>
> /* Process all queued controls. */
> - for (unsigned int i = 0; i < 16; i++) {
> - int32_t value = 10 + i;
> + for (unsigned int i = 1; i < 16; i++) {
> + int32_t value = 10 + i - 1;
>
> delayed->applyControls(i);
>
> @@ -245,7 +262,7 @@ protected:
> return TestFail;
> }
>
> - expected = i < 1 ? expected : value - 1;
> + expected = i < maxDelay ? expected : value - 1;
> }
>
> return TestPass;
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list