[libcamera-devel] [PATCH v2 0/7] Introduce formats:: namespace for libcamera pixel formats
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Jun 10 15:10:42 CEST 2020
Hi Stéphane,
On Wed, Jun 10, 2020 at 03:08:00PM +0200, scerveau wrote:
> Hi Laurent,
>
> I was suspecting something like that regarding the drm includes but
> could you explain why you dont want to depend on the libdrm package as a
> few runtime dependencies are necessary already ?
Because libcamera doesn't interact with DRM devices, to there's no need
for libdrm. The only thing we need is the definitions of the the pixel
formats.
> On 10/6/20 14:57, Laurent Pinchart wrote:
> > On Wed, Jun 10, 2020 at 02:49:31PM +0200, scerveau wrote:
> >> Hello Laurent,
> >>
> >> Yesterday I tried a different approach from previous attempt, where I
> >> proposed to install the libdrm headers in libcamera include folders.
> >>
> >> Indeed I succeeded to make libcamera compile without including
> >> drm_fourcc.h in pixel_format.h, see attached patches.
> >>
> >> This is building correctly on my machine (ubuntu 18.04) with a simple
> >> `meson build`. But I might have missed use cases.
> >>
> >> Concerning the libdrm dependency or includes, I haven't noticed with
> >> Debian/Buster or ArchLinux/latest (docker images) any issue mentioned
> >> with libdrm include folder. Both can be found with pkg-config on Ubuntu
> >> as well.
> >
> > The issue is that we wanted to depend in the Linux kernel DRM headers,
> > not the libdrm package. libcamera doesn't interact with DRM directly, so
> > depending on libdrm wasn't something we wanted to consider. The Linux
> > kernel DRM headers contain drm_fourcc.h, which we initially thought
> > would be enough, but it turned out that distributions don't all ship the
> > DRM headers as part of the Linux kernel headers package.
> >
> >> On the other hand your approach might be better, to remove the
> >> dependency to libdrm and create your own define for the format if it's
> >> going to be the only dependency, the project will have to libdrm.
> >>
> >> But in this case the patch is missing to remove those files then:
> >>
> >> - drm.h
> >> - drm_fourcc.h
> >> - drm_mode.h
> >
> > drm.h and drm_mode.h should indeed be dropped. drm_fourcc.h is still
> > used by gen-formats.py to generate the formats.h header, so we need to
> > keep it.4
> >
> >> On 10/6/20 1:23, Laurent Pinchart wrote:
> >>> Hello,
> >>>
> >>> This patch series is an attempt to fix a problem caused by a direct
> >>> dependency on drm_fourcc.h in the libcamera public API.
> >>>
> >>> libcamera specifies pixel formats using the DRM pixel format FourCC and
> >>> modifiers. This requires both internal code and applications to include
> >>> drm_fourcc.h. For internal code, we carry a copy of the header to avoid
> >>> external dependencies. For third-party applications, however,
> >>> drm_fourcc.h needs to be accessible from system includes. It turns out
> >>> that the file is shipped by two different packages:
> >>>
> >>> - libdrm, which typically installs it in /usr/include/libdrm/
> >>> - kernel headers or libc headers, which typically installs it in
> >>> /usr/include/drm
> >>>
> >>> We don't want to make libdrm a dependency for applications using
> >>> libcamera. Unfortunately, depending on drm_fourcc.h being provided by
> >>> the distribution kernel headers or libc headers package causes issues,
> >>> as not all distributions install the header in /usr/include/drm/. Ubuntu
> >>> and Gentoo do, but Debian and Arch don't.
> >>>
> >>> The best option may be to remove the dependency on the macros provided
> >>> by drm_fourcc.h, while keeping the pixel format numerical values
> >>> identical. This is what this patch series attempts to do.
> >>>
> >>> Patch 1/7 creates a new libcamera::formats:: namespace and populates it
> >>> with constants (in the form of constexpr) for all supported pixel
> >>> formats. The values are automatically generated from a list of formats,
> >>> stored in formats.yaml, and the numerical values for the DRM FourCCs and
> >>> modifiers are extracted from drm_fourcc.h.
> >>>
> >>> Patches 2/7 to 7/8 then replace usage of the DRM_FORMAT_* macros through
> >>> the code.
> >>>
> >>> Laurent Pinchart (7):
> >>> libcamera: Define constants for pixel formats in the public API
> >>> gst: Replace explicit DRM FourCCs with libcamera formats
> >>> qcam: Replace explicit DRM FourCCs with libcamera formats
> >>> v4l2: Replace explicit DRM FourCCs with libcamera formats
> >>> test: Replace explicit DRM FourCCs with libcamera formats
> >>> libcamera: pipeline: Replace explicit DRM FourCCs with libcamera
> >>> formats
> >>> libcamera: Replace explicit DRM FourCCs with libcamera formats
> >>>
> >>> include/libcamera/formats.h.in | 44 ++++++
> >>> include/libcamera/gen-formats.py | 118 ++++++++++++++
> >>> include/libcamera/meson.build | 22 +++
> >>> include/libcamera/pixel_format.h | 2 -
> >>> src/android/camera_device.cpp | 9 +-
> >>> src/gstreamer/gstlibcamera-utils.cpp | 62 ++++----
> >>> src/libcamera/formats.cpp | 148 +++++++++---------
> >>> src/libcamera/formats.yaml | 124 +++++++++++++++
> >>> src/libcamera/pipeline/ipu3/ipu3.cpp | 16 +-
> >>> .../pipeline/raspberrypi/raspberrypi.cpp | 10 +-
> >>> src/libcamera/pipeline/rkisp1/rkisp1.cpp | 19 +--
> >>> src/libcamera/pipeline/vimc/vimc.cpp | 11 +-
> >>> src/libcamera/pixel_format.cpp | 4 +-
> >>> src/libcamera/v4l2_pixelformat.cpp | 83 +++++-----
> >>> src/qcam/dng_writer.cpp | 17 +-
> >>> src/qcam/format_converter.cpp | 36 +++--
> >>> src/qcam/viewfinder.cpp | 10 +-
> >>> src/v4l2/v4l2_camera_proxy.cpp | 29 ++--
> >>> test/v4l2_videodevice/buffer_cache.cpp | 3 +-
> >>> 19 files changed, 540 insertions(+), 227 deletions(-)
> >>> create mode 100644 include/libcamera/formats.h.in
> >>> create mode 100755 include/libcamera/gen-formats.py
> >>> create mode 100644 src/libcamera/formats.yaml
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list