[libcamera-devel] [PATCH v3 00/11] IPU3 Debug Improvements

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Mar 25 14:42:20 CET 2021


Ok, so this is only partially a v3. Some of these patches were part of
the other series at v2, so this one got bumped.

Anyway, here's the remainder of my current patches that were developed
while investigating the reliability of the IPU3. Many of which I believe
are worthy for integration and discussion.

They're somewhat of an unrelated bunch, but rather than post
individually, they may as well be grouped together in the form of
'general fixups and improvements', and hopefully these help towards
improving general maintenance, but they're not specifically IPU3.

...

The IPC Proxy is extended to have a state machine to go further than
simply tracking a running_ boolean.

The Request object is no longer friends with a buffer, and is extended
to support sequence numbers, and printing as a string. The request
canary is promoted away from RFC as I feel it has real benefit, but it
can still be considered optional.

The Camera class now validates requests are completed in the correct
state, and adds an assertion to guarantee that all pipeline handlers
complete all requests when they are stopped. The state machine
validation is also extended to report which function was responsible for
the call in the event of a failed state check, as this is key
information for determining what failure occured.

Finally, some improvements to the IPU3 Frames class tidy things up and
add guarantees to ensure we correctly match resources with a FrameInfo
when required.


Kieran Bingham (11):
  utils: ipc: proxy: Track IPA with a state machine
  libcamera: buffer: Break friendship with Request
  libcamera: request: Provide a sequence number
  libcamera: request: Add a toString()
  libcamera: request: A request canary
  libcamera: camera: Validate requests are completed in Running state
  libcamera: camera: Report function which fails access control
  libcamera: camera: Extend with a Stopping state
  libcamera: camera: Assert pipelines complete all requests
  libcamera: pipeline: ipu3: frames: Fail if the FrameInfo can't be
    found
  libcamera: pipeline: ipu3: frames: Use the request sequence

 include/libcamera/buffer.h                    |  1 -
 include/libcamera/internal/pipeline_handler.h |  5 +-
 include/libcamera/request.h                   |  7 ++
 src/libcamera/camera.cpp                      | 77 +++++++++++++------
 src/libcamera/pipeline/ipu3/frames.cpp        | 10 +--
 src/libcamera/pipeline/ipu3/frames.h          |  1 -
 src/libcamera/pipeline_handler.cpp            | 19 +++++
 src/libcamera/request.cpp                     | 68 +++++++++++++---
 .../module_ipa_proxy.cpp.tmpl                 |  8 +-
 .../module_ipa_proxy.h.tmpl                   |  8 +-
 .../libcamera_templates/proxy_functions.tmpl  |  7 +-
 11 files changed, 165 insertions(+), 46 deletions(-)

-- 
2.25.1



More information about the libcamera-devel mailing list