[PATCH v5 05/18] libcamera: Hide *::Private classes with __DOXYGEN_PUBLIC__
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Aug 7 15:04:08 CEST 2024
On Wed, Aug 07, 2024 at 06:16:38AM +0100, Kieran Bingham wrote:
> Quoting Laurent Pinchart (2024-08-05 15:36:41)
> > The *::Private classes are part of the internal API, as their name
> > implies. They are defined in internal headers, but implemented in the
> > same source file as their public counterparts. This will cause Doxygen
> > to complain about missing class definition when splitting the public and
> > internal API documents, as the internal headers won't be parsed by
> > Doxygen for the public API documentation.
> >
> > Marking the classes with \internal isn't enough. The directive prevents
> > the documentation block from being included in the output, but this
>
> Does \private or \privatesection do anything here? or does that still
> lead to the same issue as it will just mark them as 'private' and still
> expect to find the definitions?
\private is for private members in the C++ sense. I don't see how it
could be used here.
> > occurs at the generation stage, after the documentation blocks are
> > parsed. Fix this by completely hidding the implementation of the
> > *::Private classes from Doxygen using preprocessor conditional
> > compilation. To do so, introduce a new macro, __DOXYGEN_PUBLIC__, that
> > will be defined for the public API documentation only.
>
> It's a shame to be adding ifdefery. But understandable if this is the
> best way forwards.
I don't like it much either, but it's the best option I could find. We
have few public classes with Private data, so I think I can live with
this. Going forward, once we'll have a C API, Private will disappear
anyway.
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > src/libcamera/camera.cpp | 2 ++
> > src/libcamera/camera_manager.cpp | 2 ++
> > src/libcamera/framebuffer.cpp | 2 ++
> > src/libcamera/request.cpp | 2 ++
> > 4 files changed, 8 insertions(+)
> >
> > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
> > index 3c8f30d54401..aca466c9ba72 100644
> > --- a/src/libcamera/camera.cpp
> > +++ b/src/libcamera/camera.cpp
> > @@ -565,6 +565,7 @@ CameraConfiguration::Status CameraConfiguration::validateColorSpaces(ColorSpaceF
> > * \brief The vector of stream configurations
> > */
> >
> > +#ifndef __DOXYGEN_PUBLIC__
> > /**
> > * \class Camera::Private
> > * \brief Base class for camera private data
> > @@ -725,6 +726,7 @@ void Camera::Private::setState(State state)
> > {
> > state_.store(state, std::memory_order_release);
> > }
> > +#endif /* __DOXYGEN_PUBLIC__ */
> >
> > /**
> > * \class Camera
> > diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp
> > index 5a21132a08c2..fa44e33a135d 100644
> > --- a/src/libcamera/camera_manager.cpp
> > +++ b/src/libcamera/camera_manager.cpp
> > @@ -35,6 +35,7 @@ namespace libcamera {
> >
> > LOG_DEFINE_CATEGORY(Camera)
> >
> > +#ifndef __DOXYGEN_PUBLIC__
> > CameraManager::Private::Private()
> > : initialized_(false)
> > {
> > @@ -249,6 +250,7 @@ void CameraManager::Private::removeCamera(std::shared_ptr<Camera> camera)
> > CameraManager *const o = LIBCAMERA_O_PTR();
> > o->cameraRemoved.emit(camera);
> > }
> > +#endif /* __DOXYGEN_PUBLIC__ */
> >
> > /**
> > * \class CameraManager
> > diff --git a/src/libcamera/framebuffer.cpp b/src/libcamera/framebuffer.cpp
> > index f39db1223432..826848f75a56 100644
> > --- a/src/libcamera/framebuffer.cpp
> > +++ b/src/libcamera/framebuffer.cpp
> > @@ -107,6 +107,7 @@ LOG_DEFINE_CATEGORY(Buffer)
> > * \return The array of per-plane metadata
> > */
> >
> > +#ifndef __DOXYGEN_PUBLIC__
> > /**
> > * \class FrameBuffer::Private
> > * \brief Base class for FrameBuffer private data
> > @@ -209,6 +210,7 @@ FrameBuffer::Private::~Private()
> > * \brief Retrieve the dynamic metadata
> > * \return Dynamic metadata for the frame contained in the buffer
> > */
> > +#endif /* __DOXYGEN_PUBLIC__ */
> >
> > /**
> > * \class FrameBuffer
> > diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> > index 24fa3a57312e..8c56ed30d0c4 100644
> > --- a/src/libcamera/request.cpp
> > +++ b/src/libcamera/request.cpp
> > @@ -38,6 +38,7 @@ namespace libcamera {
> >
> > LOG_DEFINE_CATEGORY(Request)
> >
> > +#ifndef __DOXYGEN_PUBLIC__
> > /**
> > * \class Request::Private
> > * \brief Request private data
> > @@ -306,6 +307,7 @@ void Request::Private::timeout()
> >
> > emitPrepareCompleted();
> > }
> > +#endif /* __DOXYGEN_PUBLIC__ */
> >
> > /**
> > * \enum Request::Status
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list