# SPDX-License-Identifier: (GPL-2.0+ OR MIT)
#
# Amlogic multimedia configuration
#

menu "Amlogic multimedia configuration"

config AMLOGIC_MEDIA_MODULE
	tristate "Amlogic Multimedia compile support"
	select VIDEOBUF_GEN
	select VIDEOBUF_VMALLOC
	default y
	help
		media module compile support
		select y for built-in
		select m for ko
		select n for disable

config AMLOGIC_MEDIA_ENABLE
	bool "Amlogic Multimedia Support"
	default n
	help
		Amlogic multimedia framework composed of two parts,
		the first part is common which consists of modules
		such as arch, codec_mm, vfm, the second is driver
		part of the media, both of which depends on this
		configuration options.

config AMLOGIC_MEDIA_COMMON
	bool "Amlogic the common of the media"
	depends on AMLOGIC_MEDIA_ENABLE
	default n
	help
		This option is used to configure Amlogic common
		for media, it as the basis for drivers of the
		multimedia, mainly on the operation of the
		registers, memory allocation and the chain of
		responsibility management of the frame processing.

config AMLOGIC_MEDIA_DRIVERS
	bool "Amlogic drivers of the media"
	depends on AMLOGIC_MEDIA_COMMON
	default n
	help
		This option is used to configure Amlogic drivers
		of the multimedia, which consists of video decoder
		module, video decoder management module and post
		processing of the frame.

config AMLOGIC_MEDIA_MULTI_DEC
	bool "Support multi-instance decoding"
	default n
	help
		Support for multi-instance decoding features,
		this option must be configured if multi playback
		is required, the feature supports decoding
		at the same time.

config AMLOGIC_MEDIA_NO_PARSER
	bool "The stream buffer works on non-parser mode."
	depends on AMLOGIC_MEDIA_DRIVERS
	default n
	help
		The module of hardware parser will be removed after
		SC2 platform. therefore the parser modules can't be
		builded in ko if enable this item.

config AMLOGIC_V4L2
	bool "Amlogic V4L2 VENDOR HOORKS"

if AMLOGIC_MEDIA_COMMON
source "$(COMMON_DRIVERS_DIR)/drivers/media/common/Kconfig"
endif

if AMLOGIC_MEDIA_DRIVERS
source "$(COMMON_DRIVERS_DIR)/drivers/media/vout/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/camera/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/video_sink/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/vrr/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/osd/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/deinterlace/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/di_multi/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/di_local/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/video_processor/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/enhancement/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/frame_sync/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/gdc/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/vin/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/cec/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/esm/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/atv_demod/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/avsync/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/dtv_demod/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/frc/Kconfig"
source "$(COMMON_DRIVERS_DIR)/drivers/media/di_v4l/Kconfig"
endif
endmenu

