libcamera: pipelines: Align bookkeeping in queueRequest()

Expecting pipeline handler implementations of queueRequest() to call
the base class queueRequest() at the correct point have led to different
behaviors between the pipelines.

Fix this by splitting queueRequest() into a base class implementation
which handles the bookkeeping and a new queueRequestDevice() that is
to be implemented by pipeline handlers and only deals with committing the
request to the device.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Niklas Söderlund
2019-10-27 04:53:02 +01:00
parent 7df177fd88
commit 3de65b43a6
6 changed files with 37 additions and 27 deletions

View File

@@ -77,7 +77,7 @@ public:
virtual int start(Camera *camera) = 0;
virtual void stop(Camera *camera) = 0;
virtual int queueRequest(Camera *camera, Request *request);
int queueRequest(Camera *camera, Request *request);
bool completeBuffer(Camera *camera, Request *request, Buffer *buffer);
void completeRequest(Camera *camera, Request *request);
@@ -89,6 +89,8 @@ protected:
std::unique_ptr<CameraData> data);
void hotplugMediaDevice(MediaDevice *media);
virtual int queueRequestDevice(Camera *camera, Request *request) = 0;
CameraData *cameraData(const Camera *camera);
CameraManager *manager_;