From ef0183373e8be6016f73f94e52afb483fdb974c0 Mon Sep 17 00:00:00 2001 From: Joo Aun Saw Date: Mon, 7 Oct 2019 00:18:23 +1100 Subject: [PATCH] add v4l2rtspserver v4l2tools v4l2cpp packages --- package/Config.in | 6 +- package/v4l2cpp/0001-no-log4cpp.patch.bak | 15 ++ package/v4l2cpp/0001-shared-lib.patch | 39 +++++ package/v4l2cpp/Config.in | 4 + package/v4l2cpp/v4l2cpp.mk | 36 +++++ .../0001-use-custom-makefile.patch | 59 +++++++ .../0001-use-system-v4l2wrapper.patch.bak | 91 +++++++++++ package/v4l2rtspserver/Config.in | 6 + package/v4l2rtspserver/v4l2rtspserver.mk | 32 ++++ .../v4l2tools/02-enable-cross-compile.patch | 153 ++++++++++++++++++ package/v4l2tools/Config.in | 8 + package/v4l2tools/v4l2tools.mk | 88 ++++++++++ 12 files changed, 536 insertions(+), 1 deletion(-) create mode 100644 package/v4l2cpp/0001-no-log4cpp.patch.bak create mode 100644 package/v4l2cpp/0001-shared-lib.patch create mode 100644 package/v4l2cpp/Config.in create mode 100644 package/v4l2cpp/v4l2cpp.mk create mode 100644 package/v4l2rtspserver/0001-use-custom-makefile.patch create mode 100644 package/v4l2rtspserver/0001-use-system-v4l2wrapper.patch.bak create mode 100644 package/v4l2rtspserver/Config.in create mode 100644 package/v4l2rtspserver/v4l2rtspserver.mk create mode 100644 package/v4l2tools/02-enable-cross-compile.patch create mode 100644 package/v4l2tools/Config.in create mode 100644 package/v4l2tools/v4l2tools.mk diff --git a/package/Config.in b/package/Config.in index a4df2f0950..35d8bbcd33 100644 --- a/package/Config.in +++ b/package/Config.in @@ -7,6 +7,7 @@ menu "Target packages" source "package/skeleton-init-none/Config.in" source "package/skeleton-init-systemd/Config.in" source "package/skeleton-init-sysv/Config.in" + source "package/motioneye/Config.in" menu "Audio and video applications" source "package/alsa-utils/Config.in" @@ -56,6 +57,8 @@ menu "Audio and video applications" source "package/upmpdcli/Config.in" source "package/v4l2grab/Config.in" source "package/v4l2loopback/Config.in" + source "package/v4l2rtspserver/Config.in" + source "package/v4l2tools/Config.in" source "package/vlc/Config.in" source "package/vorbis-tools/Config.in" source "package/wavpack/Config.in" @@ -952,6 +955,7 @@ menu "External python modules" source "package/python-oauthlib/Config.in" source "package/python-paho-mqtt/Config.in" source "package/python-pam/Config.in" + source "package/python-pantilthat/Config.in" source "package/python-paramiko/Config.in" source "package/python-passlib/Config.in" source "package/python-pathlib2/Config.in" @@ -994,7 +998,6 @@ menu "External python modules" source "package/python-pygame/Config.in" source "package/python-pygments/Config.in" source "package/python-pyhamcrest/Config.in" - source "package/python-pyhocon/Config.in" source "package/python-pyicu/Config.in" source "package/python-pyinotify/Config.in" source "package/python-pyjwt/Config.in" @@ -1512,6 +1515,7 @@ menu "Multimedia" source "package/libyuv/Config.in" source "package/live555/Config.in" source "package/mediastreamer/Config.in" + source "package/v4l2cpp/Config.in" source "package/x264/Config.in" source "package/x265/Config.in" endmenu diff --git a/package/v4l2cpp/0001-no-log4cpp.patch.bak b/package/v4l2cpp/0001-no-log4cpp.patch.bak new file mode 100644 index 0000000000..51536e21c0 --- /dev/null +++ b/package/v4l2cpp/0001-no-log4cpp.patch.bak @@ -0,0 +1,15 @@ +diff --git a/Makefile b/Makefile +index a51b316..60b801b 100644 +--- a/Makefile ++++ b/Makefile +@@ -5,10 +5,6 @@ CXX ?= $(CROSS)g++ + AR ?= $(CROSS)ar + PREFIX?=/usr + +-ifneq ($(wildcard $(SYSROOT)$(PREFIX)/include/log4cpp/Category.hh),) +-CXXFLAGS += -DHAVE_LOG4CPP -I $(SYSROOT)$(PREFIX)/include +-endif +- + V4L2WRAPPER_CPP:=$(wildcard src/*.cpp) + V4L2WRAPPER_OBJ:=$(V4L2WRAPPER_CPP:%.cpp=%.o) + diff --git a/package/v4l2cpp/0001-shared-lib.patch b/package/v4l2cpp/0001-shared-lib.patch new file mode 100644 index 0000000000..0ce89dac26 --- /dev/null +++ b/package/v4l2cpp/0001-shared-lib.patch @@ -0,0 +1,39 @@ +diff --git a/Makefile b/Makefile +index a51b316..7291248 100644 +--- a/Makefile ++++ b/Makefile +@@ -5,16 +5,12 @@ CXX ?= $(CROSS)g++ + AR ?= $(CROSS)ar + PREFIX?=/usr + +-ifneq ($(wildcard $(SYSROOT)$(PREFIX)/include/log4cpp/Category.hh),) +-CXXFLAGS += -DHAVE_LOG4CPP -I $(SYSROOT)$(PREFIX)/include +-endif +- + V4L2WRAPPER_CPP:=$(wildcard src/*.cpp) + V4L2WRAPPER_OBJ:=$(V4L2WRAPPER_CPP:%.cpp=%.o) + + .DEFAULT_GOAL := all + +-all: libv4l2wrapper.a ++all: libv4l2wrapper.a libv4l2wrapper.so + + %.o: %.cpp + $(CXX) -c -o $@ $< $(CXXFLAGS) +@@ -22,12 +18,14 @@ all: libv4l2wrapper.a + libv4l2wrapper.a: $(V4L2WRAPPER_OBJ) + $(AR) rcs $@ $^ + ++libv4l2wrapper.so: $(V4L2WRAPPER_OBJ) ++ $(CXX) -shared -fPIC $(CXXFLAGS) -o $@ $^ + + clean: +- -@$(RM) *.a $(V4L2WRAPPER_OBJ) ++ -@$(RM) *.a *.so $(V4L2WRAPPER_OBJ) + + install: + mkdir -p $(PREFIX)/include/libv4l2cpp/ + install -D -m 0755 inc/*.h $(PREFIX)/include/libv4l2cpp/ + install -D -m 0755 *.a $(PREFIX)/lib +- ++ install -D -m 0755 *.so $(PREFIX)/lib diff --git a/package/v4l2cpp/Config.in b/package/v4l2cpp/Config.in new file mode 100644 index 0000000000..6b9749b98e --- /dev/null +++ b/package/v4l2cpp/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_V4L2CPP + bool "v4l2cpp" + help + Build the V4L2 C++ Wrapper for target use. diff --git a/package/v4l2cpp/v4l2cpp.mk b/package/v4l2cpp/v4l2cpp.mk new file mode 100644 index 0000000000..021a1aa66f --- /dev/null +++ b/package/v4l2cpp/v4l2cpp.mk @@ -0,0 +1,36 @@ +############################################################# +# +# v4l2cpp +# +############################################################# + +V4L2CPP_VERSION=021d887dc531bcf74c766cb413f87e8fc92579e3 +V4L2CPP_SITE = https://github.com/jasaw/libv4l2cpp.git +V4L2CPP_SITE_METHOD = git +V4L2CPP_LICENSE = UNLICENSE +V4L2CPP_LICENSE_FILES = LICENSE +V4L2CPP_CFLAGS = $(TARGET_CFLAGS) + +ifeq ($(BR2_STATIC_LIBS),y) +V4L2CPP_CONFIG_TARGET = linux +V4L2CPP_LIBRARY_LINK = $(TARGET_AR) cr +else +V4L2CPP_CONFIG_TARGET = linux-with-shared-libraries +V4L2CPP_LIBRARY_LINK = $(TARGET_CC) -o +V4L2CPP_CFLAGS += -fPIC +endif + +ifndef ($(BR2_ENABLE_LOCALE),y) +V4L2CPP_CFLAGS += -DLOCALE_NOT_USED +endif + +define V4L2CPP_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" CXX="$(TARGET_CXX)" AR="$(TARGET_AR)" EXTRA_CXXFLAGS="$(V4L2CPP_CFLAGS)" -C $(@D) all +endef + +define V4L2CPP_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) PREFIX="$(STAGING_DIR)/usr" -C $(@D) install + $(INSTALL) -D -m 0755 $(@D)/libv4l2wrapper.so $(TARGET_DIR)/usr/lib +endef + +$(eval $(generic-package)) diff --git a/package/v4l2rtspserver/0001-use-custom-makefile.patch b/package/v4l2rtspserver/0001-use-custom-makefile.patch new file mode 100644 index 0000000000..53410e915d --- /dev/null +++ b/package/v4l2rtspserver/0001-use-custom-makefile.patch @@ -0,0 +1,59 @@ +diff --git a/Makefile b/Makefile +index e69de29..fb3f2bf 100644 +--- a/Makefile ++++ b/Makefile +@@ -0,0 +1,54 @@ ++ifneq ($(SRC),) ++VPATH=$(SRC) ++endif ++ ++ALL_PROGS = v4l2rtspserver ++PREFIX?=/usr ++DESTDIR?=$(PREFIX)/bin ++CC?=$(CROSS)gcc ++CXX?=$(CROSS)g++ ++CXXFLAGS += -I$(SRC) -W -Wall -std=c++11 -g -O3 -D_POSIX_C_SOURCE=2 ++CXXFLAGS += -Iinc -I$(PREFIX)/include -I$(PREFIX)/include/BasicUsageEnvironment -I$(PREFIX)/include/UsageEnvironment -I$(PREFIX)/include/liveMedia -I$(PREFIX)/include/groupsock ++CXXFLAGS += $(EXTRA_CXXFLAGS) ++LDFLAGS += -pthread -L$(PREFIX)/lib -lBasicUsageEnvironment -lUsageEnvironment -lliveMedia -lgroupsock -lv4l2wrapper ++RM = rm -rf ++ ++RTSPSERVER_OBJS = \ ++ src/DeviceSource.o \ ++ src/H264_V4l2DeviceSource.o \ ++ src/HTTPServer.o \ ++ src/main.o \ ++ src/MemoryBufferSink.o \ ++ src/MJPEGVideoSource.o \ ++ src/MulticastServerMediaSubsession.o \ ++ src/ServerMediaSubsession.o \ ++ src/TSServerMediaSubsession.o \ ++ src/UnicastServerMediaSubsession.o \ ++ ++ ++# v4l2wrapper ++CXXFLAGS += -I$(PREFIX)/include/libv4l2cpp ++ ++# ALSA ++ifneq ($(HAVE_ALSA),) ++CXXFLAGS += -DHAVE_ALSA ++RTSPSERVER_OBJS += src/ALSACapture.o ++LDFLAGS += -lasound ++endif ++ ++ ++.DEFAULT_GOAL := all ++ ++all: $(ALL_PROGS) ++ ++v4l2rtspserver: $(RTSPSERVER_OBJS) ++ $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) ++ ++src/%.o : src/%.cpp ++ $(CXX) $(CXXFLAGS) -c $< -o $@ ++ ++clean: ++ $(RM) src/*.o v4l2rtspserver ++ ++install: v4l2rtspserver ++ install -D -m 0777 v4l2rtspserver $(DESTDIR) diff --git a/package/v4l2rtspserver/0001-use-system-v4l2wrapper.patch.bak b/package/v4l2rtspserver/0001-use-system-v4l2wrapper.patch.bak new file mode 100644 index 0000000000..861aeb2e23 --- /dev/null +++ b/package/v4l2rtspserver/0001-use-system-v4l2wrapper.patch.bak @@ -0,0 +1,91 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7cf9f3c..3f967b3 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,5 +1,7 @@ + cmake_minimum_required(VERSION 3.0) + ++set(CMAKE_VERBOSE_MAKEFILE ON) ++ + project(v4l2rtspserver) + + option(COVERAGE "Coverage" OFF) +@@ -39,7 +41,7 @@ message(STATUS "CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}") + + #pthread + find_package (Threads) +-target_link_libraries (${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT}) ++target_link_libraries (${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT}) + + #ALSA + if (ALSA) +@@ -47,9 +49,9 @@ find_package(ALSA QUIET) + if (ALSA_LIBRARY) + message(STATUS "Alsa available") + add_definitions(-DHAVE_ALSA) +- target_link_libraries (${PROJECT_NAME} ${ALSA_LIBRARY}) +- +- SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}libasound2-dev,) ++ target_link_libraries (${PROJECT_NAME} ${ALSA_LIBRARY}) ++ ++ SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}libasound2-dev,) + endif (ALSA_LIBRARY) + endif() + +@@ -59,16 +61,25 @@ if (LOG4CPP_LIBRARY) + message(STATUS "Log4Cpp available") + add_definitions(-DHAVE_LOG4CPP) + target_link_libraries(${PROJECT_NAME} "${LOG4CPP_LIBRARY}") +- ++ + SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}liblog4cpp5-dev,) + endif () + + # v4l2wrapper +-EXEC_PROGRAM("git submodule update --init") +-aux_source_directory(v4l2wrapper/src LIBSRC_FILES) +-include_directories("v4l2wrapper/inc") +-add_library(v4l2wrapper STATIC ${LIBSRC_FILES}) +-target_link_libraries (${PROJECT_NAME} v4l2wrapper) ++#set(V4L2WRAPPER_LIBRARY ${CMAKE_SOURCE_DIR}/libv4l2wrapper.a) ++target_link_libraries(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/libv4l2wrapper.a) ++#find_library(V4L2WRAPPER_LIBRARY v4l2wrapper REQUIRED) ++#find_package(v4l2cpp REQUIRED) ++#if (V4L2CPP_LIBRARY) ++# message(STATUS "v4l2wrapper available") ++# target_link_libraries(${PROJECT_NAME} "${V4L2CPP_LIBRARY}") ++#endif () ++ ++# EXEC_PROGRAM("git submodule update --init") ++# aux_source_directory(v4l2wrapper/src LIBSRC_FILES) ++# include_directories("v4l2wrapper/inc") ++# add_library(v4l2wrapper STATIC ${LIBSRC_FILES}) ++# target_link_libraries (${PROJECT_NAME} v4l2wrapper) + + # live555 + set(LIVE ${CMAKE_BINARY_DIR}/live) +@@ -97,7 +108,7 @@ if (SYSTEMD_FOUND) + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=systemdsystemunitdir systemd OUTPUT_VARIABLE SYSTEMD_SERVICES_INSTALL_DIR) + string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SERVICES_INSTALL_DIR "${SYSTEMD_SERVICES_INSTALL_DIR}") + message(STATUS "SystemD directory '${SYSTEMD_SERVICES_INSTALL_DIR}'") +- ++ + configure_file(v4l2rtspserver.service.in ${CMAKE_CURRENT_BINARY_DIR}/v4l2rtspserver.service @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/v4l2rtspserver.service DESTINATION ${SYSTEMD_SERVICES_INSTALL_DIR}) + endif (SYSTEMD_FOUND) +@@ -108,8 +119,8 @@ install (FILES index.html DESTINATION share/${PROJECT_NAME}/) + install (FILES hls.js/dist/hls.light.min.js DESTINATION share/${PROJECT_NAME}/hls.js/dist/) + + SET(CPACK_GENERATOR "DEB") +-SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Michel Promonet") +-SET(CPACK_PACKAGE_CONTACT "michel.promonet@free.fr") ++SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Michel Promonet") ++SET(CPACK_PACKAGE_CONTACT "michel.promonet@free.fr") + SET(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}) + STRING(REGEX REPLACE ",$" "" CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}") + SET(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) +@@ -117,4 +128,3 @@ if(VERSION) + SET(CPACK_PACKAGE_VERSION "${VERSION}") + endif() + INCLUDE(CPack) +- diff --git a/package/v4l2rtspserver/Config.in b/package/v4l2rtspserver/Config.in new file mode 100644 index 0000000000..d967cdfe20 --- /dev/null +++ b/package/v4l2rtspserver/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_V4L2RTSPSERVER + bool "v4l2rtspserver" + select BR2_PACKAGE_V4L2CPP + select BR2_PACKAGE_LIVE555 + help + Provides a streaming RTSP server for the target. diff --git a/package/v4l2rtspserver/v4l2rtspserver.mk b/package/v4l2rtspserver/v4l2rtspserver.mk new file mode 100644 index 0000000000..d63385d25f --- /dev/null +++ b/package/v4l2rtspserver/v4l2rtspserver.mk @@ -0,0 +1,32 @@ +############################################################# +# +# v4l2rtspserver +# +############################################################# + +V4L2RTSPSERVER_VERSION = 13e27dc78f2ed6bc5d43fd6eb759041d8e0b4a66 +V4L2RTSPSERVER_SITE = https://github.com/mpromonet/v4l2rtspserver.git +V4L2RTSPSERVER_SITE_METHOD = git +V4L2RTSPSERVER_LICENSE = UNLICENSE +V4L2RTSPSERVER_LICENSE_FILES = LICENSE +V4L2RTSPSERVER_INSTALL_TARGET = YES +V4L2RTSPSERVER_DEPENDENCIES = live555 v4l2cpp +V4L2RTSPSERVER_CFLAGS = $(TARGET_CFLAGS) -DVERSION=1 + +ifndef ($(BR2_ENABLE_LOCALE),y) +V4L2RTSPSERVER_CFLAGS += -DLOCALE_NOT_USED +endif + +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +V4L2RTSPSERVER_OPTS += "HAVE_ALSA=1" +endif + +define V4L2RTSPSERVER_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) CC="$(TARGET_CC)" CXX="$(TARGET_CXX)" EXTRA_CXXFLAGS="$(V4L2RTSPSERVER_CFLAGS)" PREFIX="$(STAGING_DIR)/usr" $(V4L2RTSPSERVER_OPTS) -C $(@D) all +endef + +define V4L2RTSPSERVER_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) DESTDIR="$(TARGET_DIR)/usr/bin" -C $(@D) install +endef + +$(eval $(generic-package)) diff --git a/package/v4l2tools/02-enable-cross-compile.patch b/package/v4l2tools/02-enable-cross-compile.patch new file mode 100644 index 0000000000..bc71aab7fa --- /dev/null +++ b/package/v4l2tools/02-enable-cross-compile.patch @@ -0,0 +1,153 @@ +diff --git a/Makefile b/Makefile +index e69de29..f337374 100644 +--- a/Makefile ++++ b/Makefile +@@ -0,0 +1,148 @@ ++ALL_PROGS = v4l2copy v4l2source_yuv ++PREFIX?=/usr ++DESTDIR?=$(PREFIX)/bin ++CC?=$(CROSS)gcc ++CXX?=$(CROSS)g++ ++CXXFLAGS += -W -Wall -g -O3 -D_POSIX_C_SOURCE=2 ++CXXFLAGS += -Iinclude -I$(PREFIX)/include -I$(PREFIX)/include/libv4l2cpp ++CXXFLAGS += $(EXTRA_CXXFLAGS) ++LDFLAGS += -pthread -L$(PREFIX)/lib -lv4l2wrapper ++ ++.DEFAULT_GOAL := all ++ ++# raspberry tools ++ifneq ($(HAVE_RPI_IL),) ++ILCFLAGS = $(CXXFLAGS) ++ILCFLAGS += -DOMX_SKIP64BIT ++ILLDFLAGS = $(LDFLAGS) -lpthread -lopenmaxil -lbcm_host -lvcos -lvchostif -lvchiq_arm -lilclient ++ ++v4l2compress_omx: src/encode_omx.cpp src/v4l2compress_omx.cpp ++ $(CXX) -o $@ $^ -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi $(ILCFLAGS) $(ILLDFLAGS) ++ ++v4l2grab_h264: src/encode_omx.cpp src/v4l2grab_h264.cpp ++ $(CXX) -o $@ $^ -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi $(ILCFLAGS) $(ILLDFLAGS) ++ ++v4l2display_h264: src/v4l2display_h264.cpp ++ $(CXX) -o $@ $^ -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi $(ILCFLAGS) $(ILLDFLAGS) ++ ++ ++ALL_PROGS+=v4l2grab_h264 ++ALL_PROGS+=v4l2display_h264 ++ALL_PROGS+=v4l2compress_omx ++endif ++ ++ifneq ($(HAVE_RPI),) ++MMALCAM_CFLAGS = $(CXXFLAGS) ++MMALCAM_LDFLAGS = $(LDFLAGS) -L/opt/vc/lib -lmmal -lmmal_core -lmmal_util -lpthread -lbcm_host -lvcos -lvchostif -lvchiq_arm ++RASPICAM_CFLAGS = $(CFLAGS) -Isrc/raspicam -I/opt/vc/include ++RASPICAM_OBJS = \ ++ src/raspicam/RaspiCamControl.o \ ++ src/raspicam/RaspiCLI.o \ ++ src/raspicam/RaspiCommonSettings.o \ ++ src/raspicam/RaspiHelpers.o \ ++ src/raspicam/RaspiPreview.o ++ ++v4l2multi_stream_mmal: src/v4l2multi_stream_mmal.cpp $(RASPICAM_OBJS) ++ $(CXX) -o $@ $^ -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi $(MMALCAM_CFLAGS) $(RASPICAM_CFLAGS) $(MMALCAM_LDFLAGS) ++ ++src/raspicam/%.o : src/raspicam/%.c ++ $(CC) -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -Wno-psabi $(RASPICAM_CFLAGS) -c $< -o $@ ++ ++ALL_PROGS+=v4l2multi_stream_mmal ++ ++endif ++ ++# libyuv ++ifneq ($(HAVE_LIBYUV),) ++ALL_PROGS+=v4l2convert_yuv ++ ++# libh264bitstream & libhevcbitstream ++ifneq ($(HAVE_H264BITSTREAM),) ++ifneq ($(HAVE_HEVCBITSTREAM),) ++ALL_PROGS+=v4l2dump ++endif ++endif ++ ++# libh264bitstream ++ifneq ($(HAVE_H264BITSTREAM),) ++ALL_PROGS+=v4l2compress_h264 ++endif ++ ++# libhevcbitstream ++ifneq ($(HAVE_HEVCBITSTREAM),) ++ALL_PROGS+=v4l2compress_x265 ++endif ++ ++# libvpx ++ifneq ($(HAVE_LIBVPX),) ++ALL_PROGS+=v4l2compress_vpx ++endif ++ ++# libjpeg ++ifneq ($(HAVE_LIBJPEG),) ++ALL_PROGS+=v4l2compress_jpeg v4l2uncompress_jpeg ++CFLAGS += -DHAVE_JPEG ++endif ++ ++endif ++ ++# libfuse ++ifneq ($(HAVE_LIBFUSE),) ++ALL_PROGS+=v4l2fuse ++endif ++ ++all: $(ALL_PROGS) ++ ++# read V4L2 capture -> write V4L2 output ++v4l2copy: src/v4l2copy.cpp ++ $(CXX) -o $@ $(CXXFLAGS) $^ $(LDFLAGS) ++ ++# read V4L2 capture -> convert YUV format -> write V4L2 output ++v4l2convert_yuv: src/v4l2convert_yuv.cpp ++ $(CXX) -o $@ $(CXXFLAGS) -I$(PREFIX)/include/libyuv $^ $(LDFLAGS) -lyuv -ljpeg ++ ++# -> write V4L2 output ++v4l2source_yuv: src/v4l2source_yuv.cpp ++ $(CXX) -o $@ $(CXXFLAGS) $^ $(LDFLAGS) ++ ++# read V4L2 capture -> compress using libvpx -> write V4L2 output ++v4l2compress_vpx: src/v4l2compress_vpx.cpp ++ $(CXX) -o $@ $(CXXFLAGS) -I$(PREFIX)/include/libyuv $^ $(LDFLAGS) -lvpx -lyuv -ljpeg ++ ++# read V4L2 capture -> compress using x264 -> write V4L2 output ++v4l2compress_h264: src/v4l2compress_h264.cpp ++ $(CXX) -o $@ $(CXXFLAGS) -I$(PREFIX)/include/libyuv $^ $(LDFLAGS) -lh264bitstream -lyuv -ljpeg ++ ++# read V4L2 capture -> compress using x265 -> write V4L2 output ++v4l2compress_x265: src/v4l2compress_x265.cpp ++ $(CXX) -o $@ $(CXXFLAGS) -I$(PREFIX)/include/libyuv $^ $(LDFLAGS) -lhevcbitstream -lyuv -ljpeg ++ ++# read V4L2 capture -> compress using libjpeg -> write V4L2 output ++v4l2compress_jpeg: src/v4l2compress_jpeg.cpp ++ $(CXX) -o $@ $(CXXFLAGS) -I$(PREFIX)/include/libyuv $^ $(LDFLAGS) -lyuv -ljpeg ++ ++# read V4L2 capture -> uncompress using libjpeg -> write V4L2 output ++v4l2uncompress_jpeg: src/v4l2uncompress_jpeg.cpp ++ $(CXX) -o $@ $(CXXFLAGS) -I$(PREFIX)/include/libyuv $^ $(LDFLAGS) -lyuv -ljpeg ++ ++# try with opencv ++v4l2detect_yuv: src/v4l2detect_yuv.cpp ++ $(CXX) -o $@ $(CXXFLAGS) -I$(PREFIX)/include/libyuv $^ $(LDFLAGS) -lopencv_core -lopencv_objdetect -lopencv_imgproc -lyuv -ljpeg ++ ++# dump ++v4l2dump: src/v4l2dump.cpp ++ $(CXX) -o $@ $(CXXFLAGS) -I$(PREFIX)/include/h264bitstream -I$(PREFIX)/include/hevcbitstream -I$(PREFIX)/include/libyuv $^ $(LDFLAGS) -lh264bitstream -lhevcbitstream -lyuv -ljpeg ++ ++v4l2fuse: src/v4l2fuse.c ++ $(CC) -o $@ $(CFLAGS) $^ $(LDFLAGS) -D_FILE_OFFSET_BITS=64 -lfuse ++ ++ ++upgrade: ++ git submodule foreach git pull origin master ++ ++install: all ++ mkdir -p $(DESTDIR)/bin ++ install -D -m 0755 $(ALL_PROGS) $(DESTDIR)/bin ++ ++clean: ++ -@$(RM) $(ALL_PROGS) .*o *.a src/raspicam/.*o diff --git a/package/v4l2tools/Config.in b/package/v4l2tools/Config.in new file mode 100644 index 0000000000..1f83acc319 --- /dev/null +++ b/package/v4l2tools/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_V4L2TOOLS + bool "v4l2tools" + select BR2_PACKAGE_V4L2CPP + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBFUSE + help + Build the V4L2 tools based on libv4l2cpp. + Optional dependencies: libvpx, x264, x265. diff --git a/package/v4l2tools/v4l2tools.mk b/package/v4l2tools/v4l2tools.mk new file mode 100644 index 0000000000..f978113529 --- /dev/null +++ b/package/v4l2tools/v4l2tools.mk @@ -0,0 +1,88 @@ +############################################################# +# +# v4l2tools +# +############################################################# + +V4L2TOOLS_VERSION = 794afdb +V4L2TOOLS_SITE = https://github.com/jasaw/v4l2tools.git +V4L2TOOLS_SITE_METHOD = git +V4L2TOOLS_LICENSE = UNLICENSE +V4L2TOOLS_LICENSE_FILES = LICENSE +V4L2TOOLS_INSTALL_TARGET = YES +V4L2TOOLS_DEPENDENCIES = v4l2cpp +V4L2TOOLS_CFLAGS = $(TARGET_CFLAGS) + +define V4L2TOOLS_REMOVE_MAKEFILE + rm -f $(BUILD_DIR)/v4l2tools-$(V4L2TOOLS_VERSION)/Makefile +endef + +V4L2TOOLS_PRE_PATCH_HOOKS += V4L2TOOLS_REMOVE_MAKEFILE + +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +V4L2TOOLS_DEPENDENCIES += rpi-userland +V4L2TOOLS_MAKE_OPTS += HAVE_RPI=1 +ifeq ($(BR2_PACKAGE_RPI_USERLAND_HELLO),y) +V4L2TOOLS_MAKE_OPTS += HAVE_RPI_IL=1 +V4L2TOOLS_CFLAGS += -I$(STAGING_DIR)/usr/src/hello_pi/libs/ilclient +endif +endif # BR2_PACKAGE_RPI_USERLAND + +ifeq ($(BR2_PACKAGE_LIBYUV),y) +V4L2TOOLS_DEPENDENCIES += libyuv +V4L2TOOLS_MAKE_OPTS += HAVE_LIBYUV=1 + +ifeq ($(BR2_PACKAGE_H264BITSTREAM),y) +# TODO: pull in h264bitstream from https://github.com/aizvorski/h264bitstream +#V4L2TOOLS_DEPENDENCIES += h264bitstream +#V4L2TOOLS_MAKE_OPTS += HAVE_H264BITSTREAM=1 +endif + +ifeq ($(BR2_PACKAGE_HEVCBITSTREAM),y) +# TODO: pull in hevcbitstream from https://github.com/leslie-wang/hevcbitstream +#V4L2TOOLS_DEPENDENCIES += hevcbitstream +#V4L2TOOLS_MAKE_OPTS += HAVE_HEVCBITSTREAM=1 +endif + +ifeq ($(BR2_PACKAGE_LIBVPX),y) +V4L2TOOLS_DEPENDENCIES += libvpx +V4L2TOOLS_MAKE_OPTS += HAVE_LIBVPX=1 +endif + +ifeq ($(BR2_PACKAGE_JPEG),y) +V4L2TOOLS_DEPENDENCIES += jpeg +V4L2TOOLS_MAKE_OPTS += HAVE_LIBJPEG=1 +endif +endif + +ifeq ($(BR2_PACKAGE_LIBFUSE),y) +V4L2TOOLS_DEPENDENCIES += libfuse +V4L2TOOLS_MAKE_OPTS += HAVE_LIBFUSE=1 +endif + +ifndef ($(BR2_ENABLE_LOCALE),y) +V4L2TOOLS_CFLAGS += -DLOCALE_NOT_USED +endif + +define V4L2TOOLS_BUILD_CMDS + $(TARGET_MAKE_ENV) CC="$(TARGET_CC)" CXX="$(TARGET_CXX)" AR="$(TARGET_AR)" CFLAGS_EXTRA="$(V4L2TOOLS_CFLAGS)" LDFLAGS="$(TARGET_LDFLAGS)" ARFLAGS="$(TARGET_ARFLAGS)" PREFIX="$(STAGING_DIR)/usr" $(V4L2TOOLS_MAKE_OPTS) $(MAKE) -C $(@D) all +endef + +define V4L2TOOLS_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/v4l2copy $(TARGET_DIR)/usr/sbin + $(INSTALL) -D -m 0755 $(@D)/v4l2source_yuv $(TARGET_DIR)/usr/sbin + $(if $(BR2_PACKAGE_RPI_USERLAND_HELLO), $(INSTALL) -D -m 0755 $(@D)/v4l2grab_h264 $(TARGET_DIR)/usr/sbin ) + $(if $(BR2_PACKAGE_RPI_USERLAND_HELLO), $(INSTALL) -D -m 0755 $(@D)/v4l2display_h264 $(TARGET_DIR)/usr/sbin ) + $(if $(BR2_PACKAGE_RPI_USERLAND_HELLO), $(INSTALL) -D -m 0755 $(@D)/v4l2compress_omx $(TARGET_DIR)/usr/sbin ) + $(if $(BR2_PACKAGE_RPI_USERLAND), $(INSTALL) -D -m 0755 $(@D)/v4l2multi_stream_mmal $(TARGET_DIR)/usr/sbin ) + $(if $(BR2_PACKAGE_LIBYUV), $(INSTALL) -D -m 0755 $(@D)/v4l2convert_yuv $(TARGET_DIR)/usr/sbin ) + $(if $(and $(BR2_PACKAGE_LIBYUV),$(BR2_PACKAGE_H264BITSTREAM)), $(INSTALL) -D -m 0755 $(@D)/v4l2compress_h264 $(TARGET_DIR)/usr/sbin ) + $(if $(and $(BR2_PACKAGE_LIBYUV),$(BR2_PACKAGE_HEVCBITSTREAM)), $(INSTALL) -D -m 0755 $(@D)/v4l2compress_x265 $(TARGET_DIR)/usr/sbin ) + $(if $(and $(BR2_PACKAGE_LIBYUV),$(BR2_PACKAGE_H264BITSTREAM),$(BR2_PACKAGE_HEVCBITSTREAM)), $(INSTALL) -D -m 0755 $(@D)/v4l2dump $(TARGET_DIR)/usr/sbin ) + $(if $(and $(BR2_PACKAGE_LIBYUV),$(BR2_PACKAGE_VPX)), $(INSTALL) -D -m 0755 $(@D)/v4l2compress_vpx $(TARGET_DIR)/usr/sbin ) + $(if $(and $(BR2_PACKAGE_LIBYUV),$(BR2_PACKAGE_JPEG)), $(INSTALL) -D -m 0755 $(@D)/v4l2compress_jpeg $(TARGET_DIR)/usr/sbin ) + $(if $(and $(BR2_PACKAGE_LIBYUV),$(BR2_PACKAGE_JPEG)), $(INSTALL) -D -m 0755 $(@D)/v4l2uncompress_jpeg $(TARGET_DIR)/usr/sbin ) + $(if $(BR2_PACKAGE_LIBFUSE), $(INSTALL) -D -m 0755 $(@D)/v4l2fuse $(TARGET_DIR)/usr/sbin ) +endef + +$(eval $(generic-package))