diff mbox

[v1] package/libv4l: disable libraries build if no fork() support

Message ID 20170725213424.7688452c@windsurf.home
State Not Applicable
Headers show

Commit Message

Thomas Petazzoni July 25, 2017, 7:34 p.m. UTC
Hello,

On Tue, 25 Jul 2017 15:29:30 +0200, Hugues Fruchet wrote:
> Some no-MMU platforms have shared libraries support
> but no fork() support, which is required by libv4lconvert.
> Fix this by disabling libv4l libraries build in case of
> no fork() support.
> This fix the build issue reported here:
> http://lists.buildroot.org/pipermail/buildroot/2017-July/197571.html
> 
> Signed-off-by: Hugues Fruchet <hugues.fruchet@st.com>

I'm sorry, but I'm not sure this is the right solution. Indeed, this
entirely disables the build of all libv4l libraries.

Therefore, if you for example re-enable the v4l2grab package by
dropping its BR2_USE_MMU dependency, it fails to build with:

v4l2grab.c:59:21: fatal error: libv4l2.h: No such file or directory
 #include <libv4l2.h>

So things work today because the libv4l package used to have a
BR2_USE_MMU dependency, which was propagated to its reverse
dependencies. But as you can see, it doesn't really work properly.

I believe the attached patch for libv4l is better. It keeps building
all libraries, and only disables the one specific libv4lconvert feature
that needs fork(): using external helpers for decompressing frames.
This is only needed for the OV511 and OV518 formats, so only for very
specific webcams if I understood correctly.

If you're happy with this patch, could you submit it upstream, and
submit it to Buildroot as well ?

Thanks!

Thomas

Comments

Hugues Fruchet July 26, 2017, 9:46 a.m. UTC | #1
Hi Thomas,

Your patch is definitely better for sure ;)

Tested OK on my side, I will push it on media list.
Peter, could you test on your side to be sure that build issue is fixed 
on your side ?

Best regards,
Hugues.

On 07/25/2017 09:34 PM, Thomas Petazzoni wrote:
> Hello,
> 
> On Tue, 25 Jul 2017 15:29:30 +0200, Hugues Fruchet wrote:
>> Some no-MMU platforms have shared libraries support
>> but no fork() support, which is required by libv4lconvert.
>> Fix this by disabling libv4l libraries build in case of
>> no fork() support.
>> This fix the build issue reported here:
>> http://lists.buildroot.org/pipermail/buildroot/2017-July/197571.html
>>
>> Signed-off-by: Hugues Fruchet <hugues.fruchet@st.com>
> 
> I'm sorry, but I'm not sure this is the right solution. Indeed, this
> entirely disables the build of all libv4l libraries.
> 
> Therefore, if you for example re-enable the v4l2grab package by
> dropping its BR2_USE_MMU dependency, it fails to build with:
> 
> v4l2grab.c:59:21: fatal error: libv4l2.h: No such file or directory
>   #include <libv4l2.h>
> 
> So things work today because the libv4l package used to have a
> BR2_USE_MMU dependency, which was propagated to its reverse
> dependencies. But as you can see, it doesn't really work properly.
> 
> I believe the attached patch for libv4l is better. It keeps building
> all libraries, and only disables the one specific libv4lconvert feature
> that needs fork(): using external helpers for decompressing frames.
> This is only needed for the OV511 and OV518 formats, so only for very
> specific webcams if I understood correctly.
> 
> If you're happy with this patch, could you submit it upstream, and
> submit it to Buildroot as well ?
> 
> Thanks!
> 
> Thomas
>
diff mbox

Patch

From ed33259ac6f377ce6064d0b889ababce05c80e53 Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date: Tue, 25 Jul 2017 21:04:35 +0200
Subject: [PATCH] Build libv4lconvert helper support only when fork() is
 available

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 configure.ac                      | 3 +++
 lib/libv4lconvert/Makefile.am     | 7 ++++++-
 lib/libv4lconvert/libv4lconvert.c | 6 ++++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index ae8f2e2..72c9421 100644
--- a/configure.ac
+++ b/configure.ac
@@ -299,6 +299,9 @@  argp_saved_libs=$LIBS
   AC_SUBST([ARGP_LIBS])
 LIBS=$argp_saved_libs
 
+AC_CHECK_FUNCS([fork], AC_DEFINE([HAVE_LIBV4LCONVERT_HELPERS],[1],[whether to use libv4lconvert helpers]))
+AM_CONDITIONAL([HAVE_LIBV4LCONVERT_HELPERS], [test x$ac_cv_func_fork = xyes])
+
 AC_CHECK_HEADER([linux/i2c-dev.h], [linux_i2c_dev=yes], [linux_i2c_dev=no])
 AM_CONDITIONAL([HAVE_LINUX_I2C_DEV], [test x$linux_i2c_dev = xyes])
 
diff --git a/lib/libv4lconvert/Makefile.am b/lib/libv4lconvert/Makefile.am
index 4f332fa..f266f3e 100644
--- a/lib/libv4lconvert/Makefile.am
+++ b/lib/libv4lconvert/Makefile.am
@@ -1,6 +1,8 @@ 
 if WITH_DYN_LIBV4L
 lib_LTLIBRARIES = libv4lconvert.la
+if HAVE_LIBV4LCONVERT_HELPERS
 libv4lconvertpriv_PROGRAMS = ov511-decomp ov518-decomp
+endif
 include_HEADERS = ../include/libv4lconvert.h
 pkgconfig_DATA = libv4lconvert.pc
 LIBV4LCONVERT_VERSION = -version-info 0
@@ -16,11 +18,14 @@  libv4lconvert_la_SOURCES = \
   control/libv4lcontrol.c control/libv4lcontrol.h control/libv4lcontrol-priv.h \
   processing/libv4lprocessing.c processing/whitebalance.c processing/autogain.c \
   processing/gamma.c processing/libv4lprocessing.h processing/libv4lprocessing-priv.h \
-  helper.c helper-funcs.h libv4lconvert-priv.h libv4lsyscall-priv.h \
+  helper-funcs.h libv4lconvert-priv.h libv4lsyscall-priv.h \
   tinyjpeg.h tinyjpeg-internal.h
 if HAVE_JPEG
 libv4lconvert_la_SOURCES += jpeg_memsrcdest.c jpeg_memsrcdest.h
 endif
+if HAVE_LIBV4LCONVERT_HELPERS
+libv4lconvert_la_SOURCES += helper.c
+endif
 libv4lconvert_la_CPPFLAGS = $(CFLAG_VISIBILITY) $(ENFORCE_LIBV4L_STATIC)
 libv4lconvert_la_LDFLAGS = $(LIBV4LCONVERT_VERSION) -lrt -lm $(JPEG_LIBS) $(ENFORCE_LIBV4L_STATIC)
 
diff --git a/lib/libv4lconvert/libv4lconvert.c b/lib/libv4lconvert/libv4lconvert.c
index d60774e..1a5ccec 100644
--- a/lib/libv4lconvert/libv4lconvert.c
+++ b/lib/libv4lconvert/libv4lconvert.c
@@ -122,8 +122,10 @@  static const struct v4lconvert_pixfmt supported_src_pixfmts[] = {
 	{ V4L2_PIX_FMT_JPEG,		 0,	 7,	 7,	0 },
 	{ V4L2_PIX_FMT_PJPG,		 0,	 7,	 7,	1 },
 	{ V4L2_PIX_FMT_JPGL,		 0,	 7,	 7,	1 },
+#ifdef HAVE_LIBV4LCONVERT_HELPERS
 	{ V4L2_PIX_FMT_OV511,		 0,	 7,	 7,	1 },
 	{ V4L2_PIX_FMT_OV518,		 0,	 7,	 7,	1 },
+#endif
 	/* uncompressed bayer */
 	{ V4L2_PIX_FMT_SBGGR8,		 8,	 8,	 8,	0 },
 	{ V4L2_PIX_FMT_SGBRG8,		 8,	 8,	 8,	0 },
@@ -278,7 +280,9 @@  void v4lconvert_destroy(struct v4lconvert_data *data)
 	if (data->cinfo_initialized)
 		jpeg_destroy_decompress(&data->cinfo);
 #endif // HAVE_JPEG
+#ifdef HAVE_LIBV4LCONVERT_HELPERS
 	v4lconvert_helper_cleanup(data);
+#endif
 	free(data->convert1_buf);
 	free(data->convert2_buf);
 	free(data->rotate90_buf);
@@ -833,6 +837,7 @@  static int v4lconvert_convert_pixfmt(struct v4lconvert_data *data,
 				return -1;
 			}
 			break;
+#ifdef HAVE_LIBV4LCONVERT_HELPERS
 		case V4L2_PIX_FMT_OV511:
 			if (v4lconvert_helper_decompress(data, LIBV4LCONVERT_PRIV_DIR "/ov511-decomp",
 						src, src_size, d, d_size, width, height, yvu)) {
@@ -849,6 +854,7 @@  static int v4lconvert_convert_pixfmt(struct v4lconvert_data *data,
 				return -1;
 			}
 			break;
+#endif
 		}
 
 		switch (dest_pix_fmt) {
-- 
2.9.4