summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-07-12 17:17:35 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-07-14 16:00:40 +0300
commit185fe3d4b4d1264b2d72f8c92d17e248092efc46 (patch)
tree7141f270c55f48f67701ec9109f01bf0c5142a56 /src/libcamera/pipeline
parenta775234d6612a1fbd3bb586de4704883c1fcd817 (diff)
libcamera: pipeline_handler: Simplify request completion
libcamera guarantees that requests complete in sequence. This requirement is currently pushed down to pipeline handlers. Three out of four of our pipeline handlers implement that requirement based on the sole assumption that buffers will always complete in sequeuence, while the IPU3 pipeline handler implements a more complex logic. It turns out that the logic can be moved to the base PipelineHandler class with support from the Request class. Do so to simplify the pipeline handlers. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'src/libcamera/pipeline')
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp10
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp4
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp2
-rw-r--r--src/libcamera/pipeline/vimc.cpp2
4 files changed, 5 insertions, 13 deletions
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index e4efb972..1abd20e5 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -927,14 +927,8 @@ void IPU3CameraData::imguOutputBufferReady(Buffer *buffer)
/* Request not completed yet, return here. */
return;
- /* Complete the pending requests in queueing order. */
- while (1) {
- request = queuedRequests_.front();
- if (request->hasPendingBuffers())
- break;
-
- pipe_->completeRequest(camera_, request);
- }
+ /* Mark the request as complete. */
+ pipe_->completeRequest(camera_, request);
}
/**
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 4a5898d2..38323643 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -491,9 +491,7 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
void PipelineHandlerRkISP1::bufferReady(Buffer *buffer)
{
ASSERT(activeCamera_);
-
- RkISP1CameraData *data = cameraData(activeCamera_);
- Request *request = data->queuedRequests_.front();
+ Request *request = buffer->request();
completeBuffer(activeCamera_, request, buffer);
completeRequest(activeCamera_, request);
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 72313cfd..387d71ef 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -382,7 +382,7 @@ int UVCCameraData::init(MediaEntity *entity)
void UVCCameraData::bufferReady(Buffer *buffer)
{
- Request *request = queuedRequests_.front();
+ Request *request = buffer->request();
pipe_->completeBuffer(camera_, request, buffer);
pipe_->completeRequest(camera_, request);
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index f8a58be0..ff2529c9 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -376,7 +376,7 @@ int VimcCameraData::init(MediaDevice *media)
void VimcCameraData::bufferReady(Buffer *buffer)
{
- Request *request = queuedRequests_.front();
+ Request *request = buffer->request();
pipe_->completeBuffer(camera_, request, buffer);
pipe_->completeRequest(camera_, request);