[RFC,v1,5/7] libcamera: camera: Make `waitingRequests_` an `std::deque`
diff mbox series

Message ID 20250924124713.3361707-6-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • libcamera: camera: Add `applyControls()`
Related show

Commit Message

Barnabás Pőcze Sept. 24, 2025, 12:47 p.m. UTC
Use `std::deque` instead of `std::queue` because an `std::queue` cannot
be iterated.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 include/libcamera/internal/camera.h | 2 +-
 src/libcamera/pipeline_handler.cpp  | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

Comments

Kieran Bingham Oct. 7, 2025, 7:50 a.m. UTC | #1
Quoting Barnabás Pőcze (2025-09-24 13:47:10)
> Use `std::deque` instead of `std::queue` because an `std::queue` cannot
> be iterated.
> 

I can't imagine any specific performance impact or penalty here. This is
a small list.

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> ---
>  include/libcamera/internal/camera.h | 2 +-
>  src/libcamera/pipeline_handler.cpp  | 8 ++++----
>  2 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h
> index 8a2e9ed58..0f50c14a5 100644
> --- a/include/libcamera/internal/camera.h
> +++ b/include/libcamera/internal/camera.h
> @@ -37,7 +37,7 @@ public:
>         const PipelineHandler *pipe() const { return pipe_.get(); }
>  
>         std::list<Request *> queuedRequests_;
> -       std::queue<Request *> waitingRequests_;
> +       std::deque<Request *> waitingRequests_;
>         ControlInfoMap controlInfo_;
>         ControlList properties_;
>  
> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
> index e5f9e55c9..d0d3fbc79 100644
> --- a/src/libcamera/pipeline_handler.cpp
> +++ b/src/libcamera/pipeline_handler.cpp
> @@ -370,7 +370,7 @@ void PipelineHandler::stop(Camera *camera)
>          * after the device to keep them in order.
>          */
>         Camera::Private *data = camera->_d();
> -       std::queue<Request *> waitingRequests;
> +       std::deque<Request *> waitingRequests;
>         waitingRequests.swap(data->waitingRequests_);
>  
>         /* Stop the pipeline handler and let the queued requests complete. */
> @@ -379,7 +379,7 @@ void PipelineHandler::stop(Camera *camera)
>         /* Cancel and signal as complete all waiting requests. */
>         while (!waitingRequests.empty()) {
>                 Request *request = waitingRequests.front();
> -               waitingRequests.pop();
> +               waitingRequests.pop_front();
>                 cancelRequest(request);
>         }
>  
> @@ -461,7 +461,7 @@ void PipelineHandler::queueRequest(Request *request)
>  
>         Camera *camera = request->_d()->camera();
>         Camera::Private *data = camera->_d();
> -       data->waitingRequests_.push(request);
> +       data->waitingRequests_.push_back(request);
>  
>         request->_d()->prepare(300ms);
>  }
> @@ -510,7 +510,7 @@ void PipelineHandler::doQueueRequests(Camera *camera)
>                  * Pop the request first, in case doQueueRequests() is called
>                  * recursively from within doQueueRequest()
>                  */
> -               data->waitingRequests_.pop();
> +               data->waitingRequests_.pop_front();
>                 doQueueRequest(request);
>         }
>  }
> -- 
> 2.51.0
>
Barnabás Pőcze Oct. 7, 2025, 8:48 a.m. UTC | #2
2025. 10. 07. 9:50 keltezéssel, Kieran Bingham írta:
> Quoting Barnabás Pőcze (2025-09-24 13:47:10)
>> Use `std::deque` instead of `std::queue` because an `std::queue` cannot
>> be iterated.
>>
> 
> I can't imagine any specific performance impact or penalty here. This is
> a small list.

`std::queue` uses `std::deque` by default as the underlying container,
so there should be no difference at all.


> 
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> 
>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
>> ---
>>   include/libcamera/internal/camera.h | 2 +-
>>   src/libcamera/pipeline_handler.cpp  | 8 ++++----
>>   2 files changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h
>> index 8a2e9ed58..0f50c14a5 100644
>> --- a/include/libcamera/internal/camera.h
>> +++ b/include/libcamera/internal/camera.h
>> @@ -37,7 +37,7 @@ public:
>>          const PipelineHandler *pipe() const { return pipe_.get(); }
>>   
>>          std::list<Request *> queuedRequests_;
>> -       std::queue<Request *> waitingRequests_;
>> +       std::deque<Request *> waitingRequests_;
>>          ControlInfoMap controlInfo_;
>>          ControlList properties_;
>>   
>> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
>> index e5f9e55c9..d0d3fbc79 100644
>> --- a/src/libcamera/pipeline_handler.cpp
>> +++ b/src/libcamera/pipeline_handler.cpp
>> @@ -370,7 +370,7 @@ void PipelineHandler::stop(Camera *camera)
>>           * after the device to keep them in order.
>>           */
>>          Camera::Private *data = camera->_d();
>> -       std::queue<Request *> waitingRequests;
>> +       std::deque<Request *> waitingRequests;
>>          waitingRequests.swap(data->waitingRequests_);
>>   
>>          /* Stop the pipeline handler and let the queued requests complete. */
>> @@ -379,7 +379,7 @@ void PipelineHandler::stop(Camera *camera)
>>          /* Cancel and signal as complete all waiting requests. */
>>          while (!waitingRequests.empty()) {
>>                  Request *request = waitingRequests.front();
>> -               waitingRequests.pop();
>> +               waitingRequests.pop_front();
>>                  cancelRequest(request);
>>          }
>>   
>> @@ -461,7 +461,7 @@ void PipelineHandler::queueRequest(Request *request)
>>   
>>          Camera *camera = request->_d()->camera();
>>          Camera::Private *data = camera->_d();
>> -       data->waitingRequests_.push(request);
>> +       data->waitingRequests_.push_back(request);
>>   
>>          request->_d()->prepare(300ms);
>>   }
>> @@ -510,7 +510,7 @@ void PipelineHandler::doQueueRequests(Camera *camera)
>>                   * Pop the request first, in case doQueueRequests() is called
>>                   * recursively from within doQueueRequest()
>>                   */
>> -               data->waitingRequests_.pop();
>> +               data->waitingRequests_.pop_front();
>>                  doQueueRequest(request);
>>          }
>>   }
>> -- 
>> 2.51.0
>>

Patch
diff mbox series

diff --git a/include/libcamera/internal/camera.h b/include/libcamera/internal/camera.h
index 8a2e9ed58..0f50c14a5 100644
--- a/include/libcamera/internal/camera.h
+++ b/include/libcamera/internal/camera.h
@@ -37,7 +37,7 @@  public:
 	const PipelineHandler *pipe() const { return pipe_.get(); }
 
 	std::list<Request *> queuedRequests_;
-	std::queue<Request *> waitingRequests_;
+	std::deque<Request *> waitingRequests_;
 	ControlInfoMap controlInfo_;
 	ControlList properties_;
 
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index e5f9e55c9..d0d3fbc79 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -370,7 +370,7 @@  void PipelineHandler::stop(Camera *camera)
 	 * after the device to keep them in order.
 	 */
 	Camera::Private *data = camera->_d();
-	std::queue<Request *> waitingRequests;
+	std::deque<Request *> waitingRequests;
 	waitingRequests.swap(data->waitingRequests_);
 
 	/* Stop the pipeline handler and let the queued requests complete. */
@@ -379,7 +379,7 @@  void PipelineHandler::stop(Camera *camera)
 	/* Cancel and signal as complete all waiting requests. */
 	while (!waitingRequests.empty()) {
 		Request *request = waitingRequests.front();
-		waitingRequests.pop();
+		waitingRequests.pop_front();
 		cancelRequest(request);
 	}
 
@@ -461,7 +461,7 @@  void PipelineHandler::queueRequest(Request *request)
 
 	Camera *camera = request->_d()->camera();
 	Camera::Private *data = camera->_d();
-	data->waitingRequests_.push(request);
+	data->waitingRequests_.push_back(request);
 
 	request->_d()->prepare(300ms);
 }
@@ -510,7 +510,7 @@  void PipelineHandler::doQueueRequests(Camera *camera)
 		 * Pop the request first, in case doQueueRequests() is called
 		 * recursively from within doQueueRequest()
 		 */
-		data->waitingRequests_.pop();
+		data->waitingRequests_.pop_front();
 		doQueueRequest(request);
 	}
 }