config BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS
	bool
	default y
	# Invalid packing size of ControlValue struct on m68k
	depends on !BR2_m68k
	depends on !BR2_TOOLCHAIN_HAS_BINUTILS_BUG_27597

menuconfig BR2_PACKAGE_LIBCAMERA
	bool "libcamera"
	depends on BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8 # C++17
	depends on !BR2_STATIC_LIBS # gnutls
	depends on BR2_USE_WCHAR # gnutls
	select BR2_PACKAGE_GNUTLS
	select BR2_PACKAGE_LIBYAML
	select BR2_PACKAGE_LIBCAMERA_PIPELINE_UVCVIDEO if !BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE
	help
	  libcamera provides a software stack to support
	  complex devices that need heavy hardware image
	  processing operations.

	  http://www.libcamera.org/

if BR2_PACKAGE_LIBCAMERA

config BR2_PACKAGE_LIBCAMERA_V4L2
	bool "libcamera v4l2 compatibility layer"
	default y
	help
	  libcamera v4l2 compatibility layer

config BR2_PACKAGE_LIBCAMERA_GST
	bool "libcamera gstreamer compatibility layer"
	depends on BR2_PACKAGE_GST1_PLUGINS_BASE
	select BR2_PACKAGE_LIBGLIB2
	default y
	help
	  libcamera gstreamer compatibility layer

config BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE
	bool

config BR2_PACKAGE_LIBCAMERA_PIPELINE_IMX8_ISI
	bool "imx8-isi pipeline"
	depends on BR2_arm || BR2_aarch64
	select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE
	help
	  Pipeline for i.MX8 SoC ISI capture interface.

config BR2_PACKAGE_LIBCAMERA_PIPELINE_IPU3
	bool "ipu3 pipeline"
	depends on BR2_i386 || BR2_x86_64
	select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE
	help
	  Pipeline for Intel IPU3.

config BR2_PACKAGE_LIBCAMERA_PIPELINE_RKISP1
	bool "rkisp1 pipeline"
	depends on BR2_arm || BR2_aarch64
	select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE
	help
	  Pipeline for Rockchip ISP1.

config BR2_PACKAGE_LIBCAMERA_PIPELINE_RPI_VC4
	bool "rpi/vc4 pipeline"
	depends on BR2_arm || BR2_aarch64
	depends on BR2_USE_WCHAR # boost (already enforced for gnutls)
	select BR2_PACKAGE_BOOST
	select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE
	help
	  Pipeline for Raspberry Pi devices.

config BR2_PACKAGE_LIBCAMERA_PIPELINE_SIMPLE
	bool "simple pipeline"
	select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE
	help
	  Pipeline for simple pipelines.

config BR2_PACKAGE_LIBCAMERA_PIPELINE_UVCVIDEO
	bool "uvcvideo pipeline"
	help
	  Pipeline for uvcvideo devices.

config BR2_PACKAGE_LIBCAMERA_PIPELINE_VIMC
	bool "vimc pipeline"
	select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE
	help
	  Pipeline for the vimc device.

config BR2_PACKAGE_LIBCAMERA_PIPELINE_CUSTOM
	bool "custom pipeline"
	select BR2_PACKAGE_LIBCAMERA_HAS_PIPELINE
	default y
	help
	  Pipeline for custom device.

if BR2_PACKAGE_LIBCAMERA_PIPELINE_CUSTOM

config BR2_PACKAGE_LIBCAMERA_CUSTOM_DRIVERS
	string "custom pipeline drivers"
	default "has:rkisp"

config BR2_PACKAGE_LIBCAMERA_CUSTOM_DEFAULT_ENTITY
	string "custom pipeline default media entity"
	default "has:mainpath"

config BR2_PACKAGE_LIBCAMERA_CUSTOM_FORMAT
	string "custom pipeline pixel format"
	default "NV12"
	help
	  NV12|YUV420|NV16|YUYV|ANY

config BR2_PACKAGE_LIBCAMERA_CUSTOM_BUFFER_COUNT
	int "custom pipeline buffer count"
	default 4

endif

config BR2_PACKAGE_LIBCAMERA_COMPLIANCE
	bool "lc-compliance test application"
	depends on BR2_USE_WCHAR # gtest
	depends on BR2_TOOLCHAIN_HAS_THREADS # gtest
	depends on BR2_INSTALL_LIBSTDCPP # gtest
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # gtest
	depends on BR2_USE_MMU # gtest
	select BR2_PACKAGE_GTEST
	select BR2_PACKAGE_LIBEVENT
	help
	  lc-compliance test application

comment "lc-compliance test application needs a toolchain w/ C++, wchar, threads, gcc >= 5"
	depends on BR2_USE_MMU
	depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \
		!BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_GCC_AT_LEAST_5

endif # BR2_PACKAGE_LIBCAMERA

comment "libcamera needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 8"
	depends on BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS
	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_8 || BR2_STATIC_LIBS || !BR2_USE_WCHAR
