[libcamera-devel] [PATCH 2/2] libcamera: Documentation: Split public/private documentation

Dan Scally dan.scally at ideasonboard.com
Wed Jan 3 12:37:49 CET 2024


Hi Jacopo

On 26/12/2023 10:41, Jacopo Mondi wrote:
> Hi Dan
>     thanks for this big chunk of work
>
> On Wed, Dec 20, 2023 at 04:31:44PM +0000, Daniel Scally via libcamera-devel wrote:
>> The API reference pages generated by Doxygen are comprehensive, but
>> therefore quite overwhelming for application developers who will
>> likely never need to use the majority of the library's objects. To
>> reduce the complexity of the documentation, split it into two runs of
>> doxygen. In the first run leverage doxygen's \internal and \if flags
>> to hide library objects which are not intended to be exposed through
>> the public headers.
>>
>> In the second run allow doxygen to generate documentation for all of
>> the library's objects as it currently does. This set will now be
>> output into build/Documentation/internal-api-html.
>>
>> Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
>> ---
>> This patch touches a lot of files, but almost exclusively adds doxygen's
>> \internal flag to docu-comments along with the necessary changes to Doxyfile.in
>> and meson.build to implement the hiding of those objects in the auto-generated
>> documentation.
>>
>> The deviation from that rule is in object.cpp, where reference is made to
>> the "internal" Thread class documentation. Because the Object class is retained
>> in the public documents we can't remove the whole thing with \internal which
>> means resorting to \if .. \endif. It's specifically a reference to the Stopping
>> Threads section, and an alternative means of resolving this might be to move
>> that whole section to the Thread Support _page_ instead of being part of the
>> Thread class.
>>
>>   Documentation/Doxyfile.in                     |  9 +++-
>>   Documentation/meson.build                     | 47 +++++++++++++++++--
>>   include/libcamera/ipa/core.mojom              |  5 ++
>>   src/ipa/ipu3/algorithms/af.cpp                |  2 +
>>   src/ipa/ipu3/algorithms/agc.cpp               |  2 +
>>   src/ipa/ipu3/algorithms/awb.cpp               |  4 ++
>>   src/ipa/ipu3/algorithms/blc.cpp               |  2 +
>>   src/ipa/ipu3/algorithms/tone_mapping.cpp      |  2 +
>>   src/ipa/ipu3/ipa_context.cpp                  |  5 ++
>>   src/ipa/ipu3/ipu3.cpp                         |  1 +
>>   src/ipa/libipa/algorithm.cpp                  |  3 ++
>>   src/ipa/libipa/camera_sensor_helper.cpp       |  8 ++++
>>   src/ipa/libipa/fc_queue.cpp                   |  3 ++
>>   src/ipa/libipa/histogram.cpp                  |  2 +
>>   src/ipa/libipa/module.cpp                     |  2 +
>>   src/ipa/rkisp1/algorithms/agc.cpp             |  2 +
>>   src/ipa/rkisp1/algorithms/awb.cpp             |  2 +
>>   src/ipa/rkisp1/algorithms/blc.cpp             |  2 +
>>   src/ipa/rkisp1/algorithms/cproc.cpp           |  2 +
>>   src/ipa/rkisp1/algorithms/dpcc.cpp            |  2 +
>>   src/ipa/rkisp1/algorithms/dpf.cpp             |  2 +
>>   src/ipa/rkisp1/algorithms/filter.cpp          |  2 +
>>   src/ipa/rkisp1/algorithms/gsl.cpp             |  2 +
>>   src/ipa/rkisp1/algorithms/lsc.cpp             |  2 +
>>   src/ipa/rkisp1/ipa_context.cpp                | 13 +++++
>>   src/libcamera/base/backtrace.cpp              |  2 +
>>   src/libcamera/base/event_dispatcher.cpp       |  2 +
>>   src/libcamera/base/event_dispatcher_poll.cpp  |  2 +
>>   src/libcamera/base/event_notifier.cpp         |  3 ++
>>   src/libcamera/base/file.cpp                   |  4 ++
>>   src/libcamera/base/log.cpp                    |  7 +++
>>   src/libcamera/base/message.cpp                |  4 ++
>>   src/libcamera/base/mutex.cpp                  |  4 ++
>>   src/libcamera/base/object.cpp                 | 13 +++--
>>   src/libcamera/base/semaphore.cpp              |  2 +
>>   src/libcamera/base/thread.cpp                 |  5 ++
>>   src/libcamera/base/timer.cpp                  |  2 +
>>   src/libcamera/base/utils.cpp                  |  2 +
>>   src/libcamera/bayer_format.cpp                |  4 ++
>>   src/libcamera/byte_stream_buffer.cpp          |  2 +
>>   src/libcamera/camera.cpp                      |  1 +
>>   src/libcamera/camera_controls.cpp             |  2 +
>>   src/libcamera/camera_lens.cpp                 |  2 +
>>   src/libcamera/camera_manager.cpp              |  1 +
>>   src/libcamera/camera_sensor.cpp               |  2 +
>>   src/libcamera/camera_sensor_properties.cpp    |  2 +
>>   src/libcamera/control_serializer.cpp          |  3 ++
>>   src/libcamera/control_validator.cpp           |  2 +
>>   src/libcamera/converter.cpp                   |  4 ++
>>   .../converter/converter_v4l2_m2m.cpp          |  2 +
>>   src/libcamera/delayed_controls.cpp            |  3 ++
>>   src/libcamera/device_enumerator.cpp           |  3 ++
>>   src/libcamera/framebuffer.cpp                 |  2 +
>>   src/libcamera/ipa_controls.cpp                |  4 ++
>>   src/libcamera/ipa_data_serializer.cpp         |  2 +
>>   src/libcamera/ipa_interface.cpp               |  2 +
>>   src/libcamera/ipa_manager.cpp                 |  2 +
>>   src/libcamera/ipa_module.cpp                  |  4 ++
>>   src/libcamera/ipa_proxy.cpp                   |  3 ++
>>   src/libcamera/ipc_pipe.cpp                    |  4 ++
>>   src/libcamera/ipc_unixsocket.cpp              |  3 ++
>>   src/libcamera/mapped_framebuffer.cpp          |  4 ++
>>   src/libcamera/media_device.cpp                |  2 +
>>   src/libcamera/media_object.cpp                |  6 +++
>>   src/libcamera/pipeline/ipu3/imgu.cpp          |  2 +
>>   .../pipeline/rpi/common/delayed_controls.cpp  |  3 ++
>>   src/libcamera/pipeline_handler.cpp            |  4 ++
>>   src/libcamera/process.cpp                     |  4 ++
>>   src/libcamera/pub_key.cpp                     |  2 +
>>   src/libcamera/request.cpp                     |  1 +
>>   src/libcamera/source_paths.cpp                |  1 +
>>   src/libcamera/sysfs.cpp                       |  1 +
>>   src/libcamera/v4l2_device.cpp                 |  2 +
>>   src/libcamera/v4l2_pixelformat.cpp            |  3 ++
>>   src/libcamera/v4l2_subdevice.cpp              |  7 +++
>>   src/libcamera/v4l2_videodevice.cpp            |  7 +++
>>   src/libcamera/yaml_parser.cpp                 |  5 ++
>>   77 files changed, 285 insertions(+), 8 deletions(-)
>>
>> diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in
>> index a86ea6c1..6689ace1 100644
>> --- a/Documentation/Doxyfile.in
>> +++ b/Documentation/Doxyfile.in
>> @@ -68,7 +68,14 @@ EXCLUDE_SYMBOLS        = libcamera::BoundMethodArgs \
>>
>>   EXCLUDE_SYMLINKS       = YES
>>
>> -HTML_OUTPUT            = api-html
>> +INTERNAL_DOCS          = @INTERNAL_DOCS@
>> +
>> +HIDE_UNDOC_CLASSES     = @HIDE_UNDOC_CLASSES@
>> +HIDE_UNDOC_MEMBERS     = @HIDE_UNDOC_MEMBERS@
> mmm, is this related to the internal/external doc split ?
>
> Documentation says:
> "If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
> undocumented classes that are normally visible in the class hierarchy"
>
> Do we want un-documented classes to show up ?


We want them to show in the internal API documentation run of doxygen but not in the public API run.

>> +
>> +HTML_OUTPUT            = @HTML_OUTPUT@
>> +
>> +ENABLED_SECTIONS       = @ENABLED_SECTIONS@
>>
>>   GENERATE_LATEX         = NO
>>
>> diff --git a/Documentation/meson.build b/Documentation/meson.build
>> index 7a58fec8..7d2b7e33 100644
>> --- a/Documentation/meson.build
>> +++ b/Documentation/meson.build
>> @@ -21,14 +21,25 @@ if doxygen.found() and dot.found()
>>           doxygen_predefined += '@0@=@1@'.format(key, config_h.get(key))
>>       endforeach
>>
>> +    # We run doxygen twice - once to build a reduced documentation set that's
> More than a "reduced documentation set" I would explicitly say that
> the first run excludes the internal API as it is meant to document the
> public API only.


OK - will do.

>
>> +    # more appropriate for application developers, and a second run that covers
>> +    # all of the library's objects for libcamera developers. To achieve this we
>> +    # flag as \internal the comments for objects we wish to hide, and remove the
>> +    # auto generated documents via HIDE_UNDOC_CLASSES and HIDE_UNDOC_MEMBERS.
> AH! as otherwise the internal classes which result as undocumented
> because flagged as 'internal' will show up anyway in the documentation
> of public API ?


Exactly yes.

>
>> +
> Just checking: 2 lines are intentional ?


No, thank you!

>
>> +
>>       cdata.set('PREDEFINED', ' \\\n\t\t\t '.join(doxygen_predefined))
>> +    cdata.set('INTERNAL_DOCS', 'NO')
>> +    cdata.set('HIDE_UNDOC_CLASSES', 'YES')
>> +    cdata.set('HIDE_UNDOC_MEMBERS', 'YES')
>> +    cdata.set('HTML_OUTPUT', 'api-html')
>> +    cdata.set('ENABLED_SECTIONS', '')
>>
>>       doxyfile = configure_file(input : 'Doxyfile.in',
>>                                 output : 'Doxyfile',
>>                                 configuration : cdata)
>>
>> -    doxygen_input = [
>> -        doxyfile,
>> +    global_doxygen_input = [
>>           libcamera_base_headers,
>>           libcamera_base_sources,
>>           libcamera_internal_headers,
>> @@ -41,16 +52,44 @@ if doxygen.found() and dot.found()
>>       ]
>>
>>       if is_variable('ipu3_ipa_sources')
>> -        doxygen_input += [ipu3_ipa_sources]
>> +        global_doxygen_input += [ipu3_ipa_sources]
>>       endif
>>
>> +    public_doxygen_input = global_doxygen_input
>> +    public_doxygen_input += doxyfile
>> +
>>       custom_target('doxygen',
>> -                  input : doxygen_input,
>> +                  input : public_doxygen_input,
>>                     output : 'api-html',
>>                     command : [doxygen, doxyfile],
>>                     install : true,
>>                     install_dir : doc_install_dir,
>>                     install_tag : 'doc')
>> +
>> +    # This is the internal documentation, so _don't_ hide undocumented classes
>> +    # as we want everything to show up.
>> +    cdata_internal = configuration_data()
>> +    cdata_internal.merge_from(cdata)
>> +    cdata_internal.set('HTML_OUTPUT', 'internal-api-html')
>> +    cdata_internal.set('INTERNAL_DOCS', 'YES')
>> +    cdata_internal.set('HIDE_UNDOC_CLASSES', 'NO')
>> +    cdata_internal.set('HIDE_UNDOC_MEMBERS', 'NO')
>> +    cdata_internal.set('ENABLED_SECTIONS', 'internal')
>> +
>> +    doxyfile_internal = configure_file(input : 'Doxyfile.in',
>> +                                       output : 'Doxyfile-internal',
>> +                                       configuration : cdata_internal)
>> +
>> +    internal_doxygen_input = global_doxygen_input
>> +    internal_doxygen_input += doxyfile_internal
>> +
>> +    custom_target('doxygen-internal',
>> +                  input : internal_doxygen_input,
>> +                  output : 'internal-api-html',
>> +                  command : [doxygen, doxyfile_internal],
>> +                  install : true,
>> +                  install_dir : doc_install_dir,
>> +                  install_tag : 'doc-internal')
>>   endif
>>
>>   #
>> diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom
>> index bce79724..f4a7dc4b 100644
>> --- a/include/libcamera/ipa/core.mojom
>> +++ b/include/libcamera/ipa/core.mojom
>> @@ -3,6 +3,7 @@
>>   module libcamera;
>>
>>   /**
>> + * \internal
>>    * \file core_ipa_interface.h
>>    * \brief libcamera structs for IPAs
>>    */
>> @@ -109,6 +110,7 @@ module libcamera;
>>   };
>>
>>   /**
>> + * \internal
>>    * \struct IPACameraSensorInfo
>>    * \brief Report the image sensor characteristics
>>    *
>> @@ -257,6 +259,7 @@ struct IPACameraSensorInfo {
>>   };
>>
>>   /**
>> + * \internal
>>    * \struct IPABuffer
>>    * \brief Buffer information for the IPA interface
>>    *
>> @@ -291,6 +294,7 @@ struct IPABuffer {
>>   };
>>
>>   /**
>> + * \internal
>>    * \struct IPASettings
>>    * \brief IPA interface initialization settings
>>    *
>> @@ -320,6 +324,7 @@ struct IPASettings {
>>   };
>>
>>   /**
>> + * \internal
>>    * \struct IPAStream
>>    * \brief Stream configuration for the IPA interface
>>    *
>> diff --git a/src/ipa/ipu3/algorithms/af.cpp b/src/ipa/ipu3/algorithms/af.cpp
>> index 12927eec..25109451 100644
>> --- a/src/ipa/ipu3/algorithms/af.cpp
> Adding an \internal tag is a bit of a tedious job, but since you've
> already done so.... I wonder if it wouldn't be better to exclude some
> directories to doxygen completly. The whole src/ipa/ directory in example
> doesn't contain anything that application developers should be
> concerned with, right ?


It actually wasn't that tedious to do; the long part was figuring out the right way to make doxygen 
do exactly what we wanted. Once that was understood sed made adding the \internal tag quite easy.

>
>
>> +++ b/src/ipa/ipu3/algorithms/af.cpp
>> @@ -26,6 +26,7 @@
>>   #include "libipa/histogram.h"
>>
>>   /**
>> + * \internal
>>    * \file af.h
>>    */
>>
>> @@ -96,6 +97,7 @@ static struct ipu3_uapi_af_filter_config afFilterConfigDefault = {
>>   };
>>
>>   /**
>> + * \internal
>>    * \class Af
>>    * \brief An auto-focus algorithm based on IPU3 statistics
>>    *
>> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp
>> index 606a237a..e3cfbe57 100644
>> --- a/src/ipa/ipu3/algorithms/agc.cpp
>> +++ b/src/ipa/ipu3/algorithms/agc.cpp
>> @@ -20,6 +20,7 @@
>>   #include "libipa/histogram.h"
>>
>>   /**
>> + * \internal
>>    * \file agc.h
>>    */
>>
>> @@ -30,6 +31,7 @@ using namespace std::literals::chrono_literals;
>>   namespace ipa::ipu3::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class Agc
>>    * \brief A mean-based auto-exposure algorithm
>>    *
>> diff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp
>> index 5abd4621..11a6dfdc 100644
>> --- a/src/ipa/ipu3/algorithms/awb.cpp
>> +++ b/src/ipa/ipu3/algorithms/awb.cpp
>> @@ -14,6 +14,7 @@
>>   #include <libcamera/control_ids.h>
>>
>>   /**
>> + * \internal
>>    * \file awb.h
>>    */
>>
>> @@ -45,6 +46,7 @@ static constexpr double kMaxCellSaturationRatio = 0.8;
>>   static constexpr uint32_t kMinCellsPerZoneRatio = 255 * 90 / 100;
>>
>>   /**
>> + * \internal
>>    * \struct Accumulator
>>    * \brief RGB statistics for a given zone
>>    *
>> @@ -73,6 +75,7 @@ static constexpr uint32_t kMinCellsPerZoneRatio = 255 * 90 / 100;
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct Awb::AwbStatus
>>    * \brief AWB parameters calculated
>>    *
>> @@ -118,6 +121,7 @@ static const struct ipu3_uapi_ccm_mat_config imguCssCcmDefault = {
>>   };
>>
>>   /**
>> + * \internal
>>    * \class Awb
>>    * \brief A Grey world white balance correction algorithm
>>    *
>> diff --git a/src/ipa/ipu3/algorithms/blc.cpp b/src/ipa/ipu3/algorithms/blc.cpp
>> index e838072a..d5b2f70d 100644
>> --- a/src/ipa/ipu3/algorithms/blc.cpp
>> +++ b/src/ipa/ipu3/algorithms/blc.cpp
>> @@ -10,6 +10,7 @@
>>   #include <string.h>
>>
>>   /**
>> + * \internal
>>    * \file blc.h
>>    * \brief IPU3 Black Level Correction control
>>    */
>> @@ -19,6 +20,7 @@ namespace libcamera {
>>   namespace ipa::ipu3::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class BlackLevelCorrection
>>    * \brief A class to handle black level correction
>>    *
>> diff --git a/src/ipa/ipu3/algorithms/tone_mapping.cpp b/src/ipa/ipu3/algorithms/tone_mapping.cpp
>> index a169894c..83eaa002 100644
>> --- a/src/ipa/ipu3/algorithms/tone_mapping.cpp
>> +++ b/src/ipa/ipu3/algorithms/tone_mapping.cpp
>> @@ -11,6 +11,7 @@
>>   #include <string.h>
>>
>>   /**
>> + * \internal
>>    * \file tone_mapping.h
>>    */
>>
>> @@ -19,6 +20,7 @@ namespace libcamera {
>>   namespace ipa::ipu3::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class ToneMapping
>>    * \brief A class to handle tone mapping based on gamma
>>    *
>> diff --git a/src/ipa/ipu3/ipa_context.cpp b/src/ipa/ipu3/ipa_context.cpp
>> index 959f314f..6490c0ec 100644
>> --- a/src/ipa/ipu3/ipa_context.cpp
>> +++ b/src/ipa/ipu3/ipa_context.cpp
>> @@ -8,6 +8,7 @@
>>   #include "ipa_context.h"
>>
>>   /**
>> + * \internal
>>    * \file ipa_context.h
>>    * \brief Context and state information shared between the algorithms
>>    */
>> @@ -15,6 +16,7 @@
>>   namespace libcamera::ipa::ipu3 {
>>
>>   /**
>> + * \internal
>>    * \struct IPASessionConfiguration
>>    * \brief Session configuration for the IPA module
>>    *
>> @@ -25,6 +27,7 @@ namespace libcamera::ipa::ipu3 {
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct IPAActiveState
>>    * \brief The active state of the IPA algorithms
>>    *
>> @@ -36,6 +39,7 @@ namespace libcamera::ipa::ipu3 {
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct IPAContext
>>    * \brief Global IPA context data shared between all algorithms
>>    *
>> @@ -167,6 +171,7 @@ namespace libcamera::ipa::ipu3 {
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct IPAFrameContext
>>    * \brief IPU3-specific FrameContext
>>    *
>> diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
>> index 08ee6eb3..f635f6ac 100644
>> --- a/src/ipa/ipu3/ipu3.cpp
>> +++ b/src/ipa/ipu3/ipu3.cpp
>> @@ -67,6 +67,7 @@ using namespace std::literals::chrono_literals;
>>   namespace ipa::ipu3 {
>>
>>   /**
>> + * \internal
>>    * \brief The IPU3 IPA implementation
>>    *
>>    * The IPU3 Pipeline defines an IPU3-specific interface for communication
>> diff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/libipa/algorithm.cpp
>> index bc1c29a6..a36e628b 100644
>> --- a/src/ipa/libipa/algorithm.cpp
>> +++ b/src/ipa/libipa/algorithm.cpp
>> @@ -8,6 +8,7 @@
>>   #include "algorithm.h"
>>
>>   /**
>> + * \internal
>>    * \file algorithm.h
>>    * \brief Algorithm common interface
>>    */
>> @@ -17,6 +18,7 @@ namespace libcamera {
>>   namespace ipa {
>>
>>   /**
>> + * \internal
>>    * \class Algorithm
>>    * \brief The base class for all IPA algorithms
>>    * \tparam Module The IPA module type for this class of algorithms
>> @@ -134,6 +136,7 @@ namespace ipa {
>>    */
>>
>>   /**
>> + * \internal
>>    * \class AlgorithmFactory
>>    * \brief Registration of Algorithm classes and creation of instances
>>    * \tparam _Algorithm The algorithm class type for this factory
>> diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp
>> index f0ecc383..23afc954 100644
>> --- a/src/ipa/libipa/camera_sensor_helper.cpp
>> +++ b/src/ipa/libipa/camera_sensor_helper.cpp
>> @@ -12,6 +12,7 @@
>>   #include <libcamera/base/log.h>
>>
>>   /**
>> + * \internal
>>    * \file camera_sensor_helper.h
>>    * \brief Helper class that performs sensor-specific parameter computations
>>    *
>> @@ -31,6 +32,7 @@ LOG_DEFINE_CATEGORY(CameraSensorHelper)
>>   namespace ipa {
>>
>>   /**
>> + * \internal
>>    * \class CameraSensorHelper
>>    * \brief Base class for computing sensor tuning parameters using
>>    * sensor-specific constants
>> @@ -112,6 +114,7 @@ double CameraSensorHelper::gain(uint32_t gainCode) const
>>   }
>>
>>   /**
>> + * \internal
>>    * \enum CameraSensorHelper::AnalogueGainType
>>    * \brief The gain calculation modes as defined by the MIPI CCS
>>    *
>> @@ -159,6 +162,7 @@ double CameraSensorHelper::gain(uint32_t gainCode) const
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct CameraSensorHelper::AnalogueGainLinearConstants
>>    * \brief Analogue gain constants for the linear gain model
>>    *
>> @@ -180,6 +184,7 @@ double CameraSensorHelper::gain(uint32_t gainCode) const
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct CameraSensorHelper::AnalogueGainExpConstants
>>    * \brief Analogue gain constants for the exponential gain model
>>    *
>> @@ -191,6 +196,7 @@ double CameraSensorHelper::gain(uint32_t gainCode) const
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct CameraSensorHelper::AnalogueGainConstants
>>    * \brief Analogue gain model constants
>>    *
>> @@ -218,6 +224,7 @@ double CameraSensorHelper::gain(uint32_t gainCode) const
>>    */
>>
>>   /**
>> + * \internal
>>    * \class CameraSensorHelperFactoryBase
>>    * \brief Base class for camera sensor helper factories
>>    *
>> @@ -297,6 +304,7 @@ std::vector<CameraSensorHelperFactoryBase *> &CameraSensorHelperFactoryBase::fac
>>   }
>>
>>   /**
>> + * \internal
>>    * \class CameraSensorHelperFactory
>>    * \brief Registration of CameraSensorHelperFactory classes and creation of instances
>>    * \tparam _Helper The camera sensor helper class type for this factory
>> diff --git a/src/ipa/libipa/fc_queue.cpp b/src/ipa/libipa/fc_queue.cpp
>> index e812faa5..21656405 100644
>> --- a/src/ipa/libipa/fc_queue.cpp
>> +++ b/src/ipa/libipa/fc_queue.cpp
>> @@ -16,11 +16,13 @@ LOG_DEFINE_CATEGORY(FCQueue)
>>   namespace ipa {
>>
>>   /**
>> + * \internal
>>    * \file fc_queue.h
>>    * \brief Queue of per-frame contexts
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct FrameContext
>>    * \brief Context for a frame
>>    *
>> @@ -39,6 +41,7 @@ namespace ipa {
>>    */
>>
>>   /**
>> + * \internal
>>    * \class FCQueue
>>    * \brief A support class for managing FrameContext instances in IPA modules
>>    * \tparam FrameContext The IPA module-specific FrameContext derived class type
>> diff --git a/src/ipa/libipa/histogram.cpp b/src/ipa/libipa/histogram.cpp
>> index 6b5cde8e..0e9f6a62 100644
>> --- a/src/ipa/libipa/histogram.cpp
>> +++ b/src/ipa/libipa/histogram.cpp
>> @@ -11,6 +11,7 @@
>>   #include <libcamera/base/log.h>
>>
>>   /**
>> + * \internal
>>    * \file histogram.h
>>    * \brief Class to represent Histograms and manipulate them
>>    */
>> @@ -20,6 +21,7 @@ namespace libcamera {
>>   namespace ipa {
>>
>>   /**
>> + * \internal
>>    * \class Histogram
>>    * \brief The base class for creating histograms
>>    *
>> diff --git a/src/ipa/libipa/module.cpp b/src/ipa/libipa/module.cpp
>> index ee01f12a..9484a925 100644
>> --- a/src/ipa/libipa/module.cpp
>> +++ b/src/ipa/libipa/module.cpp
>> @@ -8,6 +8,7 @@
>>   #include "module.h"
>>
>>   /**
>> + * \internal
>>    * \file module.h
>>    * \brief IPA Module common interface
>>    */
>> @@ -26,6 +27,7 @@ LOG_DEFINE_CATEGORY(IPAModuleAlgo)
>>   namespace ipa {
>>
>>   /**
>> + * \internal
>>    * \class Module
>>    * \brief The base class for all IPA modules
>>    * \tparam Context The type of the shared IPA context
>> diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
>> index e5aeb342..70af80e0 100644
>> --- a/src/ipa/rkisp1/algorithms/agc.cpp
>> +++ b/src/ipa/rkisp1/algorithms/agc.cpp
>> @@ -20,6 +20,7 @@
>>   #include "libipa/histogram.h"
>>
>>   /**
>> + * \internal
>>    * \file agc.h
>>    */
>>
>> @@ -30,6 +31,7 @@ using namespace std::literals::chrono_literals;
>>   namespace ipa::rkisp1::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class Agc
>>    * \brief A mean-based auto-exposure algorithm
>>    */
>> diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
>> index 744f4a38..82b89ed3 100644
>> --- a/src/ipa/rkisp1/algorithms/awb.cpp
>> +++ b/src/ipa/rkisp1/algorithms/awb.cpp
>> @@ -17,6 +17,7 @@
>>   #include <libcamera/ipa/core_ipa_interface.h>
>>
>>   /**
>> + * \internal
>>    * \file awb.h
>>    */
>>
>> @@ -25,6 +26,7 @@ namespace libcamera {
>>   namespace ipa::rkisp1::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class Awb
>>    * \brief A Grey world white balance correction algorithm
>>    */
>> diff --git a/src/ipa/rkisp1/algorithms/blc.cpp b/src/ipa/rkisp1/algorithms/blc.cpp
>> index 15324fb1..278587aa 100644
>> --- a/src/ipa/rkisp1/algorithms/blc.cpp
>> +++ b/src/ipa/rkisp1/algorithms/blc.cpp
>> @@ -12,6 +12,7 @@
>>   #include "libcamera/internal/yaml_parser.h"
>>
>>   /**
>> + * \internal
>>    * \file blc.h
>>    */
>>
>> @@ -20,6 +21,7 @@ namespace libcamera {
>>   namespace ipa::rkisp1::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class BlackLevelCorrection
>>    * \brief RkISP1 Black Level Correction control
>>    *
>> diff --git a/src/ipa/rkisp1/algorithms/cproc.cpp b/src/ipa/rkisp1/algorithms/cproc.cpp
>> index eaa56c37..9f77a681 100644
>> --- a/src/ipa/rkisp1/algorithms/cproc.cpp
>> +++ b/src/ipa/rkisp1/algorithms/cproc.cpp
>> @@ -15,6 +15,7 @@
>>   #include <libcamera/control_ids.h>
>>
>>   /**
>> + * \internal
>>    * \file cproc.h
>>    */
>>
>> @@ -23,6 +24,7 @@ namespace libcamera {
>>   namespace ipa::rkisp1::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class ColorProcessing
>>    * \brief RkISP1 Color Processing control
>>    *
>> diff --git a/src/ipa/rkisp1/algorithms/dpcc.cpp b/src/ipa/rkisp1/algorithms/dpcc.cpp
>> index 80a1b734..5ae68fda 100644
>> --- a/src/ipa/rkisp1/algorithms/dpcc.cpp
>> +++ b/src/ipa/rkisp1/algorithms/dpcc.cpp
>> @@ -14,6 +14,7 @@
>>   #include "linux/rkisp1-config.h"
>>
>>   /**
>> + * \internal
>>    * \file dpcc.h
>>    */
>>
>> @@ -22,6 +23,7 @@ namespace libcamera {
>>   namespace ipa::rkisp1::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class DefectPixelClusterCorrection
>>    * \brief RkISP1 Defect Pixel Cluster Correction control
>>    *
>> diff --git a/src/ipa/rkisp1/algorithms/dpf.cpp b/src/ipa/rkisp1/algorithms/dpf.cpp
>> index 5bd7e59f..16931a6f 100644
>> --- a/src/ipa/rkisp1/algorithms/dpf.cpp
>> +++ b/src/ipa/rkisp1/algorithms/dpf.cpp
>> @@ -16,6 +16,7 @@
>>   #include "linux/rkisp1-config.h"
>>
>>   /**
>> + * \internal
>>    * \file dpf.h
>>    */
>>
>> @@ -24,6 +25,7 @@ namespace libcamera {
>>   namespace ipa::rkisp1::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class Dpf
>>    * \brief RkISP1 Denoise Pre-Filter control
>>    *
>> diff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp
>> index 4b89c05a..5576af3c 100644
>> --- a/src/ipa/rkisp1/algorithms/filter.cpp
>> +++ b/src/ipa/rkisp1/algorithms/filter.cpp
>> @@ -14,6 +14,7 @@
>>   #include <libcamera/control_ids.h>
>>
>>   /**
>> + * \internal
>>    * \file filter.h
>>    */
>>
>> @@ -22,6 +23,7 @@ namespace libcamera {
>>   namespace ipa::rkisp1::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class Filter
>>    * \brief RkISP1 Filter control
>>    *
>> diff --git a/src/ipa/rkisp1/algorithms/gsl.cpp b/src/ipa/rkisp1/algorithms/gsl.cpp
>> index b9f87912..cb4a595a 100644
>> --- a/src/ipa/rkisp1/algorithms/gsl.cpp
>> +++ b/src/ipa/rkisp1/algorithms/gsl.cpp
>> @@ -15,6 +15,7 @@
>>   #include "linux/rkisp1-config.h"
>>
>>   /**
>> + * \internal
>>    * \file gsl.h
>>    */
>>
>> @@ -23,6 +24,7 @@ namespace libcamera {
>>   namespace ipa::rkisp1::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class GammaSensorLinearization
>>    * \brief RkISP1 Gamma Sensor Linearization control
>>    *
>> diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp
>> index a7ccedb1..40c3de9e 100644
>> --- a/src/ipa/rkisp1/algorithms/lsc.cpp
>> +++ b/src/ipa/rkisp1/algorithms/lsc.cpp
>> @@ -19,6 +19,7 @@
>>   #include "linux/rkisp1-config.h"
>>
>>   /**
>> + * \internal
>>    * \file lsc.h
>>    */
>>
>> @@ -27,6 +28,7 @@ namespace libcamera {
>>   namespace ipa::rkisp1::algorithms {
>>
>>   /**
>> + * \internal
>>    * \class LensShadingCorrection
>>    * \brief RkISP1 Lens Shading Correction control
>>    *
>> diff --git a/src/ipa/rkisp1/ipa_context.cpp b/src/ipa/rkisp1/ipa_context.cpp
>> index 9bbf3684..1d2fedc9 100644
>> --- a/src/ipa/rkisp1/ipa_context.cpp
>> +++ b/src/ipa/rkisp1/ipa_context.cpp
>> @@ -8,6 +8,7 @@
>>   #include "ipa_context.h"
>>
>>   /**
>> + * \internal
>>    * \file ipa_context.h
>>    * \brief Context and state information shared between the algorithms
>>    */
>> @@ -15,6 +16,7 @@
>>   namespace libcamera::ipa::rkisp1 {
>>
>>   /**
>> + * \internal
>>    * \struct IPASessionConfiguration
>>    * \brief Session configuration for the IPA module
>>    *
>> @@ -95,6 +97,7 @@ namespace libcamera::ipa::rkisp1 {
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct IPAActiveState
>>    * \brief Active state for algorithms
>>    *
>> @@ -139,9 +142,11 @@ namespace libcamera::ipa::rkisp1 {
>>    * \var IPAActiveState::awb
>>    * \brief State for the Automatic White Balance algorithm
>>    *
>> + * \internal
>>    * \struct IPAActiveState::awb.gains
>>    * \brief White balance gains
>>    *
>> + * \internal
>>    * \struct IPAActiveState::awb.gains.manual
>>    * \brief Manual white balance gains (set through requests)
>>    *
>> @@ -154,6 +159,7 @@ namespace libcamera::ipa::rkisp1 {
>>    * \var IPAActiveState::awb.gains.manual.blue
>>    * \brief Manual white balance gain for B channel
>>    *
>> + * \internal
>>    * \struct IPAActiveState::awb.gains.automatic
>>    * \brief Automatic white balance gains (computed by the algorithm)
>>    *
>> @@ -177,6 +183,7 @@ namespace libcamera::ipa::rkisp1 {
>>    * \var IPAActiveState::cproc
>>    * \brief State for the Color Processing algorithm
>>    *
>> + * \internal
>>    * \struct IPAActiveState::cproc.brightness
>>    * \brief Brightness level
>>    *
>> @@ -199,6 +206,7 @@ namespace libcamera::ipa::rkisp1 {
>>    * \var IPAActiveState::filter
>>    * \brief State for the Filter algorithm
>>    *
>> + * \internal
>>    * \struct IPAActiveState::filter.denoise
>>    * \brief Denoising level
>>    *
>> @@ -207,6 +215,7 @@ namespace libcamera::ipa::rkisp1 {
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct IPAFrameContext
>>    * \brief Per-frame context for algorithms
>>    *
>> @@ -258,6 +267,7 @@ namespace libcamera::ipa::rkisp1 {
>>    * \var IPAFrameContext::awb
>>    * \brief Automatic White Balance parameters for this frame
>>    *
>> + * \internal
>>    * \struct IPAFrameContext::awb.gains
>>    * \brief White balance gains
>>    *
>> @@ -281,6 +291,7 @@ namespace libcamera::ipa::rkisp1 {
>>    * \var IPAFrameContext::cproc
>>    * \brief Color Processing parameters for this frame
>>    *
>> + * \internal
>>    * \struct IPAFrameContext::cproc.brightness
>>    * \brief Brightness level
>>    *
>> @@ -311,6 +322,7 @@ namespace libcamera::ipa::rkisp1 {
>>    * \var IPAFrameContext::filter
>>    * \brief Filter parameters for this frame
>>    *
>> + * \internal
>>    * \struct IPAFrameContext::filter.denoise
>>    * \brief Denoising level
>>    *
>> @@ -334,6 +346,7 @@ namespace libcamera::ipa::rkisp1 {
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct IPAContext
>>    * \brief Global IPA context data shared between all algorithms
>>    *
>> diff --git a/src/libcamera/base/backtrace.cpp b/src/libcamera/base/backtrace.cpp
>> index be30589d..8c0acdfc 100644
>> --- a/src/libcamera/base/backtrace.cpp
>> +++ b/src/libcamera/base/backtrace.cpp
> All components in src/libcamera/base except BoundMethod are internal.
>
> Should we exclude the directory ?


I think there's other public ones here; I followed the public/private split defined in 
include/libcamera/base/meson.build

>
> Same for src/libcamera/pipeline. Have you considered the option of not
> parsing the dir completely ?


I hadn't but that's a better idea - I see Laurent experimented; I'll see if I can pick up his 
experiment and flag directories as excluded.

>
> Also, I see in the public documentation the Extensible::Private class
> being documented. Is this intentional ?


No - I'll flag that too, thanks.

>
> I'll skip the rest as I have enough questions already.
>
> Thanks
>    j
>
>
>> @@ -33,6 +33,7 @@
>>   #include <libcamera/base/utils.h>
>>
>>   /**
>> + * \internal
>>    * \file backtrace.h
>>    * \brief Generate call stack backtraces
>>    */
>> @@ -135,6 +136,7 @@ std::string DwflParser::stackEntry(const void *ip)
>>   } /* namespace */
>>
>>   /**
>> + * \internal
>>    * \class Backtrace
>>    * \brief Representation of a call stack backtrace
>>    *
>> diff --git a/src/libcamera/base/event_dispatcher.cpp b/src/libcamera/base/event_dispatcher.cpp
>> index 4be89e81..4829a876 100644
>> --- a/src/libcamera/base/event_dispatcher.cpp
>> +++ b/src/libcamera/base/event_dispatcher.cpp
>> @@ -9,6 +9,7 @@
>>   #include <libcamera/base/log.h>
>>
>>   /**
>> + * \internal
>>    * \file base/event_dispatcher.h
>>    */
>>
>> @@ -17,6 +18,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(Event)
>>
>>   /**
>> + * \internal
>>    * \class EventDispatcher
>>    * \brief Interface to manage the libcamera events and timers
>>    *
>> diff --git a/src/libcamera/base/event_dispatcher_poll.cpp b/src/libcamera/base/event_dispatcher_poll.cpp
>> index 7238a316..a4efec16 100644
>> --- a/src/libcamera/base/event_dispatcher_poll.cpp
>> +++ b/src/libcamera/base/event_dispatcher_poll.cpp
>> @@ -23,6 +23,7 @@
>>   #include <libcamera/base/utils.h>
>>
>>   /**
>> + * \internal
>>    * \file base/event_dispatcher_poll.h
>>    */
>>
>> @@ -43,6 +44,7 @@ static const char *notifierType(EventNotifier::Type type)
>>   }
>>
>>   /**
>> + * \internal
>>    * \class EventDispatcherPoll
>>    * \brief A poll-based event dispatcher
>>    */
>> diff --git a/src/libcamera/base/event_notifier.cpp b/src/libcamera/base/event_notifier.cpp
>> index fd93c087..35515b87 100644
>> --- a/src/libcamera/base/event_notifier.cpp
>> +++ b/src/libcamera/base/event_notifier.cpp
>> @@ -14,6 +14,7 @@
>>   #include <libcamera/camera_manager.h>
>>
>>   /**
>> + * \internal
>>    * \file event_notifier.h
>>    * \brief File descriptor event notifier
>>    */
>> @@ -21,6 +22,7 @@
>>   namespace libcamera {
>>
>>   /**
>> + * \internal
>>    * \class EventNotifier
>>    * \brief Notify of activity on a file descriptor
>>    *
>> @@ -47,6 +49,7 @@ namespace libcamera {
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum EventNotifier::Type
>>    * Type of file descriptor event to listen for.
>>    * \var EventNotifier::Read
>> diff --git a/src/libcamera/base/file.cpp b/src/libcamera/base/file.cpp
>> index d1ab1aa5..55d3c074 100644
>> --- a/src/libcamera/base/file.cpp
>> +++ b/src/libcamera/base/file.cpp
>> @@ -18,6 +18,7 @@
>>   #include <libcamera/base/shared_fd.h>
>>
>>   /**
>> + * \internal
>>    * \file base/file.h
>>    * \brief File I/O operations
>>    */
>> @@ -27,6 +28,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(File)
>>
>>   /**
>> + * \internal
>>    * \class File
>>    * \brief Interface for I/O operations on files
>>    *
>> @@ -44,6 +46,7 @@ LOG_DEFINE_CATEGORY(File)
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum File::MapFlag
>>    * \brief Flags for the File::map() function
>>    * \var File::MapFlag::NoOption
>> @@ -59,6 +62,7 @@ LOG_DEFINE_CATEGORY(File)
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum File::OpenModeFlag
>>    * \brief Mode in which a file is opened
>>    * \var File::OpenModeFlag::NotOpen
>> diff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp
>> index c8045ef7..8f4e01c1 100644
>> --- a/src/libcamera/base/log.cpp
>> +++ b/src/libcamera/base/log.cpp
>> @@ -26,6 +26,7 @@
>>   #include <libcamera/base/utils.h>
>>
>>   /**
>> + * \internal
>>    * \file base/log.h
>>    * \brief Logging infrastructure
>>    *
>> @@ -98,6 +99,7 @@ static const char *log_severity_name(LogSeverity severity)
>>   }
>>
>>   /**
>> + * \internal
>>    * \brief Log output
>>    *
>>    * The LogOutput class models a log output destination
>> @@ -287,6 +289,7 @@ void LogOutput::writeStream(const std::string &str)
>>   }
>>
>>   /**
>> + * \internal
>>    * \brief Message logger
>>    *
>>    * The Logger class handles log configuration.
>> @@ -755,6 +758,7 @@ LogCategory *Logger::findCategory(const char *name) const
>>   }
>>
>>   /**
>> + * \internal
>>    * \enum LogSeverity
>>    * Log message severity
>>    * \var LogDebug
>> @@ -770,6 +774,7 @@ LogCategory *Logger::findCategory(const char *name) const
>>    */
>>
>>   /**
>> + * \internal
>>    * \class LogCategory
>>    * \brief A category of log message
>>    *
>> @@ -849,6 +854,7 @@ const LogCategory &LogCategory::defaultCategory()
>>   }
>>
>>   /**
>> + * \internal
>>    * \class LogMessage
>>    * \brief Internal log message representation.
>>    *
>> @@ -977,6 +983,7 @@ LogMessage::~LogMessage()
>>    */
>>
>>   /**
>> + * \internal
>>    * \class Loggable
>>    * \brief Base class to support log message extensions
>>    *
>> diff --git a/src/libcamera/base/message.cpp b/src/libcamera/base/message.cpp
>> index 2da2a7ed..872f57bf 100644
>> --- a/src/libcamera/base/message.cpp
>> +++ b/src/libcamera/base/message.cpp
>> @@ -11,6 +11,7 @@
>>   #include <libcamera/base/signal.h>
>>
>>   /**
>> + * \internal
>>    * \file base/message.h
>>    * \brief Message queue support
>>    *
>> @@ -35,11 +36,13 @@ LOG_DEFINE_CATEGORY(Message)
>>   std::atomic_uint Message::nextUserType_{ Message::UserMessage };
>>
>>   /**
>> + * \internal
>>    * \class Message
>>    * \brief A message that can be posted to a Thread
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum Message::Type
>>    * \brief The message type
>>    * \var Message::None
>> @@ -112,6 +115,7 @@ Message::Type Message::registerMessageType()
>>   }
>>
>>   /**
>> + * \internal
>>    * \class InvokeMessage
>>    * \brief A message carrying a method invocation across threads
>>    */
>> diff --git a/src/libcamera/base/mutex.cpp b/src/libcamera/base/mutex.cpp
>> index e34e8618..d5998594 100644
>> --- a/src/libcamera/base/mutex.cpp
>> +++ b/src/libcamera/base/mutex.cpp
>> @@ -8,6 +8,7 @@
>>   #include <libcamera/base/mutex.h>
>>
>>   /**
>> + * \internal
>>    * \file base/mutex.h
>>    * \brief Mutex classes with clang thread safety annotation
>>    */
>> @@ -15,6 +16,7 @@
>>   namespace libcamera {
>>
>>   /**
>> + * \internal
>>    * \class Mutex
>>    * \brief std::mutex wrapper with clang thread safety annotation
>>    *
>> @@ -28,6 +30,7 @@ namespace libcamera {
>>    */
>>
>>   /**
>> + * \internal
>>    * \class MutexLocker
>>    * \brief std::unique_lock wrapper with clang thread safety annotation
>>    *
>> @@ -41,6 +44,7 @@ namespace libcamera {
>>    */
>>
>>   /**
>> + * \internal
>>    * \class ConditionVariable
>>    * \brief std::condition_variable wrapper integrating with MutexLocker
>>    *
>> diff --git a/src/libcamera/base/object.cpp b/src/libcamera/base/object.cpp
>> index 92cecd22..4f51e078 100644
>> --- a/src/libcamera/base/object.cpp
>> +++ b/src/libcamera/base/object.cpp
>> @@ -163,8 +163,11 @@ void Object::deleteLater()
>>    * loop gets started.
>>    *
>>    * Due to their asynchronous nature, threads do not provide any guarantee that
>> - * all posted messages are delivered before the thread is stopped. See
>> - * \ref thread-stop for additional information.
>> + * all posted messages are delivered before the thread is stopped.
>> + *
>> + * \if internal
>> + * See \ref thread-stop for additional information.
>> + * \endif
>>    *
>>    * \context This function is \threadsafe.
>>    */
>> @@ -229,7 +232,11 @@ void Object::message(Message *msg)
>>    *
>>    * Due to the asynchronous nature of threads, functions invoked asynchronously
>>    * with the ConnectionTypeQueued type are not guaranteed to be called before
>> - * the thread is stopped. See \ref thread-stop for additional information.
>> + * the thread is stopped.
>> + *
>> + * \if internal
>> + * See \ref thread-stop for additional information.
>> + * \endif
>>    *
>>    * \context This function is \threadsafe.
>>    *
>> diff --git a/src/libcamera/base/semaphore.cpp b/src/libcamera/base/semaphore.cpp
>> index 6217e386..8992288f 100644
>> --- a/src/libcamera/base/semaphore.cpp
>> +++ b/src/libcamera/base/semaphore.cpp
>> @@ -8,6 +8,7 @@
>>   #include <libcamera/base/semaphore.h>
>>
>>   /**
>> + * \internal
>>    * \file base/semaphore.h
>>    * \brief General-purpose counting semaphore
>>    */
>> @@ -15,6 +16,7 @@
>>   namespace libcamera {
>>
>>   /**
>> + * \internal
>>    * \class Semaphore
>>    * \brief General-purpose counting semaphore
>>    *
>> diff --git a/src/libcamera/base/thread.cpp b/src/libcamera/base/thread.cpp
>> index b96951ac..8780e34a 100644
>> --- a/src/libcamera/base/thread.cpp
>> +++ b/src/libcamera/base/thread.cpp
>> @@ -102,6 +102,7 @@
>>    */
>>
>>   /**
>> + * \internal
>>    * \file base/thread.h
>>    * \brief Thread support
>>    */
>> @@ -113,6 +114,7 @@ LOG_DEFINE_CATEGORY(Thread)
>>   class ThreadMain;
>>
>>   /**
>> + * \internal
>>    * \brief A queue of posted messages
>>    */
>>   class MessageQueue
>> @@ -134,6 +136,7 @@ public:
>>   };
>>
>>   /**
>> + * \internal
>>    * \brief Thread-local internal data
>>    */
>>   class ThreadData
>> @@ -166,6 +169,7 @@ private:
>>   };
>>
>>   /**
>> + * \internal
>>    * \brief Thread wrapper for the main thread
>>    */
>>   class ThreadMain : public Thread
>> @@ -206,6 +210,7 @@ ThreadData *ThreadData::current()
>>   }
>>
>>   /**
>> + * \internal
>>    * \class Thread
>>    * \brief A thread of execution
>>    *
>> diff --git a/src/libcamera/base/timer.cpp b/src/libcamera/base/timer.cpp
>> index 74b060af..81372728 100644
>> --- a/src/libcamera/base/timer.cpp
>> +++ b/src/libcamera/base/timer.cpp
>> @@ -18,6 +18,7 @@
>>   #include <libcamera/camera_manager.h>
>>
>>   /**
>> + * \internal
>>    * \file base/timer.h
>>    * \brief Generic timer
>>    */
>> @@ -27,6 +28,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(Timer)
>>
>>   /**
>> + * \internal
>>    * \class Timer
>>    * \brief Single-shot timer interface
>>    *
>> diff --git a/src/libcamera/base/utils.cpp b/src/libcamera/base/utils.cpp
>> index 3b73b442..5b8caa22 100644
>> --- a/src/libcamera/base/utils.cpp
>> +++ b/src/libcamera/base/utils.cpp
>> @@ -15,6 +15,7 @@
>>   #include <unistd.h>
>>
>>   /**
>> + * \internal
>>    * \file base/utils.h
>>    * \brief Miscellaneous utility functions
>>    */
>> @@ -402,6 +403,7 @@ std::string toAscii(const std::string &str)
>>    */
>>
>>   /**
>> + * \internal
>>    * \class Duration
>>    * \brief Helper class from std::chrono::duration that represents a time
>>    * duration in nanoseconds with double precision
>> diff --git a/src/libcamera/bayer_format.cpp b/src/libcamera/bayer_format.cpp
>> index 3bf15fb4..6d8d34a7 100644
>> --- a/src/libcamera/bayer_format.cpp
>> +++ b/src/libcamera/bayer_format.cpp
>> @@ -18,6 +18,7 @@
>>   #include <libcamera/transform.h>
>>
>>   /**
>> + * \internal
>>    * \file bayer_format.h
>>    * \brief Class to represent Bayer formats and manipulate them
>>    */
>> @@ -25,6 +26,7 @@
>>   namespace libcamera {
>>
>>   /**
>> + * \internal
>>    * \class BayerFormat
>>    * \brief Class to represent a raw image Bayer format
>>    *
>> @@ -36,6 +38,7 @@ namespace libcamera {
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum BayerFormat::Order
>>    * \brief The order of the colour channels in the Bayer pattern
>>    *
>> @@ -52,6 +55,7 @@ namespace libcamera {
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum BayerFormat::Packing
>>    * \brief Different types of packing that can be applied to a BayerFormat
>>    *
>> diff --git a/src/libcamera/byte_stream_buffer.cpp b/src/libcamera/byte_stream_buffer.cpp
>> index 881cd371..c9ec1133 100644
>> --- a/src/libcamera/byte_stream_buffer.cpp
>> +++ b/src/libcamera/byte_stream_buffer.cpp
>> @@ -13,6 +13,7 @@
>>   #include <libcamera/base/log.h>
>>
>>   /**
>> + * \internal
>>    * \file byte_stream_buffer.h
>>    * \brief Managed memory container for serialized data
>>    */
>> @@ -22,6 +23,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(Serialization)
>>
>>   /**
>> + * \internal
>>    * \class ByteStreamBuffer
>>    * \brief Wrap a memory buffer and provide sequential data read and write
>>    *
>> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
>> index 0ad1a4b5..f4ac06fb 100644
>> --- a/src/libcamera/camera.cpp
>> +++ b/src/libcamera/camera.cpp
>> @@ -560,6 +560,7 @@ CameraConfiguration::Status CameraConfiguration::validateColorSpaces(ColorSpaceF
>>    */
>>
>>   /**
>> + * \internal
>>    * \class Camera::Private
>>    * \brief Base class for camera private data
>>    *
>> diff --git a/src/libcamera/camera_controls.cpp b/src/libcamera/camera_controls.cpp
>> index cabdcf75..260303eb 100644
>> --- a/src/libcamera/camera_controls.cpp
>> +++ b/src/libcamera/camera_controls.cpp
>> @@ -11,6 +11,7 @@
>>   #include <libcamera/controls.h>
>>
>>   /**
>> + * \internal
>>    * \file camera_controls.h
>>    * \brief Controls for Camera instances
>>    */
>> @@ -18,6 +19,7 @@
>>   namespace libcamera {
>>
>>   /**
>> + * \internal
>>    * \class CameraControlValidator
>>    * \brief A control validator for Camera instances
>>    *
>> diff --git a/src/libcamera/camera_lens.cpp b/src/libcamera/camera_lens.cpp
>> index b3d48199..eda4cb5c 100644
>> --- a/src/libcamera/camera_lens.cpp
>> +++ b/src/libcamera/camera_lens.cpp
>> @@ -12,6 +12,7 @@
>>   #include "libcamera/internal/v4l2_subdevice.h"
>>
>>   /**
>> + * \internal
>>    * \file camera_lens.h
>>    * \brief A camera lens controller
>>    */
>> @@ -21,6 +22,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(CameraLens)
>>
>>   /**
>> + * \internal
>>    * \class CameraLens
>>    * \brief A camera lens based on V4L2 subdevices
>>    *
>> diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp
>> index 355f3ada..61d45256 100644
>> --- a/src/libcamera/camera_manager.cpp
>> +++ b/src/libcamera/camera_manager.cpp
>> @@ -23,6 +23,7 @@
>>    */
>>
>>   /**
>> + * \internal
>>    * \file libcamera/internal/camera_manager.h
>>    * \brief Internal camera manager support
>>    */
>> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
>> index 0ef78d9c..f84822e1 100644
>> --- a/src/libcamera/camera_sensor.cpp
>> +++ b/src/libcamera/camera_sensor.cpp
>> @@ -28,6 +28,7 @@
>>   #include "libcamera/internal/sysfs.h"
>>
>>   /**
>> + * \internal
>>    * \file camera_sensor.h
>>    * \brief A camera sensor
>>    */
>> @@ -37,6 +38,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(CameraSensor)
>>
>>   /**
>> + * \internal
>>    * \class CameraSensor
>>    * \brief A camera sensor based on V4L2 subdevices
>>    *
>> diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp
>> index 27d6799a..83391b80 100644
>> --- a/src/libcamera/camera_sensor_properties.cpp
>> +++ b/src/libcamera/camera_sensor_properties.cpp
>> @@ -14,6 +14,7 @@
>>   #include <libcamera/control_ids.h>
>>
>>   /**
>> + * \internal
>>    * \file camera_sensor_properties.h
>>    * \brief Database of camera sensor properties
>>    *
>> @@ -31,6 +32,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(CameraSensorProperties)
>>
>>   /**
>> + * \internal
>>    * \struct CameraSensorProperties
>>    * \brief Database of camera sensor properties
>>    *
>> diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp
>> index 0cf719bd..3c30efc5 100644
>> --- a/src/libcamera/control_serializer.cpp
>> +++ b/src/libcamera/control_serializer.cpp
>> @@ -23,6 +23,7 @@
>>   #include "libcamera/internal/byte_stream_buffer.h"
>>
>>   /**
>> + * \internal
>>    * \file control_serializer.h
>>    * \brief Serialization and deserialization helpers for controls
>>    */
>> @@ -32,6 +33,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(Serializer)
>>
>>   /**
>> + * \internal
>>    * \class ControlSerializer
>>    * \brief Serializer and deserializer for control-related classes
>>    *
>> @@ -86,6 +88,7 @@ LOG_DEFINE_CATEGORY(Serializer)
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum ControlSerializer::Role
>>    * \brief Define the role of the IPC component using the control serializer
>>    *
>> diff --git a/src/libcamera/control_validator.cpp b/src/libcamera/control_validator.cpp
>> index cf08b34a..4c3cbd5b 100644
>> --- a/src/libcamera/control_validator.cpp
>> +++ b/src/libcamera/control_validator.cpp
>> @@ -8,6 +8,7 @@
>>   #include "libcamera/internal/control_validator.h"
>>
>>   /**
>> + * \internal
>>    * \file control_validator.h
>>    * \brief Abstract control validator
>>    */
>> @@ -15,6 +16,7 @@
>>   namespace libcamera {
>>
>>   /**
>> + * \internal
>>    * \class ControlValidator
>>    * \brief Interface for the control validator
>>    *
>> diff --git a/src/libcamera/converter.cpp b/src/libcamera/converter.cpp
>> index 9f64eb51..09792064 100644
>> --- a/src/libcamera/converter.cpp
>> +++ b/src/libcamera/converter.cpp
>> @@ -14,6 +14,7 @@
>>   #include "libcamera/internal/media_device.h"
>>
>>   /**
>> + * \internal
>>    * \file internal/converter.h
>>    * \brief Abstract converter
>>    */
>> @@ -23,6 +24,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(Converter)
>>
>>   /**
>> + * \internal
>>    * \class Converter
>>    * \brief Abstract Base Class for converter
>>    *
>> @@ -164,6 +166,7 @@ Converter::~Converter()
>>    */
>>
>>   /**
>> + * \internal
>>    * \class ConverterFactoryBase
>>    * \brief Base class for converter factories
>>    *
>> @@ -296,6 +299,7 @@ std::vector<ConverterFactoryBase *> &ConverterFactoryBase::factories()
>>    */
>>
>>   /**
>> + * \internal
>>    * \class ConverterFactory
>>    * \brief Registration of ConverterFactory classes and creation of instances
>>    * \param _Converter The converter class type for this factory
>> diff --git a/src/libcamera/converter/converter_v4l2_m2m.cpp b/src/libcamera/converter/converter_v4l2_m2m.cpp
>> index 2a4d1d99..147b5b12 100644
>> --- a/src/libcamera/converter/converter_v4l2_m2m.cpp
>> +++ b/src/libcamera/converter/converter_v4l2_m2m.cpp
>> @@ -23,6 +23,7 @@
>>   #include "libcamera/internal/v4l2_videodevice.h"
>>
>>   /**
>> + * \internal
>>    * \file internal/converter/converter_v4l2_m2m.h
>>    * \brief V4L2 M2M based converter
>>    */
>> @@ -182,6 +183,7 @@ void V4L2M2MConverter::Stream::captureBufferReady(FrameBuffer *buffer)
>>    */
>>
>>   /**
>> + * \internal
>>    * \class libcamera::V4L2M2MConverter
>>    * \brief The V4L2 M2M converter implements the converter interface based on
>>    * V4L2 M2M device.
>> diff --git a/src/libcamera/delayed_controls.cpp b/src/libcamera/delayed_controls.cpp
>> index 777441e8..496aa941 100644
>> --- a/src/libcamera/delayed_controls.cpp
>> +++ b/src/libcamera/delayed_controls.cpp
>> @@ -14,6 +14,7 @@
>>   #include "libcamera/internal/v4l2_device.h"
>>
>>   /**
>> + * \internal
>>    * \file delayed_controls.h
>>    * \brief Helper to deal with controls that take effect with a delay
>>    */
>> @@ -23,6 +24,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(DelayedControls)
>>
>>   /**
>> + * \internal
>>    * \class DelayedControls
>>    * \brief Helper to deal with controls that take effect with a delay
>>    *
>> @@ -39,6 +41,7 @@ LOG_DEFINE_CATEGORY(DelayedControls)
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct DelayedControls::ControlParams
>>    * \brief Parameters associated with controls handled by the \a DelayedControls
>>    * helper class
>> diff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp
>> index f2e055de..a4aeb660 100644
>> --- a/src/libcamera/device_enumerator.cpp
>> +++ b/src/libcamera/device_enumerator.cpp
>> @@ -16,6 +16,7 @@
>>   #include "libcamera/internal/media_device.h"
>>
>>   /**
>> + * \internal
>>    * \file device_enumerator.h
>>    * \brief Enumeration and matching of media devices
>>    *
>> @@ -41,6 +42,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(DeviceEnumerator)
>>
>>   /**
>> + * \internal
>>    * \class DeviceMatch
>>    * \brief Description of a media device search pattern
>>    *
>> @@ -114,6 +116,7 @@ bool DeviceMatch::match(const MediaDevice *device) const
>>   }
>>
>>   /**
>> + * \internal
>>    * \class DeviceEnumerator
>>    * \brief Enumerate, store and search media devices
>>    *
>> diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp
>> index 5a7f3c0b..b667022a 100644
>> --- a/src/libcamera/framebuffer.cpp
>> +++ b/src/libcamera/framebuffer.cpp
>> @@ -17,6 +17,7 @@
>>    * \file libcamera/framebuffer.h
>>    * \brief Frame buffer handling
>>    *
>> + * \internal
>>    * \file libcamera/internal/framebuffer.h
>>    * \brief Internal frame buffer handling support
>>    */
>> @@ -105,6 +106,7 @@ LOG_DEFINE_CATEGORY(Buffer)
>>    */
>>
>>   /**
>> + * \internal
>>    * \class FrameBuffer::Private
>>    * \brief Base class for FrameBuffer private data
>>    *
>> diff --git a/src/libcamera/ipa_controls.cpp b/src/libcamera/ipa_controls.cpp
>> index 870a443b..255023a0 100644
>> --- a/src/libcamera/ipa_controls.cpp
>> +++ b/src/libcamera/ipa_controls.cpp
>> @@ -8,6 +8,7 @@
>>   #include <libcamera/ipa/ipa_controls.h>
>>
>>   /**
>> + * \internal
>>    * \file ipa_controls.h
>>    * \brief Type definitions for serialized controls
>>    *
>> @@ -166,6 +167,7 @@ namespace libcamera {
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct ipa_controls_header
>>    * \brief Serialized control packet header
>>    * \var ipa_controls_header::version
>> @@ -190,6 +192,7 @@ static_assert(sizeof(ipa_controls_header) == 32,
>>   	      "Invalid ABI size change for struct ipa_control_header");
>>
>>   /**
>> + * \internal
>>    * \struct ipa_control_value_entry
>>    * \brief Description of a serialized ControlValue entry
>>    * \var ipa_control_value_entry::id
>> @@ -211,6 +214,7 @@ static_assert(sizeof(ipa_control_value_entry) == 16,
>>   	      "Invalid ABI size change for struct ipa_control_value_entry");
>>
>>   /**
>> + * \internal
>>    * \struct ipa_control_info_entry
>>    * \brief Description of a serialized ControlInfo entry
>>    * \var ipa_control_info_entry::id
>> diff --git a/src/libcamera/ipa_data_serializer.cpp b/src/libcamera/ipa_data_serializer.cpp
>> index 0a259305..022801a2 100644
>> --- a/src/libcamera/ipa_data_serializer.cpp
>> +++ b/src/libcamera/ipa_data_serializer.cpp
>> @@ -12,6 +12,7 @@
>>   #include <libcamera/base/log.h>
>>
>>   /**
>> + * \internal
>>    * \file ipa_data_serializer.h
>>    * \brief IPA Data Serializer
>>    */
>> @@ -21,6 +22,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(IPADataSerializer)
>>
>>   /**
>> + * \internal
>>    * \class IPADataSerializer
>>    * \brief IPA Data Serializer
>>    *
>> diff --git a/src/libcamera/ipa_interface.cpp b/src/libcamera/ipa_interface.cpp
>> index 8ea6cbee..45f50981 100644
>> --- a/src/libcamera/ipa_interface.cpp
>> +++ b/src/libcamera/ipa_interface.cpp
>> @@ -8,6 +8,7 @@
>>   #include <libcamera/ipa/ipa_interface.h>
>>
>>   /**
>> + * \internal
>>    * \file ipa_interface.h
>>    * \brief Image Processing Algorithm interface
>>    *
>> @@ -76,6 +77,7 @@
>>   namespace libcamera {
>>
>>   /**
>> + * \internal
>>    * \class IPAInterface
>>    * \brief C++ Interface for IPA implementation
>>    *
>> diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp
>> index 7a4515d9..865fbb5a 100644
>> --- a/src/libcamera/ipa_manager.cpp
>> +++ b/src/libcamera/ipa_manager.cpp
>> @@ -21,6 +21,7 @@
>>   #include "libcamera/internal/pipeline_handler.h"
>>
>>   /**
>> + * \internal
>>    * \file ipa_manager.h
>>    * \brief Image Processing Algorithm module manager
>>    */
>> @@ -30,6 +31,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(IPAManager)
>>
>>   /**
>> + * \internal
>>    * \class IPAManager
>>    * \brief Manager for IPA modules
>>    *
>> diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp
>> index f2dd87e5..73a415ac 100644
>> --- a/src/libcamera/ipa_module.cpp
>> +++ b/src/libcamera/ipa_module.cpp
>> @@ -28,11 +28,13 @@
>>   #include "libcamera/internal/pipeline_handler.h"
>>
>>   /**
>> + * \internal
>>    * \file ipa_module.h
>>    * \brief Image Processing Algorithm module
>>    */
>>
>>   /**
>> + * \internal
>>    * \file ipa_module_info.h
>>    * \brief Image Processing Algorithm module information
>>    */
>> @@ -200,6 +202,7 @@ Span<const uint8_t> elfLoadSymbol(Span<const uint8_t> elf, const char *symbol)
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct IPAModuleInfo
>>    * \brief Information of an IPA module
>>    *
>> @@ -240,6 +243,7 @@ Span<const uint8_t> elfLoadSymbol(Span<const uint8_t> elf, const char *symbol)
>>    */
>>
>>   /**
>> + * \internal
>>    * \class IPAModule
>>    * \brief Wrapper around IPA module shared object
>>    */
>> diff --git a/src/libcamera/ipa_proxy.cpp b/src/libcamera/ipa_proxy.cpp
>> index 3f2cc6b8..7205f588 100644
>> --- a/src/libcamera/ipa_proxy.cpp
>> +++ b/src/libcamera/ipa_proxy.cpp
>> @@ -18,6 +18,7 @@
>>   #include "libcamera/internal/ipa_module.h"
>>
>>   /**
>> + * \internal
>>    * \file ipa_proxy.h
>>    * \brief IPA Proxy
>>    */
>> @@ -27,6 +28,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(IPAProxy)
>>
>>   /**
>> + * \internal
>>    * \class IPAProxy
>>    * \brief IPA Proxy
>>    *
>> @@ -34,6 +36,7 @@ LOG_DEFINE_CATEGORY(IPAProxy)
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum IPAProxy::ProxyState
>>    * \brief Identifies the available operational states of the proxy
>>    *
>> diff --git a/src/libcamera/ipc_pipe.cpp b/src/libcamera/ipc_pipe.cpp
>> index 31a0ca09..2f36a129 100644
>> --- a/src/libcamera/ipc_pipe.cpp
>> +++ b/src/libcamera/ipc_pipe.cpp
>> @@ -10,6 +10,7 @@
>>   #include <libcamera/base/log.h>
>>
>>   /**
>> + * \internal
>>    * \file ipc_pipe.h
>>    * \brief IPC mechanism for IPA isolation
>>    */
>> @@ -19,6 +20,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(IPCPipe)
>>
>>   /**
>> + * \internal
>>    * \struct IPCMessage::Header
>>    * \brief Container for an IPCMessage header
>>    *
>> @@ -41,6 +43,7 @@ LOG_DEFINE_CATEGORY(IPCPipe)
>>    */
>>
>>   /**
>> + * \internal
>>    * \class IPCMessage
>>    * \brief IPC message to be passed through IPC message pipe
>>    */
>> @@ -149,6 +152,7 @@ IPCUnixSocket::Payload IPCMessage::payload() const
>>    */
>>
>>   /**
>> + * \internal
>>    * \class IPCPipe
>>    * \brief IPC message pipe for IPA isolation
>>    *
>> diff --git a/src/libcamera/ipc_unixsocket.cpp b/src/libcamera/ipc_unixsocket.cpp
>> index 1980d374..38365134 100644
>> --- a/src/libcamera/ipc_unixsocket.cpp
>> +++ b/src/libcamera/ipc_unixsocket.cpp
>> @@ -17,6 +17,7 @@
>>   #include <libcamera/base/log.h>
>>
>>   /**
>> + * \internal
>>    * \file ipc_unixsocket.h
>>    * \brief IPC mechanism based on Unix sockets
>>    */
>> @@ -26,6 +27,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(IPCUnixSocket)
>>
>>   /**
>> + * \internal
>>    * \struct IPCUnixSocket::Payload
>>    * \brief Container for an IPC payload
>>    *
>> @@ -44,6 +46,7 @@ LOG_DEFINE_CATEGORY(IPCUnixSocket)
>>    */
>>
>>   /**
>> + * \internal
>>    * \class IPCUnixSocket
>>    * \brief IPC mechanism based on Unix sockets
>>    *
>> diff --git a/src/libcamera/mapped_framebuffer.cpp b/src/libcamera/mapped_framebuffer.cpp
>> index 6860069b..c1e941b1 100644
>> --- a/src/libcamera/mapped_framebuffer.cpp
>> +++ b/src/libcamera/mapped_framebuffer.cpp
>> @@ -16,6 +16,7 @@
>>   #include <libcamera/base/log.h>
>>
>>   /**
>> + * \internal
>>    * \file libcamera/internal/mapped_framebuffer.h
>>    * \brief Frame buffer memory mapping support
>>    */
>> @@ -25,6 +26,7 @@ namespace libcamera {
>>   LOG_DECLARE_CATEGORY(Buffer)
>>
>>   /**
>> + * \internal
>>    * \class MappedBuffer
>>    * \brief Provide an interface to support managing memory mapped buffers
>>    *
>> @@ -148,11 +150,13 @@ MappedBuffer::~MappedBuffer()
>>    */
>>
>>   /**
>> + * \internal
>>    * \class MappedFrameBuffer
>>    * \brief Map a FrameBuffer using the MappedBuffer interface
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum MappedFrameBuffer::MapFlag
>>    * \brief Specify the mapping mode for the FrameBuffer
>>    * \var MappedFrameBuffer::Read
>> diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp
>> index 2949816b..ef7bdafa 100644
>> --- a/src/libcamera/media_device.cpp
>> +++ b/src/libcamera/media_device.cpp
>> @@ -21,6 +21,7 @@
>>   #include <libcamera/base/log.h>
>>
>>   /**
>> + * \internal
>>    * \file media_device.h
>>    * \brief Provide a representation of a Linux kernel Media Controller device
>>    * that exposes the full graph topology.
>> @@ -31,6 +32,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(MediaDevice)
>>
>>   /**
>> + * \internal
>>    * \class MediaDevice
>>    * \brief The MediaDevice represents a Media Controller device with its full
>>    * graph of connected objects.
>> diff --git a/src/libcamera/media_object.cpp b/src/libcamera/media_object.cpp
>> index c78f4758..7b8099a8 100644
>> --- a/src/libcamera/media_object.cpp
>> +++ b/src/libcamera/media_object.cpp
>> @@ -20,6 +20,7 @@
>>   #include "libcamera/internal/media_device.h"
>>
>>   /**
>> + * \internal
>>    * \file media_object.h
>>    * \brief Provides a class hierarchy that represents the  media objects exposed
>>    * by the Linux kernel Media Controller APIs.
>> @@ -43,6 +44,7 @@ namespace libcamera {
>>   LOG_DECLARE_CATEGORY(MediaDevice)
>>
>>   /**
>> + * \internal
>>    * \class MediaObject
>>    * \brief Base class for all media objects
>>    *
>> @@ -94,6 +96,7 @@ LOG_DECLARE_CATEGORY(MediaDevice)
>>    */
>>
>>   /**
>> + * \internal
>>    * \class MediaLink
>>    * \brief The MediaLink represents a link between two pads in the media graph.
>>    *
>> @@ -169,6 +172,7 @@ MediaLink::MediaLink(const struct media_v2_link *link, MediaPad *source,
>>    */
>>
>>   /**
>> + * \internal
>>    * \class MediaPad
>>    * \brief The MediaPad represents a pad of an entity in the media graph
>>    *
>> @@ -236,6 +240,7 @@ void MediaPad::addLink(MediaLink *link)
>>   }
>>
>>   /**
>> + * \internal
>>    * \class MediaEntity
>>    * \brief The MediaEntity represents an entity in the media graph
>>    *
>> @@ -248,6 +253,7 @@ void MediaPad::addLink(MediaLink *link)
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum MediaEntity::Type
>>    * \brief The type of the interface exposed by the entity to userspace
>>    *
>> diff --git a/src/libcamera/pipeline/ipu3/imgu.cpp b/src/libcamera/pipeline/ipu3/imgu.cpp
>> index 531879f1..f8eb43dd 100644
>> --- a/src/libcamera/pipeline/ipu3/imgu.cpp
>> +++ b/src/libcamera/pipeline/ipu3/imgu.cpp
>> @@ -274,6 +274,7 @@ FOV calcFOV(const Size &in, const ImgUDevice::PipeConfig &pipe)
>>   } /* namespace */
>>
>>   /**
>> + * \internal
>>    * \struct PipeConfig
>>    * \brief The ImgU pipe configuration parameters
>>    *
>> @@ -299,6 +300,7 @@ FOV calcFOV(const Size &in, const ImgUDevice::PipeConfig &pipe)
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct Pipe
>>    * \brief Describe the ImgU requested configuration
>>    *
>> diff --git a/src/libcamera/pipeline/rpi/common/delayed_controls.cpp b/src/libcamera/pipeline/rpi/common/delayed_controls.cpp
>> index 3db92e7d..f0cfcc6f 100644
>> --- a/src/libcamera/pipeline/rpi/common/delayed_controls.cpp
>> +++ b/src/libcamera/pipeline/rpi/common/delayed_controls.cpp
>> @@ -16,6 +16,7 @@
>>   #include "libcamera/internal/v4l2_device.h"
>>
>>   /**
>> + * \internal
>>    * \file delayed_controls.h
>>    * \brief Helper to deal with controls that take effect with a delay
>>    */
>> @@ -27,6 +28,7 @@ LOG_DEFINE_CATEGORY(RPiDelayedControls)
>>   namespace RPi {
>>
>>   /**
>> + * \internal
>>    * \class DelayedControls
>>    * \brief Helper to deal with controls that take effect with a delay
>>    *
>> @@ -43,6 +45,7 @@ namespace RPi {
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct DelayedControls::ControlParams
>>    * \brief Parameters associated with controls handled by the \a DelayedControls
>>    * helper class
>> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
>> index 29e0c98a..c690ec98 100644
>> --- a/src/libcamera/pipeline_handler.cpp
>> +++ b/src/libcamera/pipeline_handler.cpp
>> @@ -28,6 +28,7 @@
>>   #include "libcamera/internal/tracepoints.h"
>>
>>   /**
>> + * \internal
>>    * \file pipeline_handler.h
>>    * \brief Create pipelines and cameras from a set of media devices
>>    *
>> @@ -48,6 +49,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(Pipeline)
>>
>>   /**
>> + * \internal
>>    * \class PipelineHandler
>>    * \brief Create and manage cameras based on a set of media devices
>>    *
>> @@ -720,6 +722,7 @@ void PipelineHandler::disconnect()
>>    */
>>
>>   /**
>> + * \internal
>>    * \class PipelineHandlerFactoryBase
>>    * \brief Base class for pipeline handler factories
>>    *
>> @@ -795,6 +798,7 @@ std::vector<PipelineHandlerFactoryBase *> &PipelineHandlerFactoryBase::factories
>>   }
>>
>>   /**
>> + * \internal
>>    * \class PipelineHandlerFactory
>>    * \brief Registration of PipelineHandler classes and creation of instances
>>    * \tparam _PipelineHandler The pipeline handler class type for this factory
>> diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp
>> index 86a382fb..ca69a7fb 100644
>> --- a/src/libcamera/process.cpp
>> +++ b/src/libcamera/process.cpp
>> @@ -25,6 +25,7 @@
>>   #include <libcamera/base/utils.h>
>>
>>   /**
>> + * \internal
>>    * \file process.h
>>    * \brief Process object
>>    */
>> @@ -34,6 +35,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(Process)
>>
>>   /**
>> + * \internal
>>    * \class ProcessManager
>>    * \brief Manager of processes
>>    *
>> @@ -191,6 +193,7 @@ const struct sigaction &ProcessManager::oldsa() const
>>
>>
>>   /**
>> + * \internal
>>    * \class Process
>>    * \brief Process object
>>    *
>> @@ -199,6 +202,7 @@ const struct sigaction &ProcessManager::oldsa() const
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum Process::ExitStatus
>>    * \brief Exit status of process
>>    * \var Process::NotExited
>> diff --git a/src/libcamera/pub_key.cpp b/src/libcamera/pub_key.cpp
>> index 64dfa234..8b8624ef 100644
>> --- a/src/libcamera/pub_key.cpp
>> +++ b/src/libcamera/pub_key.cpp
>> @@ -17,6 +17,7 @@
>>   #endif
>>
>>   /**
>> + * \internal
>>    * \file pub_key.h
>>    * \brief Public key signature verification
>>    */
>> @@ -24,6 +25,7 @@
>>   namespace libcamera {
>>
>>   /**
>> + * \internal
>>    * \class PubKey
>>    * \brief Public key wrapper for signature verification
>>    *
>> diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
>> index 949c556f..930d8c92 100644
>> --- a/src/libcamera/request.cpp
>> +++ b/src/libcamera/request.cpp
>> @@ -33,6 +33,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(Request)
>>
>>   /**
>> + * \internal
>>    * \class Request::Private
>>    * \brief Request private data
>>    *
>> diff --git a/src/libcamera/source_paths.cpp b/src/libcamera/source_paths.cpp
>> index 19689585..cb29efb8 100644
>> --- a/src/libcamera/source_paths.cpp
>> +++ b/src/libcamera/source_paths.cpp
>> @@ -17,6 +17,7 @@
>>   #include <libcamera/base/utils.h>
>>
>>   /**
>> + * \internal
>>    * \file source_paths.h
>>    * \brief Identify the build and source path of a not-yet-installed library
>>    */
>> diff --git a/src/libcamera/sysfs.cpp b/src/libcamera/sysfs.cpp
>> index 44c3331b..e256db7c 100644
>> --- a/src/libcamera/sysfs.cpp
>> +++ b/src/libcamera/sysfs.cpp
>> @@ -16,6 +16,7 @@
>>   #include <libcamera/base/log.h>
>>
>>   /**
>> + * \internal
>>    * \file sysfs.h
>>    * \brief Miscellaneous utility functions to access sysfs
>>    */
>> diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
>> index 24d208ef..4d016bda 100644
>> --- a/src/libcamera/v4l2_device.cpp
>> +++ b/src/libcamera/v4l2_device.cpp
>> @@ -28,6 +28,7 @@
>>   #include "libcamera/internal/sysfs.h"
>>
>>   /**
>> + * \internal
>>    * \file v4l2_device.h
>>    * \brief Common base for V4L2 devices and subdevices
>>    */
>> @@ -37,6 +38,7 @@ namespace libcamera {
>>   LOG_DEFINE_CATEGORY(V4L2)
>>
>>   /**
>> + * \internal
>>    * \class V4L2Device
>>    * \brief Base class for V4L2VideoDevice and V4L2Subdevice
>>    *
>> diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp
>> index 5551c62e..693ec3e0 100644
>> --- a/src/libcamera/v4l2_pixelformat.cpp
>> +++ b/src/libcamera/v4l2_pixelformat.cpp
>> @@ -20,6 +20,7 @@
>>   #include "libcamera/internal/formats.h"
>>
>>   /**
>> + * \internal
>>    * \file v4l2_pixelformat.h
>>    * \brief V4L2 Pixel Format
>>    */
>> @@ -29,6 +30,7 @@ namespace libcamera {
>>   LOG_DECLARE_CATEGORY(V4L2)
>>
>>   /**
>> + * \internal
>>    * \class V4L2PixelFormat
>>    * \brief V4L2 pixel format FourCC wrapper
>>    *
>> @@ -212,6 +214,7 @@ const std::map<V4L2PixelFormat, V4L2PixelFormat::Info> vpf2pf{
>>   } /* namespace */
>>
>>   /**
>> + * \internal
>>    * \struct V4L2PixelFormat::Info
>>    * \brief Information about a V4L2 pixel format
>>    *
>> diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
>> index 15e8206a..70697868 100644
>> --- a/src/libcamera/v4l2_subdevice.cpp
>> +++ b/src/libcamera/v4l2_subdevice.cpp
>> @@ -28,6 +28,7 @@
>>   #include "libcamera/internal/media_object.h"
>>
>>   /**
>> + * \internal
>>    * \file v4l2_subdevice.h
>>    * \brief V4L2 Subdevice API
>>    */
>> @@ -39,6 +40,7 @@ LOG_DECLARE_CATEGORY(V4L2)
>>   namespace {
>>
>>   /*
>> + * \internal
>>    * \struct V4L2SubdeviceFormatInfo
>>    * \brief Information about media bus formats
>>    * \param bitsPerPixel Bits per pixel
>> @@ -140,6 +142,7 @@ const std::map<uint32_t, V4L2SubdeviceFormatInfo> formatInfoMap = {
>>   } /* namespace */
>>
>>   /**
>> + * \internal
>>    * \struct V4L2SubdeviceCapability
>>    * \brief struct v4l2_subdev_capability object wrapper and helpers
>>    *
>> @@ -164,6 +167,7 @@ const std::map<uint32_t, V4L2SubdeviceFormatInfo> formatInfoMap = {
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct V4L2SubdeviceFormat
>>    * \brief The V4L2 sub-device image format and sizes
>>    *
>> @@ -267,6 +271,7 @@ std::ostream &operator<<(std::ostream &out, const V4L2SubdeviceFormat &f)
>>   }
>>
>>   /**
>> + * \internal
>>    * \class V4L2Subdevice
>>    * \brief A V4L2 subdevice as exposed by the Linux kernel
>>    *
>> @@ -286,6 +291,7 @@ std::ostream &operator<<(std::ostream &out, const V4L2SubdeviceFormat &f)
>>    */
>>
>>   /**
>> + * \internal
>>    * \enum V4L2Subdevice::Whence
>>    * \brief Specify the type of format for getFormat() and setFormat() operations
>>    * \var V4L2Subdevice::ActiveFormat
>> @@ -295,6 +301,7 @@ std::ostream &operator<<(std::ostream &out, const V4L2SubdeviceFormat &f)
>>    */
>>
>>   /**
>> + * \internal
>>    * \class V4L2Subdevice::Routing
>>    * \brief V4L2 subdevice routing table
>>    *
>> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
>> index a72ef64d..699a4284 100644
>> --- a/src/libcamera/v4l2_videodevice.cpp
>> +++ b/src/libcamera/v4l2_videodevice.cpp
>> @@ -33,6 +33,7 @@
>>   #include "libcamera/internal/media_object.h"
>>
>>   /**
>> + * \internal
>>    * \file v4l2_videodevice.h
>>    * \brief V4L2 Video Device
>>    */
>> @@ -42,6 +43,7 @@ namespace libcamera {
>>   LOG_DECLARE_CATEGORY(V4L2)
>>
>>   /**
>> + * \internal
>>    * \struct V4L2Capability
>>    * \brief struct v4l2_capability object wrapper and helpers
>>    *
>> @@ -147,6 +149,7 @@ LOG_DECLARE_CATEGORY(V4L2)
>>    */
>>
>>   /**
>> + * \internal
>>    * \class V4L2BufferCache
>>    * \brief Hot cache of associations between V4L2 buffer indexes and FrameBuffer
>>    *
>> @@ -302,6 +305,7 @@ bool V4L2BufferCache::Entry::operator==(const FrameBuffer &buffer) const
>>   }
>>
>>   /**
>> + * \internal
>>    * \class V4L2DeviceFormat
>>    * \brief The V4L2 video device image format and sizes
>>    *
>> @@ -375,6 +379,7 @@ bool V4L2BufferCache::Entry::operator==(const FrameBuffer &buffer) const
>>    */
>>
>>   /**
>> + * \internal
>>    * \struct V4L2DeviceFormat::Plane
>>    * \brief Per-plane memory size information
>>    * \var V4L2DeviceFormat::Plane::size
>> @@ -452,6 +457,7 @@ std::ostream &operator<<(std::ostream &out, const V4L2DeviceFormat &f)
>>   }
>>
>>   /**
>> + * \internal
>>    * \class V4L2VideoDevice
>>    * \brief V4L2VideoDevice object and API
>>    *
>> @@ -2064,6 +2070,7 @@ V4L2PixelFormat V4L2VideoDevice::toV4L2PixelFormat(const PixelFormat &pixelForma
>>   }
>>
>>   /**
>> + * \internal
>>    * \class V4L2M2MDevice
>>    * \brief Memory-to-Memory video device
>>    *
>> diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp
>> index bf21141e..f9c37e8f 100644
>> --- a/src/libcamera/yaml_parser.cpp
>> +++ b/src/libcamera/yaml_parser.cpp
>> @@ -18,6 +18,7 @@
>>   #include <yaml.h>
>>
>>   /**
>> + * \internal
>>    * \file libcamera/internal/yaml_parser.h
>>    * \brief A YAML parser helper
>>    */
>> @@ -34,6 +35,7 @@ static const YamlObject empty;
>>   } /* namespace */
>>
>>   /**
>> + * \internal
>>    * \class YamlObject
>>    * \brief A class representing the tree structure of the YAML content
>>    *
>> @@ -511,6 +513,7 @@ private:
>>   };
>>
>>   /**
>> + * \internal
>>    * \class YamlParserContext
>>    * \brief Class for YamlParser parsing and context data
>>    *
>> @@ -523,6 +526,7 @@ YamlParserContext::YamlParserContext()
>>   }
>>
>>   /**
>> + * \internal
>>    * \class YamlParserContext
>>    * \brief Destructor of YamlParserContext
>>    */
>> @@ -772,6 +776,7 @@ int YamlParserContext::parseNextYamlObject(YamlObject &yamlObject, EventPtr even
>>   #endif /* __DOXYGEN__ */
>>
>>   /**
>> + * \internal
>>    * \class YamlParser
>>    * \brief A helper class for parsing a YAML file
>>    *
>> --
>> 2.34.1
>>


More information about the libcamera-devel mailing list