[libcamera-devel] [PATCH v3] Documentation: Add descriptions for env. variables

Jacopo Mondi jacopo at jmondi.org
Tue Nov 17 18:24:51 CET 2020


Hi Sebastian,

On Wed, Nov 04, 2020 at 07:48:48PM +0100, Sebastian Fricke wrote:
> Describe the environment variables used in libcamera, excluded
> variables are `LIBCAMERA_IPA_FORCE_C_API` and `LIBCAMERA_IPA_PROXY_PATH`,
> the former because it is likely to be removed and the later because
> it has no current use-case.
>
> Add a brief explanation for the IPA configuration and IPA modules.
> List all the available Log levels and categories and add a short guide
> for how to use them for debugging.

s/for/on/

>
> Signed-off-by: Sebastian Fricke <sebastian.fricke.linux at gmail.com>
>
> ---
>
> Changes since V2:
> * replace bullet point list with definition list
> * Remove the category list as it is too difficult to maintain, instead
>   explain how the categories are set with the LOG_DECLARE_CATEGORY &
>   LOG_DEFINE_CATEGORY macros
> * Remove the short summary for the IPA module, as it can be misleading
>   and probably not accurate enough
> * Improve the notes for debugging part by linking to a full explaination
>   while extending the description in the documentation as well
> * Add an example for the Log level setting
> * Remove the documentation from guides and add it to the documentation
>   base path
>
> Changes since V1:
> * abandon the usage of tables as they are too clunky and difficult to
> maintain
> * Fix a wrong example that does not work on most distributions and setups
> * Improve structure of log categories
> ---
>  Documentation/environment_variables.rst | 129 ++++++++++++++++++++++++
>  Documentation/index.rst                 |   1 +
>  Documentation/meson.build               |   1 +
>  3 files changed, 131 insertions(+)
>  create mode 100644 Documentation/environment_variables.rst
>
> diff --git a/Documentation/environment_variables.rst b/Documentation/environment_variables.rst
> new file mode 100644
> index 0000000..a03412b
> --- /dev/null
> +++ b/Documentation/environment_variables.rst
> @@ -0,0 +1,129 @@
> +Environment variables
> +=====================
> +
> +List of variables
> +-----------------
> +
> +LIBCAMERA_LOG_FILE
> +   The custom destination for log output.
> +
> +   Example value: ``/home/{user}/camera_log.log``
> +
> +LIBCAMERA_LOG_LEVELS
> +   Configure the verbosity of log messages for different categories (`more <#log-levels>`__)
> +
> +   Example value: ``*:DEBUG``
> +
> +LIBCAMERA_IPA_CONFIG_PATH
> +   Define custom search locations for IPA configurations (`more <#ipa-configuration>`__)
> +
> +   Example value: ``/usr/path/one:/tmp/path/two``
> +
> +LIBCAMERA_IPA_MODULE_PATH
> +   Define custom search locations for IPA modules (`more <#ipa-module>`__)
> +
> +   Example value: ``/usr/path/one:/tmp/path/two``
> +
> +Further details
> +---------------
> +
> +Notes about debugging
> +~~~~~~~~~~~~~~~~~~~~~
> +
> +The environment variables `LIBCAMERA_LOG_FILE` and `LIBCAMERA_LOG_LEVELS`
> +are used to modify the destination and verbosity of messages provided by
> +the libcamera API.

s/the libcamera API/libcamera/
> +
> +The `LIBCAMERA_LOG_LEVELS` variable expects a comma-separated list of
> +'category:level' pairs. The `level <#log-levels>`__ part can either be given
> +as the index or the name in uppercase letters.

not sure about 'index' maybe

"can either be specified by name or by the associated numerical
index" ?

> +While `category <#log-categories>`__ should either be the exact name of the
> +category, the '*' wildcard symbol or no value, which targets every category.

We do pattern matching on categories.

I woudl say:

The `LIBCAMERA_LOG_LEVELS` variable accepts a comma-separated list of
'category:level' pairs.

The `level <#log-levels>`__ part is mandatory and can either be
specified by name or by numerical index associated to each level.

The optional `category <#log-categories>`__ part is a regular
expression which is matched against the categories defined by each
file in the source base using the logging infrastructure.

> +While `category <#log-categories>`__ should either be the exact name of the
> +category, the '*' wildcard symbol or no value, which targets every category.

> +

Double empty line

> +
> +For more information refer to the `API-documentation <http://libcamera.org/api-html/log_8h.html#details>`__
> +
> +Examples:
> +
> +Enable full debug output to a separate file, for every `category <#log-categories>`__
> +within a local environment:

I would drop 'within.. '

> +
> +.. code:: bash
> +
> +        :~$ LIBCAMERA_LOG_FILE='/tmp/example_log.log' \
> +            LIBCAMERA_LOG_LEVELS=0 \
> +            cam --list
> +
> +Enable full debug output for the categories Camera & V4L2 within a
> +global environment:

Ah I get what you mean with local/global.
That's pretty standard handling of environment variables, do we need
it specified here ? It doesn't hurt though, up to you

> +
> +.. code:: bash
> +
> +   :~$ export LIBCAMERA_LOG_LEVELS='Camera:DEBUG,V4L2:DEBUG'
> +   :~$ cam --list
> +
> +Log levels
> +~~~~~~~~~~~
> +
> +This is the list of available log levels, notice that all levels below
> +the chosen one are printed, while those above are discarded.
> +
> +-  DEBUG (0)
> +-  INFO (1)
> +-  WARN   (2)
           ^ double space. Intentional ?
> +-  ERROR (3)
> +-  FATAL (4)
> +
> +Example:
> +If you choose WARN (2), you will be able to see WARN (2), ERROR (3) & FATAL (4)
> +but not DEBUG (0) & INFO (1).
> +
> +Log categories
> +~~~~~~~~~~~~~~~
> +
> +Every category represent a specific area of the libcamera codebase,
> +the names can be located within the source code, for example:
> +`src/libcamera/camera_manager.cpp <https://git.libcamera.org/libcamera/libcamera.git/tree/src/libcamera/camera_manager.cpp#n35>`__
> +
> +.. code:: bash
> +
> +   LOG_DEFINE_CATEGORY(Camera)
> +
> +There are 2 available macros used to assign a category name to a part of the
> +libcamera API:

s/API/code base/

> +
> +LOG_DEFINE_CATEGORY
> +        This macro is required, in order to use the `LOGC` macro for a
> +	particular category.  It can only be used once for each category.
> +	If you want to create log messages within multiple compilation
> +	units for the same category utilize the `LOG_DECLARE_CATEGORY` macro,
> +	in every file except the definition file.
> +LOG_DECLARE_CATEGORY
> +        Used for sharing an already defined category in between multiple
> +	separately compiled files.

compilation units maybe ?

> +
> +Both macros have to be used within the namespace part of the C++ source code.

within the libcamera namespace.

This part is nice, but it's not much about environment variables but
on how to use the logging infrastructure.

> +

double empty line. Intentional /

> +
> +IPA configuration
> +~~~~~~~~~~~~~~~~~~
> +
> +The format and contents of the configuration file are specific to the
> +IPA (Image Processing Algorithm). It usually contains data that optimize

s/data that optimize... /tuning parameters for the IPA algorithms/
> +the behavior of the algorithms stored in JSON format. The
> +`LIBCAMERA_IPA_CONFIG_PATH` variable can be used to specify custom
> +storage locations to search for those configuration files.
> +
> +`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/raspberrypi/data>`__
> +
> +IPA module
> +~~~~~~~~~~~
> +
> +In order to locate the correct IPA module for your hardware, libcamera gathers
> +existing IPA modules from multiple locations. The default locations for this
> +operation are the installed system path (for example on Debian:
> +``/usr/local/x86_64-pc-linux-gnu/libcamera``) and the build directory.
> +With the `LIBCAMERA_IPA_MODULE_PATH`, you can specify a non-default
> +location to search for IPA modules.
> +
> +`Examples for existing IPA modules <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa>`__

Thanks, very useful ;)

With the above fixed
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>

Thanks
  j

> diff --git a/Documentation/index.rst b/Documentation/index.rst
> index ff697d4..c49db18 100644
> --- a/Documentation/index.rst
> +++ b/Documentation/index.rst
> @@ -17,3 +17,4 @@
>     Application Writer's Guide <guides/application-developer>
>     Pipeline Handler Writer's Guide <guides/pipeline-handler>
>     Tracing guide <guides/tracing>
> +   Environment variables <environment_variables>
> diff --git a/Documentation/meson.build b/Documentation/meson.build
> index 26a12fc..8086abf 100644
> --- a/Documentation/meson.build
> +++ b/Documentation/meson.build
> @@ -53,6 +53,7 @@ if sphinx.found()
>          'contributing.rst',
>          'docs.rst',
>          'index.rst',
> +        'environment_variables.rst',
>          'guides/introduction.rst',
>          'guides/application-developer.rst',
>          'guides/pipeline-handler.rst',
> --
> 2.20.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list