summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcamera/internal/software_isp/software_isp.h4
-rw-r--r--src/libcamera/pipeline/simple/simple.cpp8
-rw-r--r--src/libcamera/software_isp/debayer.cpp3
-rw-r--r--src/libcamera/software_isp/debayer.h2
-rw-r--r--src/libcamera/software_isp/debayer_cpu.cpp12
-rw-r--r--src/libcamera/software_isp/debayer_cpu.h2
-rw-r--r--src/libcamera/software_isp/software_isp.cpp10
7 files changed, 24 insertions, 17 deletions
diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h
index 3602bce8..3a84418e 100644
--- a/include/libcamera/internal/software_isp/software_isp.h
+++ b/include/libcamera/internal/software_isp/software_isp.h
@@ -73,10 +73,10 @@ public:
int start();
void stop();
- int queueBuffers(FrameBuffer *input,
+ int queueBuffers(uint32_t frame, FrameBuffer *input,
const std::map<const Stream *, FrameBuffer *> &outputs);
- void process(FrameBuffer *input, FrameBuffer *output);
+ void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output);
Signal<FrameBuffer *> inputBufferReady;
Signal<FrameBuffer *> outputBufferReady;
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 5aa52789..ff43814c 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -861,7 +861,13 @@ void SimpleCameraData::bufferReady(FrameBuffer *buffer)
if (converter_)
converter_->queueBuffers(buffer, conversionQueue_.front());
else
- swIsp_->queueBuffers(buffer, conversionQueue_.front());
+ /*
+ * request->sequence() cannot be retrieved from `buffer' inside
+ * queueBuffers because unique_ptr's make buffer->request() invalid
+ * already here.
+ */
+ swIsp_->queueBuffers(request->sequence(), buffer,
+ conversionQueue_.front());
conversionQueue_.pop();
return;
diff --git a/src/libcamera/software_isp/debayer.cpp b/src/libcamera/software_isp/debayer.cpp
index db26c380..f0b83261 100644
--- a/src/libcamera/software_isp/debayer.cpp
+++ b/src/libcamera/software_isp/debayer.cpp
@@ -94,8 +94,9 @@ Debayer::~Debayer()
*/
/**
- * \fn void Debayer::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)
+ * \fn void Debayer::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)
* \brief Process the bayer data into the requested format
+ * \param[in] frame The frame number
* \param[in] input The input buffer
* \param[in] output The output buffer
* \param[in] params The parameters to be used in debayering
diff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/debayer.h
index c151fe5d..d7ca060d 100644
--- a/src/libcamera/software_isp/debayer.h
+++ b/src/libcamera/software_isp/debayer.h
@@ -40,7 +40,7 @@ public:
virtual std::tuple<unsigned int, unsigned int>
strideAndFrameSize(const PixelFormat &outputFormat, const Size &size) = 0;
- virtual void process(FrameBuffer *input, FrameBuffer *output, DebayerParams params) = 0;
+ virtual void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params) = 0;
virtual SizeRange sizes(PixelFormat inputFormat, const Size &inputSize) = 0;
diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp
index 6cc6946c..cf5ecdf7 100644
--- a/src/libcamera/software_isp/debayer_cpu.cpp
+++ b/src/libcamera/software_isp/debayer_cpu.cpp
@@ -611,8 +611,7 @@ void DebayerCpu::memcpyNextLine(const uint8_t *linePointers[])
memcpy(lineBuffers_[lineBufferIndex_].data(),
linePointers[patternHeight] - lineBufferPadding_,
lineBufferLength_);
- linePointers[patternHeight] = lineBuffers_[lineBufferIndex_].data()
- + lineBufferPadding_;
+ linePointers[patternHeight] = lineBuffers_[lineBufferIndex_].data() + lineBufferPadding_;
lineBufferIndex_ = (lineBufferIndex_ + 1) % (patternHeight + 1);
}
@@ -748,7 +747,7 @@ inline int64_t timeDiff(timespec &after, timespec &before)
} /* namespace */
-void DebayerCpu::process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)
+void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)
{
timespec frameStartTime;
@@ -808,12 +807,11 @@ void DebayerCpu::process(FrameBuffer *input, FrameBuffer *output, DebayerParams
}
/*
- * Frame and buffer ids are currently not used, so pass zeros as parameters.
+ * Buffer ids are currently not used, so pass zeros as its parameter.
*
- * \todo Pass real values once frame is passed here and stats buffer passing
- * is changed.
+ * \todo Pass real bufferId once stats buffer passing is changed.
*/
- stats_->finishFrame(0, 0);
+ stats_->finishFrame(frame, 0);
outputBufferReady.emit(output);
inputBufferReady.emit(input);
}
diff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/debayer_cpu.h
index 8237a64b..2c47e7c6 100644
--- a/src/libcamera/software_isp/debayer_cpu.h
+++ b/src/libcamera/software_isp/debayer_cpu.h
@@ -36,7 +36,7 @@ public:
std::vector<PixelFormat> formats(PixelFormat input);
std::tuple<unsigned int, unsigned int>
strideAndFrameSize(const PixelFormat &outputFormat, const Size &size);
- void process(FrameBuffer *input, FrameBuffer *output, DebayerParams params);
+ void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params);
SizeRange sizes(PixelFormat inputFormat, const Size &inputSize);
/**
diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp
index a3855568..a08b0c2e 100644
--- a/src/libcamera/software_isp/software_isp.cpp
+++ b/src/libcamera/software_isp/software_isp.cpp
@@ -278,12 +278,13 @@ int SoftwareIsp::exportBuffers(const Stream *stream, unsigned int count,
/**
* \brief Queue buffers to Software ISP
+ * \param[in] frame The frame number
* \param[in] input The input framebuffer
* \param[in] outputs The container holding the output stream pointers and
* their respective frame buffer outputs
* \return 0 on success, a negative errno on failure
*/
-int SoftwareIsp::queueBuffers(FrameBuffer *input,
+int SoftwareIsp::queueBuffers(uint32_t frame, FrameBuffer *input,
const std::map<const Stream *, FrameBuffer *> &outputs)
{
/*
@@ -301,7 +302,7 @@ int SoftwareIsp::queueBuffers(FrameBuffer *input,
}
for (auto iter = outputs.begin(); iter != outputs.end(); iter++)
- process(input, iter->second);
+ process(frame, input, iter->second);
return 0;
}
@@ -333,13 +334,14 @@ void SoftwareIsp::stop()
/**
* \brief Passes the input framebuffer to the ISP worker to process
+ * \param[in] frame The frame number
* \param[in] input The input framebuffer
* \param[out] output The framebuffer to write the processed frame to
*/
-void SoftwareIsp::process(FrameBuffer *input, FrameBuffer *output)
+void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output)
{
debayer_->invokeMethod(&DebayerCpu::process,
- ConnectionTypeQueued, input, output, debayerParams_);
+ ConnectionTypeQueued, frame, input, output, debayerParams_);
}
void SoftwareIsp::saveIspParams()