summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2023-10-13 08:48:26 +0100
committerKieran Bingham <kieran.bingham@ideasonboard.com>2023-10-18 11:01:22 +0100
commit6f44b9f96950d0880a10b7e62502788bbc878f9f (patch)
treed69d196c51f3e1011255ceb424d18fc51dadd124
parent71bb5b345f5f5fe251e73082b5216708ab660a5c (diff)
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>
-rw-r--r--include/libcamera/ipa/raspberrypi.mojom6
-rw-r--r--src/ipa/rpi/common/ipa_base.cpp2
-rw-r--r--src/libcamera/pipeline/rpi/vc4/vc4.cpp5
3 files changed, 9 insertions, 4 deletions
diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom
index ab4c4e2e..5986c436 100644
--- a/include/libcamera/ipa/raspberrypi.mojom
+++ b/include/libcamera/ipa/raspberrypi.mojom
@@ -22,6 +22,9 @@ struct SensorConfig {
struct InitParams {
bool lensPresent;
libcamera.IPACameraSensorInfo sensorInfo;
+ /* PISP specific */
+ libcamera.SharedFD fe;
+ libcamera.SharedFD be;
};
struct InitResult {
@@ -219,13 +222,14 @@ interface IPARPiEventInterface {
* \fn prepareIspComplete()
* \brief Signal completion of \a prepareIsp
* \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
* the \a prepareIsp signal has completed, and the ISP is ready to start
* processing the frame. The embedded data buffer may be recycled after
* this event.
*/
- prepareIspComplete(BufferIds buffers);
+ prepareIspComplete(BufferIds buffers, bool stitchSwapBuffers);
/**
* \fn processStatsComplete()
diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp
index 5939fe57..97f647a9 100644
--- a/src/ipa/rpi/common/ipa_base.cpp
+++ b/src/ipa/rpi/common/ipa_base.cpp
@@ -446,7 +446,7 @@ void IpaBase::prepareIsp(const PrepareParams &params)
frameCount_++;
/* Ready to push the input buffer into the ISP. */
- prepareIspComplete.emit(params.buffers);
+ prepareIspComplete.emit(params.buffers, false);
}
void IpaBase::processStats(const ProcessParams &params)
diff --git a/src/libcamera/pipeline/rpi/vc4/vc4.cpp b/src/libcamera/pipeline/rpi/vc4/vc4.cpp
index bc90d632..233473e2 100644
--- a/src/libcamera/pipeline/rpi/vc4/vc4.cpp
+++ b/src/libcamera/pipeline/rpi/vc4/vc4.cpp
@@ -78,7 +78,7 @@ public:
void ispOutputDequeue(FrameBuffer *buffer);
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 setCameraTimeout(uint32_t maxFrameLengthMs);
@@ -833,7 +833,8 @@ void Vc4CameraData::processStatsComplete(const ipa::RPi::BufferIds &buffers)
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 bayer = buffers.bayer & RPi::MaskID;