mojom: pipeline: ipa: rpi: Add fields for PiSP objects

Add the PiSP Frontend and Backend SharedMemObject file descriptors to
the ipa::init() call. This will allow the pipeline handler to pass these
objects to the IPA after construction.

Add a flag to indicate if buffer swaps are needed when starting the
ISP for the stitch block.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Naushir Patuck 2023-10-13 08:48:26 +01:00 committed by Kieran Bingham
parent 71bb5b345f
commit 6f44b9f969
3 changed files with 9 additions and 4 deletions

View file

@ -22,6 +22,9 @@ struct SensorConfig {
struct InitParams { struct InitParams {
bool lensPresent; bool lensPresent;
libcamera.IPACameraSensorInfo sensorInfo; libcamera.IPACameraSensorInfo sensorInfo;
/* PISP specific */
libcamera.SharedFD fe;
libcamera.SharedFD be;
}; };
struct InitResult { struct InitResult {
@ -219,13 +222,14 @@ interface IPARPiEventInterface {
* \fn prepareIspComplete() * \fn prepareIspComplete()
* \brief Signal completion of \a prepareIsp * \brief Signal completion of \a prepareIsp
* \param[in] buffers Bayer and embedded buffers actioned. * \param[in] buffers Bayer and embedded buffers actioned.
* \param[in] stitchSwapBuffers Whether the stitch block buffers need to be swapped.
* *
* This asynchronous event is signalled to the pipeline handler once * This asynchronous event is signalled to the pipeline handler once
* the \a prepareIsp signal has completed, and the ISP is ready to start * the \a prepareIsp signal has completed, and the ISP is ready to start
* processing the frame. The embedded data buffer may be recycled after * processing the frame. The embedded data buffer may be recycled after
* this event. * this event.
*/ */
prepareIspComplete(BufferIds buffers); prepareIspComplete(BufferIds buffers, bool stitchSwapBuffers);
/** /**
* \fn processStatsComplete() * \fn processStatsComplete()

View file

@ -446,7 +446,7 @@ void IpaBase::prepareIsp(const PrepareParams &params)
frameCount_++; frameCount_++;
/* Ready to push the input buffer into the ISP. */ /* Ready to push the input buffer into the ISP. */
prepareIspComplete.emit(params.buffers); prepareIspComplete.emit(params.buffers, false);
} }
void IpaBase::processStats(const ProcessParams &params) void IpaBase::processStats(const ProcessParams &params)

View file

@ -78,7 +78,7 @@ public:
void ispOutputDequeue(FrameBuffer *buffer); void ispOutputDequeue(FrameBuffer *buffer);
void processStatsComplete(const ipa::RPi::BufferIds &buffers); void processStatsComplete(const ipa::RPi::BufferIds &buffers);
void prepareIspComplete(const ipa::RPi::BufferIds &buffers); void prepareIspComplete(const ipa::RPi::BufferIds &buffers, bool stitchSwapBuffers);
void setIspControls(const ControlList &controls); void setIspControls(const ControlList &controls);
void setCameraTimeout(uint32_t maxFrameLengthMs); void setCameraTimeout(uint32_t maxFrameLengthMs);
@ -833,7 +833,8 @@ void Vc4CameraData::processStatsComplete(const ipa::RPi::BufferIds &buffers)
handleState(); handleState();
} }
void Vc4CameraData::prepareIspComplete(const ipa::RPi::BufferIds &buffers) void Vc4CameraData::prepareIspComplete(const ipa::RPi::BufferIds &buffers,
[[maybe_unused]] bool stitchSwapBuffers)
{ {
unsigned int embeddedId = buffers.embedded & RPi::MaskID; unsigned int embeddedId = buffers.embedded & RPi::MaskID;
unsigned int bayer = buffers.bayer & RPi::MaskID; unsigned int bayer = buffers.bayer & RPi::MaskID;