From 274fb255435db94a7817d581798c2e8f1437d6dc Mon Sep 17 00:00:00 2001 From: Stephen Walker Date: Mon, 27 Feb 2012 04:27:28 +0000 Subject: [PATCH] [packages] libv4l: update to 0.8.6, add v4l-utils package SVN-Revision: 30735 --- libs/libv4l/Makefile | 73 ++++++-- libs/libv4l/patches/001-no-shm_open-fix.patch | 89 +++++----- .../patches/002-allow-disabling-libjpeg.patch | 160 ++++++++++++++++++ .../libv4l/patches/003-add-missing-libs.patch | 66 ++++++++ 4 files changed, 330 insertions(+), 58 deletions(-) create mode 100644 libs/libv4l/patches/002-allow-disabling-libjpeg.patch create mode 100644 libs/libv4l/patches/003-add-missing-libs.patch diff --git a/libs/libv4l/Makefile b/libs/libv4l/Makefile index ea6e85059d..146bb8e20e 100644 --- a/libs/libv4l/Makefile +++ b/libs/libv4l/Makefile @@ -1,5 +1,5 @@ -# -# Copyright (C) 2009-2011 OpenWrt.org +# +# Copyright (C) 2009-2012 OpenWrt.org # Copyright (C) 2009 David Cooper # # This is free software, licensed under the GNU General Public License v2. @@ -8,26 +8,25 @@ include $(TOPDIR)/rules.mk -PKG_NAME:=libv4l -PKG_VERSION:=0.6.1 +PKG_NAME:=v4l-utils +PKG_VERSION:=0.8.6 PKG_RELEASE:=1 -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=http://people.atrpms.net/~hdegoede/ -PKG_MD5SUM:=0d0d96d77c98871d2e5466c10cb30a0a +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_SOURCE_URL:=http://www.linuxtv.org/downloads/v4l-utils +PKG_MD5SUM:=80062780ae90e5955473b09b31e9828a + +PKG_BUILD_DEPENDS:=argp-standalone include $(INCLUDE_DIR)/package.mk -# XXX: v4l1 support has been removed in 2.6.38 -define Package/libv4l - SECTION:=libs - CATEGORY:=Libraries - TITLE:=Video 4 Linux wrapper libraries - URL:=http://people.atrpms.net/~hdegoede/ - DEPENDS:=+libpthread @(LINUX_2_6_30||LINUX_2_6_31||LINUX_2_6_32||LINUX_2_6_33||LINUX_2_6_34||LINUX_2_6_35||LINUX_2_6_36||LINUX_2_6_37) +define Package/libv4l/Default + TITLE:=Video 4 Linux + URL:=http://www.linuxtv.org/ + DEPENDS:=+libpthread endef -define Package/libv4l/description +define Package/libv4l/Default/description libv4l is a collection of libraries which adds a thin abstraction layer on top of video4linux2 devices. The purpose of this (thin) layer is to make it easy for application writers to support a wide variety of devices without @@ -42,15 +41,42 @@ define Package/libv4l/description application transparent libv4lconvert conversion where necessary. endef +define Package/libv4l + $(call Package/libv4l/Default) + SECTION:=libs + CATEGORY:=Libraries + TITLE+= wrapper libraries +endef + +define Package/libv4l/description + $(call Package/libv4l/Default/description) +endef + +define Package/v4l-utils + $(call Package/libv4l/Default) + SECTION:=utils + CATEGORY:=Utilities + TITLE+= utilities + DEPENDS+= +librt +libv4l +uclibcxx +endef + +define Package/v4l-utils/description + $(call Package/libv4l/Default/description) + This package contains the video4linux utilities. +endef + TARGET_CFLAGS += $(FPIC) +TARGET_CXX = $(STAGING_DIR)/host/bin/g++-uc define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) \ DESTDIR="$(PKG_INSTALL_DIR)" PREFIX="/usr" \ + DISABLE_LIBJPEG="1" \ $(CONFIGURE_VARS) \ all install $(MAKE) -C $(PKG_BUILD_DIR) \ DESTDIR="$(PKG_INSTALL_DIR)" PREFIX="/usr" \ + DISABLE_LIBJPEG="1" \ $(CONFIGURE_VARS) \ LINKTYPE="static" \ all install @@ -58,7 +84,7 @@ endef define Build/InstallDev $(INSTALL_DIR) $(1)/usr/include - $(CP) $(PKG_INSTALL_DIR)/usr/include/libv4l{1,2,convert}.h $(1)/usr/include/ + $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/ $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l{1,2,convert}.{a,so*} $(1)/usr/lib/ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig @@ -69,8 +95,19 @@ define Package/libv4l/install $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l{1,2,convert}.so.* $(1)/usr/lib/ $(INSTALL_DIR) $(1)/usr/lib/libv4l - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l/v4l{1compat,2convert}.so $(1)/usr/lib/libv4l + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l/v4l{1compat,2convert}.so $(1)/usr/lib/libv4l/ endef -$(eval $(call BuildPackage,libv4l)) +define Package/v4l-utils/install + $(INSTALL_DIR) $(1)/etc + $(CP) $(PKG_INSTALL_DIR)/etc/rc_maps.cfg $(1)/etc/ + $(CP) $(PKG_INSTALL_DIR)/etc/rc_keymaps $(1)/etc/ + $(INSTALL_DIR) $(1)/usr/bin + $(CP) $(PKG_INSTALL_DIR)/usr/bin/{cx18,ivtv}-ctl $(1)/usr/bin/ + $(CP) $(PKG_INSTALL_DIR)/usr/bin/decode_tm6000 $(1)/usr/bin/ + $(CP) $(PKG_INSTALL_DIR)/usr/bin/ir-keytable $(1)/usr/bin/ + $(CP) $(PKG_INSTALL_DIR)/usr/bin/v4l2-{compliance,ctl,sysfs-path} $(1)/usr/bin/ +endef +$(eval $(call BuildPackage,libv4l)) +$(eval $(call BuildPackage,v4l-utils)) diff --git a/libs/libv4l/patches/001-no-shm_open-fix.patch b/libs/libv4l/patches/001-no-shm_open-fix.patch index 96b0628ecf..89d87916d7 100644 --- a/libs/libv4l/patches/001-no-shm_open-fix.patch +++ b/libs/libv4l/patches/001-no-shm_open-fix.patch @@ -1,48 +1,57 @@ ---- a/libv4lconvert/control/libv4lcontrol.c -+++ b/libv4lconvert/control/libv4lcontrol.c -@@ -338,7 +338,7 @@ static void v4lcontrol_init_flags(struct +--- a/lib/libv4lconvert/control/libv4lcontrol.c ++++ b/lib/libv4lconvert/control/libv4lcontrol.c +@@ -525,7 +525,7 @@ static void v4lcontrol_get_flags_from_db struct v4lcontrol_data *v4lcontrol_create(int fd, int always_needs_conversion) { -- int shm_fd; -+ int shm_fd, fdflags; - int i, rc, init = 0; - char *s, shm_name[256], pwd_buf[1024]; - struct v4l2_capability cap; -@@ -392,25 +392,31 @@ struct v4lcontrol_data *v4lcontrol_creat - } +- int shm_fd; ++ int shm_fd, fdflags; + int i, rc, got_usb_info, speed, init = 0; + char *s, shm_name[256], pwd_buf[1024]; + struct v4l2_capability cap; +@@ -638,33 +638,38 @@ struct v4lcontrol_data *v4lcontrol_creat - if (getpwuid_r(geteuid(), &pwd, pwd_buf, sizeof(pwd_buf), &pwd_p) == 0) { -- snprintf(shm_name, 256, "/libv4l-%s:%s:%s", pwd.pw_name, -+ snprintf(shm_name, 256, "/dev/shm/libv4l-%s:%s:%s", pwd.pw_name, - cap.bus_info, cap.card); - } else { - perror("libv4lcontrol: error getting username using uid instead"); -- snprintf(shm_name, 256, "/libv4l-%lu:%s:%s", (unsigned long)geteuid(), -+ snprintf(shm_name, 256, "/dev/shm/libv4l-%lu:%s:%s", (unsigned long)geteuid(), - cap.bus_info, cap.card); - } + if (getpwuid_r(geteuid(), &pwd, pwd_buf, sizeof(pwd_buf), &pwd_p) == 0) { + if (got_usb_info) +- snprintf(shm_name, 256, "/libv4l-%s:%s:%04x:%04x:%s", pwd.pw_name, ++ snprintf(shm_name, 256, "/dev/shm/libv4l-%s:%s:%04x:%04x:%s", pwd.pw_name, + cap.bus_info, (int)vendor_id, (int)product_id, cap.card); + else +- snprintf(shm_name, 256, "/libv4l-%s:%s:%s", pwd.pw_name, ++ snprintf(shm_name, 256, "/dev/shm/libv4l-%s:%s:%s", pwd.pw_name, + cap.bus_info, cap.card); + } else { + perror("libv4lcontrol: error getting username using uid instead"); + if (got_usb_info) +- snprintf(shm_name, 256, "/libv4l-%lu:%s:%04x:%04x:%s", ++ snprintf(shm_name, 256, "/dev/shm/libv4l-%lu:%s:%04x:%04x:%s", + (unsigned long)geteuid(), cap.bus_info, + (int)vendor_id, (int)product_id, cap.card); + else +- snprintf(shm_name, 256, "/libv4l-%lu:%s:%s", (unsigned long)geteuid(), ++ snprintf(shm_name, 256, "/dev/shm/libv4l-%lu:%s:%s", (unsigned long)geteuid(), + cap.bus_info, cap.card); + } - /* / is not allowed inside shm names */ -- for (i = 1; shm_name[i]; i++) -+ for (i = 9; shm_name[i]; i++) /* start after "/dev/shm", i = 9 */ - if (shm_name[i] == '/') - shm_name[i] = '-'; + /* / is not allowed inside shm names */ +- for (i = 1; shm_name[i]; i++) ++ for (i = 9; shm_name[i]; i++) /* start after "/dev/shm", i = 9 */ + if (shm_name[i] == '/') + shm_name[i] = '-'; - /* Open the shared memory object identified by shm_name */ -- if ((shm_fd = shm_open(shm_name, (O_CREAT | O_EXCL | O_RDWR), -+ if ((shm_fd = open(shm_name, (O_CREAT | O_EXCL | O_RDWR), - (S_IREAD | S_IWRITE))) >= 0) - init = 1; - else -- shm_fd = shm_open(shm_name, O_RDWR, (S_IREAD | S_IWRITE)); -+ shm_fd = open(shm_name, O_RDWR, (S_IREAD | S_IWRITE)); + /* Open the shared memory object identified by shm_name */ +- shm_fd = shm_open(shm_name, (O_CREAT | O_EXCL | O_RDWR), (S_IREAD | S_IWRITE)); ++ shm_fd = open(shm_name, (O_CREAT | O_EXCL | O_RDWR), (S_IREAD | S_IWRITE)); + if (shm_fd >= 0) + init = 1; + else +- shm_fd = shm_open(shm_name, O_RDWR, (S_IREAD | S_IWRITE)); ++ shm_fd = open(shm_name, O_RDWR, (S_IREAD | S_IWRITE)); + -+ /* This is all uClibc > 0.9.30 seems to do for shm_open() in librt/shm.c */ -+ fdflags = fcntl(shm_fd, F_GETFD, 0); -+ -+ if (fdflags >= 0) -+ fdflags = fcntl(fd, F_SETFD, fdflags | FD_CLOEXEC); ++ /* This is all uClibc > 0.9.30 seems to do for shm_open() in librt/shm.c */ ++ fdflags = fcntl(shm_fd, F_GETFD, 0); ++ if (fdflags >= 0) ++ fdflags = fcntl(fd, F_SETFD, fdflags | FD_CLOEXEC); - if (shm_fd >= 0) { - /* Set the shared memory size */ + if (shm_fd >= 0) { + /* Set the shared memory size */ diff --git a/libs/libv4l/patches/002-allow-disabling-libjpeg.patch b/libs/libv4l/patches/002-allow-disabling-libjpeg.patch new file mode 100644 index 0000000000..ad306d435a --- /dev/null +++ b/libs/libv4l/patches/002-allow-disabling-libjpeg.patch @@ -0,0 +1,160 @@ +--- a/lib/libv4lconvert/Makefile ++++ b/lib/libv4lconvert/Makefile +@@ -1,6 +1,6 @@ + override CPPFLAGS += -I../include -fvisibility=hidden + +-LIBS_libv4lconvert = -lrt -lm -ljpeg ++LIBS_libv4lconvert = -lrt -lm + + ifeq ($(LINKTYPE),static) + CONVERT_LIB = libv4lconvert.a +@@ -10,16 +10,22 @@ override CPPFLAGS += -fPIC + endif + + CONVERT_OBJS = libv4lconvert.o tinyjpeg.o sn9c10x.o sn9c20x.o pac207.o \ +- jl2005bcd.o \ + mr97310a.o flip.o crop.o jidctflt.o spca561-decompress.o \ + rgbyuv.o sn9c2028-decomp.o spca501.o sq905c.o bayer.o hm12.o \ +- stv0680.o cpia1.o se401.o jpgl.o jpeg.o jpeg_memsrcdest.o \ ++ stv0680.o cpia1.o se401.o jpgl.o jpeg.o \ + control/libv4lcontrol.o processing/libv4lprocessing.o \ + processing/whitebalance.o processing/autogain.o \ + processing/gamma.o helper.o + TARGETS = $(CONVERT_LIB) libv4lconvert.pc ov511-decomp ov518-decomp + INCLUDES = ../include/libv4lconvert.h + ++ifeq ($(DISABLE_LIBJPEG),1) ++override CFLAGS += -DDISABLE_LIBJPEG ++else ++LIBS_libv4lconvert += -ljpeg ++CONVERT_OBJS += jl2005bcd.o jpeg_memsrcdest.o ++endif ++ + override CPPFLAGS += -DLIBDIR=\"$(LIBDIR)\" -DLIBSUBDIR=\"$(LIBSUBDIR)\" + + all: $(TARGETS) +--- a/lib/libv4lconvert/jpeg.c ++++ b/lib/libv4lconvert/jpeg.c +@@ -19,7 +19,9 @@ + #include + #include + #include "libv4lconvert-priv.h" ++#ifndef DISABLE_LIBJPEG + #include "jpeg_memsrcdest.h" ++#endif + + int v4lconvert_decode_jpeg_tinyjpeg(struct v4lconvert_data *data, + unsigned char *src, int src_size, unsigned char *dest, +@@ -107,6 +109,8 @@ int v4lconvert_decode_jpeg_tinyjpeg(stru + return 0; + } + ++#ifndef DISABLE_LIBJPEG ++ + static void jerr_error_exit(j_common_ptr cinfo) + { + struct v4lconvert_data *data = cinfo->client_data; +@@ -405,3 +409,6 @@ int v4lconvert_decode_jpeg_libjpeg(struc + + return result; + } ++ ++#endif ++ +--- a/lib/libv4lconvert/libv4lconvert-priv.h ++++ b/lib/libv4lconvert/libv4lconvert-priv.h +@@ -22,7 +22,9 @@ + #include + #include + #include ++#ifndef DISABLE_LIBJPEG + #include ++#endif + #include + #include "libv4lconvert.h" + #include "control/libv4lcontrol.h" +@@ -50,11 +52,13 @@ struct v4lconvert_data { + int64_t supported_src_formats; /* bitfield */ + char error_msg[V4LCONVERT_ERROR_MSG_SIZE]; + struct jdec_private *tinyjpeg; ++#ifndef DISABLE_LIBJPEG + struct jpeg_error_mgr jerr; + int jerr_errno; + jmp_buf jerr_jmp_state; + struct jpeg_decompress_struct cinfo; + int cinfo_initialized; ++#endif + struct v4l2_frmsizeenum framesizes[V4LCONVERT_MAX_FRAMESIZES]; + unsigned int no_framesizes; + int bandwidth; +--- a/lib/libv4lconvert/libv4lconvert.c ++++ b/lib/libv4lconvert/libv4lconvert.c +@@ -78,7 +78,9 @@ static const struct v4lconvert_pixfmt su + { V4L2_PIX_FMT_SN9C2028, 0, 9, 9, 1 }, + { V4L2_PIX_FMT_PAC207, 0, 9, 9, 1 }, + { V4L2_PIX_FMT_MR97310A, 0, 9, 9, 1 }, ++#ifndef DISABLE_LIBJPEG + { V4L2_PIX_FMT_JL2005BCD, 0, 9, 9, 1 }, ++#endif + { V4L2_PIX_FMT_SQ905C, 0, 9, 9, 1 }, + /* special */ + { V4L2_PIX_FMT_SE401, 0, 8, 9, 1 }, +@@ -186,8 +188,10 @@ void v4lconvert_destroy(struct v4lconver + tinyjpeg_set_components(data->tinyjpeg, comps, 3); + tinyjpeg_free(data->tinyjpeg); + } ++#ifndef DISABLE_LIBJPEG + if (data->cinfo_initialized) + jpeg_destroy_decompress(&data->cinfo); ++#endif + v4lconvert_helper_cleanup(data); + free(data->convert1_buf); + free(data->convert2_buf); +@@ -634,10 +638,13 @@ static int v4lconvert_convert_pixfmt(str + /* JPG and variants */ + case V4L2_PIX_FMT_MJPEG: + case V4L2_PIX_FMT_JPEG: ++#ifndef DISABLE_LIBJPEG + if (data->flags & V4LCONVERT_USE_TINYJPEG) { ++#endif + result = v4lconvert_decode_jpeg_tinyjpeg(data, + src, src_size, dest, + fmt, dest_pix_fmt, 0); ++#ifndef DISABLE_LIBJPEG + } else { + result = v4lconvert_decode_jpeg_libjpeg(data, + src, src_size, dest, +@@ -652,6 +659,7 @@ static int v4lconvert_convert_pixfmt(str + fmt, dest_pix_fmt, 0); + } + } ++#endif + break; + case V4L2_PIX_FMT_PJPG: + result = v4lconvert_decode_jpeg_tinyjpeg(data, src, src_size, +@@ -777,7 +785,9 @@ static int v4lconvert_convert_pixfmt(str + case V4L2_PIX_FMT_SN9C10X: + case V4L2_PIX_FMT_PAC207: + case V4L2_PIX_FMT_MR97310A: ++#ifndef DISABLE_LIBJPEG + case V4L2_PIX_FMT_JL2005BCD: ++#endif + case V4L2_PIX_FMT_SN9C2028: + case V4L2_PIX_FMT_SQ905C: + case V4L2_PIX_FMT_STV0680: { /* Not compressed but needs some shuffling */ +@@ -816,6 +826,7 @@ static int v4lconvert_convert_pixfmt(str + } + tmpfmt.fmt.pix.pixelformat = V4L2_PIX_FMT_SBGGR8; + break; ++#ifndef DISABLE_LIBJPEG + case V4L2_PIX_FMT_JL2005BCD: + if (v4lconvert_decode_jl2005bcd(data, src, src_size, + tmpbuf, +@@ -826,6 +837,7 @@ static int v4lconvert_convert_pixfmt(str + } + tmpfmt.fmt.pix.pixelformat = V4L2_PIX_FMT_SRGGB8; + break; ++#endif + case V4L2_PIX_FMT_SN9C2028: + v4lconvert_decode_sn9c2028(src, tmpbuf, width, height); + tmpfmt.fmt.pix.pixelformat = V4L2_PIX_FMT_SBGGR8; diff --git a/libs/libv4l/patches/003-add-missing-libs.patch b/libs/libv4l/patches/003-add-missing-libs.patch new file mode 100644 index 0000000000..e55bc53688 --- /dev/null +++ b/libs/libv4l/patches/003-add-missing-libs.patch @@ -0,0 +1,66 @@ +--- a/contrib/test/Makefile ++++ b/contrib/test/Makefile +@@ -28,7 +28,7 @@ pixfmt-test: pixfmt-test.o + $(CC) $(LDFLAGS) -o $@ $^ -lX11 + + v4l2grab: v4l2grab.o ../../lib/libv4l2/libv4l2.so +- $(CC) $(LDFLAGS) -o $@ $^ -L../../lib/libv4l2 -L../../lib/libv4lconvert -lv4l2 -lv4lconvert ++ $(CC) $(LDFLAGS) -o $@ $^ -L../../lib/libv4l2 -L../../lib/libv4lconvert -lv4l2 -lv4lconvert -largp + + ioctl-test: ioctl-test.o + $(CC) $(LDFLAGS) -o $@ $^ +--- a/utils/decode_tm6000/Makefile ++++ b/utils/decode_tm6000/Makefile +@@ -5,7 +5,7 @@ all: $(TARGETS) + -include *.d + + decode_tm6000: decode_tm6000.o ../libv4l2util/libv4l2util.a +- $(CC) $(LDFLAGS) -o $@ $^ ++ $(CC) $(LDFLAGS) -o $@ $^ -largp + + install: $(TARGETS) + mkdir -p $(DESTDIR)$(PREFIX)/bin +--- a/utils/keytable/Makefile ++++ b/utils/keytable/Makefile +@@ -5,7 +5,7 @@ all: $(TARGETS) + -include *.d + + ir-keytable: keytable.o +- $(CC) $(LDFLAGS) -o $@ $^ ++ $(CC) $(LDFLAGS) -o $@ $^ -largp + + keytable.o: keytable.c parse.h + +--- a/utils/v4l2-compliance/Makefile ++++ b/utils/v4l2-compliance/Makefile +@@ -6,7 +6,7 @@ all: $(TARGETS) + + v4l2-compliance: v4l2-compliance.o v4l2-test-debug.o v4l2-test-input-output.o \ + v4l2-test-controls.o v4l2-test-io-config.o v4l2-test-formats.o +- $(CXX) $(LDFLAGS) -o $@ $^ -lv4l2 -lv4lconvert -lrt ++ $(CXX) $(LDFLAGS) -o $@ $^ -lv4l2 -lv4lconvert -lrt -lpthread + + install: $(TARGETS) + mkdir -p $(DESTDIR)$(PREFIX)/bin +--- a/utils/v4l2-ctl/Makefile ++++ b/utils/v4l2-ctl/Makefile +@@ -13,7 +13,7 @@ ivtv-ctl: ivtv-ctl.o + $(CC) $(LDFLAGS) -o $@ $^ -lm + + v4l2-ctl: v4l2-ctl.o +- $(CXX) $(LDFLAGS) -o $@ $^ -lv4l2 -lv4lconvert -lrt ++ $(CXX) $(LDFLAGS) -o $@ $^ -lv4l2 -lv4lconvert -lrt -lpthread + + install: $(TARGETS) + mkdir -p $(DESTDIR)$(PREFIX)/bin +--- a/utils/v4l2-sysfs-path/Makefile ++++ b/utils/v4l2-sysfs-path/Makefile +@@ -5,7 +5,7 @@ all: $(TARGETS) + -include *.d + + v4l2-sysfs-path: v4l2-sysfs-path.o ../libmedia_dev/libmedia_dev.a +- $(CC) $(LDFLAGS) -o $@ $^ ++ $(CC) $(LDFLAGS) -o $@ $^ -largp + + install: $(TARGETS) + mkdir -p $(DESTDIR)$(PREFIX)/bin -- 2.30.2