libcamera: pipeline_handler: Move waitingRequests_ into camera class

The waiting requests of one camera should not be able to influence
queuing to another camera. Currently a request that is in the
waitingQueue and waiting for preparation blocks all requests of other
cameras even if they are already prepared. To fix that replace the
single waitingRequests_ queue with one queue per camera.

Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Umang Jain <uajain@igalia.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Tested-by: Sven Püschel <s.pueschel@pengutronix.de>
This commit is contained in:
Stefan Klug
2025-07-17 14:59:21 +02:00
parent c0586867a9
commit 0c5523c908
4 changed files with 28 additions and 14 deletions
+2
View File
@@ -10,6 +10,7 @@
#include <atomic>
#include <list>
#include <memory>
#include <queue>
#include <set>
#include <stdint.h>
#include <string>
@@ -36,6 +37,7 @@ public:
const PipelineHandler *pipe() const { return pipe_.get(); }
std::list<Request *> queuedRequests_;
std::queue<Request *> waitingRequests_;
ControlInfoMap controlInfo_;
ControlList properties_;
@@ -8,7 +8,6 @@
#pragma once
#include <memory>
#include <queue>
#include <string>
#include <sys/types.h>
#include <vector>
@@ -89,13 +88,11 @@ private:
virtual void disconnect();
void doQueueRequest(Request *request);
void doQueueRequests();
void doQueueRequests(Camera *camera);
std::vector<std::shared_ptr<MediaDevice>> mediaDevices_;
std::vector<std::weak_ptr<Camera>> cameras_;
std::queue<Request *> waitingRequests_;
const char *name_;
unsigned int useCount_;