[libcamera-devel] [PATCH 1/5] ipa: raspberrypi: controller: Replace Raspberry Pi debug with libcamera debug

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Jan 23 12:15:25 CET 2021


Hi David,

Thank you for the patch.

On Fri, Jan 22, 2021 at 10:22:07AM +0000, David Plowman wrote:
> Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
> ---
>  src/ipa/raspberrypi/controller/controller.cpp | 29 +++++++++++--------
>  1 file changed, 17 insertions(+), 12 deletions(-)
> 
> diff --git a/src/ipa/raspberrypi/controller/controller.cpp b/src/ipa/raspberrypi/controller/controller.cpp
> index 22461cc4..f81707c2 100644
> --- a/src/ipa/raspberrypi/controller/controller.cpp
> +++ b/src/ipa/raspberrypi/controller/controller.cpp
> @@ -5,6 +5,8 @@
>   * controller.cpp - ISP controller
>   */
>  
> +#include "libcamera/internal/log.h"
> +
>  #include "algorithm.hpp"
>  #include "controller.hpp"
>  
> @@ -12,6 +14,9 @@
>  #include <boost/property_tree/ptree.hpp>
>  
>  using namespace RPiController;
> +using namespace libcamera;

I wonder if the controllers should be moved to the libcamera namespace
(to be precise, I mean making RPiController a sub-namespace of
libcamera). Not something to address in this series in any case.

> +
> +LOG_DEFINE_CATEGORY(RPiController)

I've been toying with the idea of creating hierarchical logging
categories. This could become

LOG_DEFINE_CATEGORY(RPi.Controller)

(or something similar). We can already enable categories using wildcards
(e.g. LIBCAMERA_LOG_LEVELS=RPi*:0), but creating categories with
explicit prefixes would force us to think about the best way to group
categories. Would this be useful ? It's not a high priority on my todo
list in any case.

Another idea I've been toying with is adding a main() function to
libcamera.so, in order to print information when invoking the shared
library as an executable. This would include the list of available
categories. Same question, useful or not ?

>  Controller::Controller()
>  	: switch_mode_called_(false) {}
> @@ -27,7 +32,7 @@ Controller::~Controller() {}
>  
>  void Controller::Read(char const *filename)
>  {
> -	RPI_LOG("Controller starting");
> +	LOG(RPiController, Debug) << "Controller starting";

We usually refrain from using debug messages that just trace the code,
but we don't have a drop-in replacement for this (there's a tracing
infrastructure, but that's for a different purpose). Have you found
these particular debug messages useful ?

>  	boost::property_tree::ptree root;
>  	boost::property_tree::read_json(filename, root);
>  	for (auto const &key_and_value : root) {
> @@ -36,10 +41,10 @@ void Controller::Read(char const *filename)
>  			algo->Read(key_and_value.second);
>  			algorithms_.push_back(AlgorithmPtr(algo));
>  		} else
> -			RPI_LOG("WARNING: No algorithm found for \""
> -				<< key_and_value.first << "\"");
> +			LOG(RPiController, Debug) << "WARNING: No algorithm found for \""
> +						  << key_and_value.first << "\"";

If it's a warning, about about using the Warning log level, and dropping
the "WARNING: " prefix ?

>  	}
> -	RPI_LOG("Controller finished");
> +	LOG(RPiController, Debug) << "Controller finished";
>  }
>  
>  Algorithm *Controller::CreateAlgorithm(char const *name)
> @@ -50,39 +55,39 @@ Algorithm *Controller::CreateAlgorithm(char const *name)
>  
>  void Controller::Initialise()
>  {
> -	RPI_LOG("Controller starting");
> +	LOG(RPiController, Debug) << "Controller starting";
>  	for (auto &algo : algorithms_)
>  		algo->Initialise();
> -	RPI_LOG("Controller finished");
> +	LOG(RPiController, Debug) << "Controller finished";
>  }
>  
>  void Controller::SwitchMode(CameraMode const &camera_mode, Metadata *metadata)
>  {
> -	RPI_LOG("Controller starting");
> +	LOG(RPiController, Debug) << "Controller starting";
>  	for (auto &algo : algorithms_)
>  		algo->SwitchMode(camera_mode, metadata);
>  	switch_mode_called_ = true;
> -	RPI_LOG("Controller finished");
> +	LOG(RPiController, Debug) << "Controller finished";
>  }
>  
>  void Controller::Prepare(Metadata *image_metadata)
>  {
> -	RPI_LOG("Controller::Prepare starting");
> +	LOG(RPiController, Debug) << "Controller::Prepare starting";

Should the previous three functions also mention the function name ?

>  	assert(switch_mode_called_);
>  	for (auto &algo : algorithms_)
>  		if (!algo->IsPaused())
>  			algo->Prepare(image_metadata);
> -	RPI_LOG("Controller::Prepare finished");
> +	LOG(RPiController, Debug) << "Controller::Prepare finished";
>  }
>  
>  void Controller::Process(StatisticsPtr stats, Metadata *image_metadata)
>  {
> -	RPI_LOG("Controller::Process starting");
> +	LOG(RPiController, Debug) << "Controller::Process starting";
>  	assert(switch_mode_called_);
>  	for (auto &algo : algorithms_)
>  		if (!algo->IsPaused())
>  			algo->Process(stats, image_metadata);
> -	RPI_LOG("Controller::Process finished");
> +	LOG(RPiController, Debug) << "Controller::Process finished";
>  }
>  
>  Metadata &Controller::GetGlobalMetadata()

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list