[libcamera-devel,v3,0/2] lc-compliance: Add a libcamera compliance tool
mbox series

Message ID 20210310154414.3560115-1-niklas.soderlund@ragnatech.se
Headers show
Series
  • lc-compliance: Add a libcamera compliance tool
Related show

Message

Niklas Söderlund March 10, 2021, 3:44 p.m. UTC
Hello,

This series adds a compliance tool to libcamera. It was developed out of
necessity while extending and debugging the IPU3 pipeline hander. Each
test in the tool so far have at one point triggered fatal issues in one
pipeline or another. All known issues are however either fixed or have
patches on ML to address them.

The tool is simple at the moment and only tests a single stream. As our
use-cases grow more complex I hope to find time to extend the tool to
cover more areas.

Niklas Söderlund (2):
  lc-compliance: Add a libcamera compliance tool
  lc-compliance: Add test stopping single stream with requests queued

 src/lc-compliance/main.cpp           | 139 ++++++++++++++++++
 src/lc-compliance/meson.build        |  25 ++++
 src/lc-compliance/results.cpp        |  75 ++++++++++
 src/lc-compliance/results.h          |  45 ++++++
 src/lc-compliance/simple_capture.cpp | 212 +++++++++++++++++++++++++++
 src/lc-compliance/simple_capture.h   |  68 +++++++++
 src/lc-compliance/single_stream.cpp  |  98 +++++++++++++
 src/lc-compliance/tests.h            |  16 ++
 src/meson.build                      |   2 +
 9 files changed, 680 insertions(+)
 create mode 100644 src/lc-compliance/main.cpp
 create mode 100644 src/lc-compliance/meson.build
 create mode 100644 src/lc-compliance/results.cpp
 create mode 100644 src/lc-compliance/results.h
 create mode 100644 src/lc-compliance/simple_capture.cpp
 create mode 100644 src/lc-compliance/simple_capture.h
 create mode 100644 src/lc-compliance/single_stream.cpp
 create mode 100644 src/lc-compliance/tests.h

Comments

Kieran Bingham March 12, 2021, 2:44 p.m. UTC | #1
Hi Niklas,

On 10/03/2021 15:44, Niklas Söderlund wrote:
> Hello,
> 
> This series adds a compliance tool to libcamera. It was developed out of
> necessity while extending and debugging the IPU3 pipeline hander. Each
> test in the tool so far have at one point triggered fatal issues in one
> pipeline or another. All known issues are however either fixed or have
> patches on ML to address them.

There's more (or at least now) but this tool has helped in flushing out
a few.

The raspberry pi pipeline handler seems to fail a few of these tests.
But all the more reason to integrate this.

I can't say I've done a detailed review but I can say this:


For both:

Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>


On IPU3 (with my stability branch):
120 tests executed, 96 tests passed, 24 tests skipped and 0 tests failed

On vivid:
120 tests executed, 96 tests passed, 24 tests skipped and 0 tests failed

On UVC:
120 tests executed, 96 tests passed, 24 tests skipped and 0 tests failed


On RPi:
120 tests executed, 78 tests passed, 12 tests skipped and 30 tests failed

Naush - I had to do a quick fudge fix in the configure path to get this
to run at all - so it might be interesting for you to try running this.


> The tool is simple at the moment and only tests a single stream. As our
> use-cases grow more complex I hope to find time to extend the tool to
> cover more areas.

Future feature request
  --fail-fast

So if it fails, it halts? (To help see what to fix)

> 
> Niklas Söderlund (2):
>   lc-compliance: Add a libcamera compliance tool
>   lc-compliance: Add test stopping single stream with requests queued
> 
>  src/lc-compliance/main.cpp           | 139 ++++++++++++++++++
>  src/lc-compliance/meson.build        |  25 ++++
>  src/lc-compliance/results.cpp        |  75 ++++++++++
>  src/lc-compliance/results.h          |  45 ++++++
>  src/lc-compliance/simple_capture.cpp | 212 +++++++++++++++++++++++++++
>  src/lc-compliance/simple_capture.h   |  68 +++++++++
>  src/lc-compliance/single_stream.cpp  |  98 +++++++++++++
>  src/lc-compliance/tests.h            |  16 ++
>  src/meson.build                      |   2 +
>  9 files changed, 680 insertions(+)
>  create mode 100644 src/lc-compliance/main.cpp
>  create mode 100644 src/lc-compliance/meson.build
>  create mode 100644 src/lc-compliance/results.cpp
>  create mode 100644 src/lc-compliance/results.h
>  create mode 100644 src/lc-compliance/simple_capture.cpp
>  create mode 100644 src/lc-compliance/simple_capture.h
>  create mode 100644 src/lc-compliance/single_stream.cpp
>  create mode 100644 src/lc-compliance/tests.h
>
Naushir Patuck March 12, 2021, 5:02 p.m. UTC | #2
Hi Kieran and Niklas,

On Fri, 12 Mar 2021 at 14:44, Kieran Bingham <
kieran.bingham@ideasonboard.com> wrote:

> Hi Niklas,
>
> On 10/03/2021 15:44, Niklas Söderlund wrote:
> > Hello,
> >
> > This series adds a compliance tool to libcamera. It was developed out of
> > necessity while extending and debugging the IPU3 pipeline hander. Each
> > test in the tool so far have at one point triggered fatal issues in one
> > pipeline or another. All known issues are however either fixed or have
> > patches on ML to address them.
>
> There's more (or at least now) but this tool has helped in flushing out
> a few.
>
> The raspberry pi pipeline handler seems to fail a few of these tests.
> But all the more reason to integrate this.
>
> I can't say I've done a detailed review but I can say this:
>
>
> For both:
>
> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
>
>
> On IPU3 (with my stability branch):
> 120 tests executed, 96 tests passed, 24 tests skipped and 0 tests failed
>
> On vivid:
> 120 tests executed, 96 tests passed, 24 tests skipped and 0 tests failed
>
> On UVC:
> 120 tests executed, 96 tests passed, 24 tests skipped and 0 tests failed
>
>
> On RPi:
> 120 tests executed, 78 tests passed, 12 tests skipped and 30 tests failed
>
> Naush - I had to do a quick fudge fix in the configure path to get this
> to run at all - so it might be interesting for you to try running this.
>

Thanks for the heads-up.  This is indeed going to be a very handy tool for
everyone.

Regarding the results, I think I see the cause of the failures.  It is due
to
the RPi pipeline handler not correctly handling only a RAW stream (i.e. no
ISP output).  Our entire flow depends on it, including running the IPA for
metering stats.  The solution here would be to allow our ISP to run so that
it only generates stats output and no image output.  However, this is not
a trivial change, and since we have never run this way before, my
confidence levels are not all that high.

A simpler fix would be to get the ISP to generate a small (say 320x240)
output image for internal use only so the pipeline behaves correctly.
Having
a quick go at this change seems to fix all failures.

For the skipped tests, I think we did have a brief discussion with Niklas
some
time back when the tool was first introduced.  We advertise a particular
buffer count for each SteramRole in generateConfiguration(), and I think the
tool skips the tests with number of Requests lower than that count.
However,
this number is merely a guide and our pipeline handler ought to work
correctly with
only a single Request queued.  We did not reach a conclusion on what was
the right
way to approach this back then, but I think we said that I should not set
our buffer
counts down to one. Niklas should we consider another number besides buffer
count
returned out of generateConfiguration()?

Thanks,
Naush


>
> > The tool is simple at the moment and only tests a single stream. As our
> > use-cases grow more complex I hope to find time to extend the tool to
> > cover more areas.
>
> Future feature request
>   --fail-fast
>
> So if it fails, it halts? (To help see what to fix)
>
> >
> > Niklas Söderlund (2):
> >   lc-compliance: Add a libcamera compliance tool
> >   lc-compliance: Add test stopping single stream with requests queued
> >
> >  src/lc-compliance/main.cpp           | 139 ++++++++++++++++++
> >  src/lc-compliance/meson.build        |  25 ++++
> >  src/lc-compliance/results.cpp        |  75 ++++++++++
> >  src/lc-compliance/results.h          |  45 ++++++
> >  src/lc-compliance/simple_capture.cpp | 212 +++++++++++++++++++++++++++
> >  src/lc-compliance/simple_capture.h   |  68 +++++++++
> >  src/lc-compliance/single_stream.cpp  |  98 +++++++++++++
> >  src/lc-compliance/tests.h            |  16 ++
> >  src/meson.build                      |   2 +
> >  9 files changed, 680 insertions(+)
> >  create mode 100644 src/lc-compliance/main.cpp
> >  create mode 100644 src/lc-compliance/meson.build
> >  create mode 100644 src/lc-compliance/results.cpp
> >  create mode 100644 src/lc-compliance/results.h
> >  create mode 100644 src/lc-compliance/simple_capture.cpp
> >  create mode 100644 src/lc-compliance/simple_capture.h
> >  create mode 100644 src/lc-compliance/single_stream.cpp
> >  create mode 100644 src/lc-compliance/tests.h
> >
>
> --
> Regards
> --
> Kieran
>
Laurent Pinchart March 14, 2021, 8:59 p.m. UTC | #3
Hi Niklas,

On Wed, Mar 10, 2021 at 04:44:12PM +0100, Niklas Söderlund wrote:
> Hello,
> 
> This series adds a compliance tool to libcamera. It was developed out of
> necessity while extending and debugging the IPU3 pipeline hander. Each
> test in the tool so far have at one point triggered fatal issues in one
> pipeline or another. All known issues are however either fixed or have
> patches on ML to address them.
> 
> The tool is simple at the moment and only tests a single stream. As our
> use-cases grow more complex I hope to find time to extend the tool to
> cover more areas.

Lots of work remaining on the test front :-) This is a good starting
point. I've reviewed both patches, with lots of comments. Please address
the ones you think should be addressed immediately, and record the other
ones in \todo comments. I see no blocking issue, so I expect to ack v4.

> Niklas Söderlund (2):
>   lc-compliance: Add a libcamera compliance tool
>   lc-compliance: Add test stopping single stream with requests queued
> 
>  src/lc-compliance/main.cpp           | 139 ++++++++++++++++++
>  src/lc-compliance/meson.build        |  25 ++++
>  src/lc-compliance/results.cpp        |  75 ++++++++++
>  src/lc-compliance/results.h          |  45 ++++++
>  src/lc-compliance/simple_capture.cpp | 212 +++++++++++++++++++++++++++
>  src/lc-compliance/simple_capture.h   |  68 +++++++++
>  src/lc-compliance/single_stream.cpp  |  98 +++++++++++++
>  src/lc-compliance/tests.h            |  16 ++
>  src/meson.build                      |   2 +
>  9 files changed, 680 insertions(+)
>  create mode 100644 src/lc-compliance/main.cpp
>  create mode 100644 src/lc-compliance/meson.build
>  create mode 100644 src/lc-compliance/results.cpp
>  create mode 100644 src/lc-compliance/results.h
>  create mode 100644 src/lc-compliance/simple_capture.cpp
>  create mode 100644 src/lc-compliance/simple_capture.h
>  create mode 100644 src/lc-compliance/single_stream.cpp
>  create mode 100644 src/lc-compliance/tests.h