summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ipa/vimc/vimc.cpp19
-rw-r--r--src/libcamera/pipeline/vimc/vimc.cpp11
2 files changed, 30 insertions, 0 deletions
diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp
index 7d9d22d0..8481b82b 100644
--- a/src/ipa/vimc/vimc.cpp
+++ b/src/ipa/vimc/vimc.cpp
@@ -43,6 +43,9 @@ public:
void mapBuffers(const std::vector<IPABuffer> &buffers) override;
void unmapBuffers(const std::vector<unsigned int> &ids) override;
+ void fillParams(uint32_t frame, uint32_t bufferId) override;
+ void processControls(uint32_t frame, const ControlList &controls) override;
+
private:
void initTrace();
void trace(enum ipa::vimc::IPAOperationCode operation);
@@ -126,6 +129,22 @@ void IPAVimc::unmapBuffers(const std::vector<unsigned int> &ids)
}
}
+void IPAVimc::fillParams([[maybe_unused]] uint32_t frame, uint32_t bufferId)
+{
+ auto it = buffers_.find(bufferId);
+ if (it == buffers_.end()) {
+ LOG(IPAVimc, Error) << "Could not find parameter buffer";
+ return;
+ }
+
+ paramsFilled.emit(bufferId);
+}
+
+void IPAVimc::processControls([[maybe_unused]] uint32_t frame,
+ [[maybe_unused]] const ControlList &controls)
+{
+}
+
void IPAVimc::initTrace()
{
struct stat fifoStat;
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index e434cfbe..92b30f2e 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -52,6 +52,7 @@ public:
int init();
int allocateMockIPABuffers();
void bufferReady(FrameBuffer *buffer);
+ void paramsFilled(unsigned int id);
MediaDevice *media_;
std::unique_ptr<CameraSensor> sensor_;
@@ -431,6 +432,8 @@ int PipelineHandlerVimc::queueRequestDevice(Camera *camera, Request *request)
if (ret < 0)
return ret;
+ data->ipa_->processControls(request->sequence(), request->controls());
+
return 0;
}
@@ -464,6 +467,8 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
return false;
}
+ data->ipa_->paramsFilled.connect(data.get(), &VimcCameraData::paramsFilled);
+
std::string conf = data->ipa_->configurationFile("vimc.conf");
data->ipa_->init(IPASettings{ conf, data->sensor_->model() });
@@ -568,6 +573,8 @@ void VimcCameraData::bufferReady(FrameBuffer *buffer)
pipe_->completeBuffer(request, buffer);
pipe_->completeRequest(request);
+
+ ipa_->fillParams(request->sequence(), mockIPABufs_[0]->cookie());
}
int VimcCameraData::allocateMockIPABuffers()
@@ -585,6 +592,10 @@ int VimcCameraData::allocateMockIPABuffers()
return video_->exportBuffers(kBufCount, &mockIPABufs_);
}
+void VimcCameraData::paramsFilled([[maybe_unused]] unsigned int id)
+{
+}
+
REGISTER_PIPELINE_HANDLER(PipelineHandlerVimc)
} /* namespace libcamera */