summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp50
1 files changed, 20 insertions, 30 deletions
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 83ac666c..e0774328 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -52,7 +52,6 @@ class RkISP1CameraData;
struct RkISP1FrameInfo {
unsigned int frame;
- Request *request;
FrameBuffer *paramBuffer;
FrameBuffer *statBuffer;
@@ -68,14 +67,12 @@ class RkISP1Frames
public:
RkISP1Frames(PipelineHandler *pipe);
- RkISP1FrameInfo *create(const RkISP1CameraData *data, Request *request,
- bool isRaw);
+ RkISP1FrameInfo *create(const RkISP1CameraData *data, bool isRaw);
int destroy(unsigned int frame);
void clear();
RkISP1FrameInfo *find(unsigned int frame);
RkISP1FrameInfo *find(FrameBuffer *buffer);
- RkISP1FrameInfo *find(Request *request);
private:
PipelineHandlerRkISP1 *pipe_;
@@ -215,13 +212,13 @@ RkISP1Frames::RkISP1Frames(PipelineHandler *pipe)
{
}
-RkISP1FrameInfo *RkISP1Frames::create(const RkISP1CameraData *data, Request *request,
- bool isRaw)
+RkISP1FrameInfo *RkISP1Frames::create(const RkISP1CameraData *data, bool isRaw)
{
unsigned int frame = data->frame_;
FrameBuffer *paramBuffer = nullptr;
FrameBuffer *statBuffer = nullptr;
+ FrameBuffer *mainPathBuffer = nullptr;
if (!isRaw) {
if (pipe_->availableParamBuffers_.empty()) {
@@ -241,16 +238,22 @@ RkISP1FrameInfo *RkISP1Frames::create(const RkISP1CameraData *data, Request *req
pipe_->availableStatBuffers_.pop();
}
- FrameBuffer *mainPathBuffer = request->findBuffer(&data->mainPathStream_);
- FrameBuffer *selfPathBuffer = request->findBuffer(&data->selfPathStream_);
+ if (pipe_->availableMainPathBuffers_.empty()) {
+ LOG(RkISP1, Error) << "Main path buffer underrun";
+ return nullptr;
+ }
+ mainPathBuffer = pipe_->availableMainPathBuffers_.front();
+ pipe_->availableMainPathBuffers_.pop();
+
+ //FrameBuffer *mainPathBuffer = request->findBuffer(&data->mainPathStream_);
+ //FrameBuffer *selfPathBuffer = request->findBuffer(&data->selfPathStream_);
RkISP1FrameInfo *info = new RkISP1FrameInfo;
info->frame = frame;
- info->request = request;
info->paramBuffer = paramBuffer;
info->mainPathBuffer = mainPathBuffer;
- info->selfPathBuffer = selfPathBuffer;
+ //info->selfPathBuffer = selfPathBuffer;
info->statBuffer = statBuffer;
info->paramDequeued = false;
info->metadataProcessed = false;
@@ -319,20 +322,6 @@ RkISP1FrameInfo *RkISP1Frames::find(FrameBuffer *buffer)
return nullptr;
}
-RkISP1FrameInfo *RkISP1Frames::find(Request *request)
-{
- for (auto &itInfo : frameInfo_) {
- RkISP1FrameInfo *info = itInfo.second;
-
- if (info->request == request)
- return info;
- }
-
- LOG(RkISP1, Fatal) << "Can't locate info from request";
-
- return nullptr;
-}
-
PipelineHandlerRkISP1 *RkISP1CameraData::pipe()
{
return static_cast<PipelineHandlerRkISP1 *>(Camera::Private::pipe());
@@ -402,13 +391,14 @@ void RkISP1CameraData::setSensorControls([[maybe_unused]] unsigned int frame,
delayedCtrls_->push(sensorControls);
}
-void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &metadata)
+void RkISP1CameraData::metadataReady(unsigned int frame,
+ [[maybe_unused]] const ControlList &metadata)
{
RkISP1FrameInfo *info = frameInfo_.find(frame);
if (!info)
return;
- info->request->metadata().merge(metadata);
+ //info->request->metadata().merge(metadata);
info->metadataProcessed = true;
pipe()->tryCompleteRequest(info);
@@ -1061,7 +1051,7 @@ int PipelineHandlerRkISP1::queueRequestDevice(Camera *camera, Request *request)
{
RkISP1CameraData *data = cameraData(camera);
- RkISP1FrameInfo *info = data->frameInfo_.create(data, request, isRaw_);
+ RkISP1FrameInfo *info = data->frameInfo_.create(data, isRaw_);
if (!info)
return -ENOENT;
@@ -1272,9 +1262,9 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
void PipelineHandlerRkISP1::tryCompleteRequest(RkISP1FrameInfo *info)
{
RkISP1CameraData *data = cameraData(activeCamera_);
- Request *request = info->request;
+ //Request *request = info->request;
- if (request->hasPendingBuffers())
+ //if (request->hasPendingBuffers())
return;
if (!info->metadataProcessed)
@@ -1285,7 +1275,7 @@ void PipelineHandlerRkISP1::tryCompleteRequest(RkISP1FrameInfo *info)
data->frameInfo_.destroy(info->frame);
- completeRequest(request);
+ //completeRequest(request);
}
void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)