[libcamera-devel] [RFC PATCH 0/8] Request metadata: SensorSequence

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Dec 7 15:21:34 CET 2021


Hi Naush,

On Tue, Dec 07, 2021 at 08:42:36AM +0000, Naushir Patuck wrote:
> On Tue, 7 Dec 2021 at 00:07, Laurent Pinchart wrote:
> > On Mon, Dec 06, 2021 at 11:39:40PM +0000, Kieran Bingham wrote:
> > > When completing a request, the individual stream buffers contain a
> > > sequence number. This number is generated by the device that ultimately
> > > fills that stream, but it might not be the sensor. Processing through an
> > > ISP could cause the sequence numbers and timestamp data associated with
> > > the completed buffer to be values representative of the ISP processing
> > > rather than the (intended) capture device.
> > >
> > > Provide a new metadata control, still to be fully sketched out which
> > > gives us a defined value to report the Camera sequence number. This
> > > allows pipeline handlers to correctly set the value according to the
> > > device that represents the capture from the sensor.
> > >
> > > This plumbing then allows applications to detect frame drops, which were
> > > otherwise going unnoticed, and as such some basic additions have been
> > > made to cam, qcam, and gstreamer to support this new data.
> > >
> > > Still possible:
> > >  - Adding a validation to lc-compliance to make sure pipelines set the
> > >    SensorSequence on every frame.
> > >
> > >  - Probably expecting some better gstreamer event integration perhaps?
> > >
> > >  - qcam should report more statistics on the processing overall
> > >
> > >  - libcamera Tracepoints could be added as an event to track when
> > >    frames are detected as dropped by the core framework.
> > >
> > > Anything else?
> >
> > A basic design question: when a frame is dropped, shouldn't we report
> > the corresponding request as failed ? That's how the Android camera HAL
> > API operates, and while that by itself isn't a good enough reason to do
> > that same, I think it offers a better way to ensure that controls get
> > synchronized with the buffers that frames are captured to.
> 
> For the Raspberry Pi platforms, it is possible for the Unicam driver
> to drop frames without the knowledge of the pipeline handler, if for example
> we do not recycle bayer buffers quick enough.

So the driver doesn't increment the sequence number in that case ? Could
this be fixed ?

> Allowing the application
> to look at sensor timestamps would allow it to detect these drops. Unless
> I am mistaken, this would not be possible by failing the request, as the
> sensor buffer recycling loop is asynchronous to the application request
> loop. Having said that, they could be synchronised....

This is also related to implementing true per-frame control,
synchronizing the controls from the request with the buffers in which
images are captured :-)

> > > Kieran Bingham (8):
> > >   libcamera: controls: Add SensorSequence metadata control
> > >   libcamera: pipeline: Set the Sensor sequence number for all pipelines
> > >   cam: Use SensorTimestamp rather than buffer metadata
> > >   cam: Use Sensor sequence numbers and detect frame drop
> > >   qcam: main_window: Fix include ordering
> > >   qcam: Use Sensor sequence numbers and detect frame drop
> > >   gstreamer: gstlibcamerasrc: Fix include ordering
> > >   gstreamer: Use Sensor sequence numbers and detect frame drop
> > >
> > >  src/cam/camera_session.cpp                    | 24 ++++++++--
> > >  src/cam/camera_session.h                      |  1 +
> > >  src/gstreamer/gstlibcamerasrc.cpp             | 46 +++++++++++++++----
> > >  src/libcamera/control_ids.yaml                |  8 ++++
> > >  src/libcamera/pipeline/ipu3/ipu3.cpp          |  4 +-
> > >  .../pipeline/raspberrypi/raspberrypi.cpp      |  3 ++
> > >  src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  4 +-
> > >  src/libcamera/pipeline/simple/simple.cpp      | 12 +++--
> > >  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |  2 +
> > >  src/qcam/main_window.cpp                      | 28 +++++++++--
> > >  src/qcam/main_window.h                        |  1 +
> > >  11 files changed, 111 insertions(+), 22 deletions(-)

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list