#
# Copyright (C) 2011-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=gst1-plugins-bad
PKG_VERSION:=1.24.8
PKG_RELEASE:=2

PKG_SOURCE:=gst-plugins-bad-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://gstreamer.freedesktop.org/src/gst-plugins-bad/
PKG_HASH:=35ad70de3d7cbca3089f33bb77c45750daad2ae93d79827fdbb469fa8aba84eb
PKG_BUILD_DIR:=$(BUILD_DIR)/gst-plugins-bad-$(PKG_VERSION)

PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org> \
		Ted Hess <thess@kitschensync.net>
PKG_LICENSE:=LGPL-2.1-or-later GPL-2.0-or-later
PKG_LICENSE_FILES:=COPYING.LIB COPYING
PKG_CPE_ID:=cpe:/a:freedesktop:gst-plugins-bad

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
include $(INCLUDE_DIR)/meson.mk

GST_BAD_LIBS:=
GST_BAD_MODULES:=

define Package/gstreamer1-bad/Default
  CATEGORY:=Multimedia
  SECTION:=multimedia
  TITLE:=GStreamer
  URL:=http://gstreamer.freedesktop.org/
  DEPENDS:= +gst1-plugins-base +libgstreamer1 +libgst1pbutils $(ICONV_DEPENDS)
endef

define Package/gstreamer1-bad/description/Default
 GStreamer open source multimedia framework
endef


define Package/gst1-plugins-bad
$(call Package/gstreamer1-bad/Default)
  TITLE+= plugins collection (bad)
  DEPENDS+= $(GST_DEPENDS)
  HIDDEN:=1
endef

define Package/gts1-plugins-bad/description
$(call Package/gstreamer1-bad/description/Default)
 .
 This meta package contains only dependencies to the other plugins from
 the bad plugins collection.
endef

define Package/gstreamer1-plugins-bad
  $(call Package/gstreamer1-bad/Default)
  TITLE+= plugins collection (bad)
  DEPENDS:=+ALL:gst1-plugins-bad +gstreamer1-plugins-base
endef

define Package/gstreamer1-plugins-bad/config
    menu "Select GStreamer bad modules and libraries"
      depends on PACKAGE_gstreamer1-plugins-bad


    config gst1-plugins-bad-all
      bool "Include all GStreamer bad plugins"
      select PACKAGE_gst1-plugins-bad

    comment "Modules"

   $(foreach mod,$(GST_BAD_MODULES), \
    config PACKAGE_gst1-mod-$(mod)
      prompt "GStreamer $(mod) module"

   )

    comment "Libraries"

   $(foreach lib,$(GST_BAD_LIBS), \
    config PACKAGE_libgst1$(lib)
      prompt "GStreamer $(lib) library"

   )

  endmenu

endef

GST_COND_SELECT = -D$(1)=$(if $(CONFIG_PACKAGE_gst1-mod-$(1)),en,dis)abled

GST_VERSION:=1.0

MESON_ARGS += \
	$(call GST_COND_SELECT,accurip) \
	$(call GST_COND_SELECT,adpcmdec) \
	$(call GST_COND_SELECT,adpcmenc) \
	$(call GST_COND_SELECT,aiff) \
	$(call GST_COND_SELECT,asfmux) \
	$(call GST_COND_SELECT,audiobuffersplit) \
	$(call GST_COND_SELECT,audiofxbad) \
	$(call GST_COND_SELECT,audiolatency) \
	$(call GST_COND_SELECT,audiomixmatrix) \
	$(call GST_COND_SELECT,audiovisualizers) \
	$(call GST_COND_SELECT,autoconvert) \
	$(call GST_COND_SELECT,bayer) \
	-Dcamerabin2=$(if $(CONFIG_PACKAGE_gst1-mod-camerabin),en,dis)abled \
	$(call GST_COND_SELECT,coloreffects) \
	-Ddebugutils=$(if $(CONFIG_PACKAGE_gst1-mod-debugutilsbad),en,dis)abled \
	$(call GST_COND_SELECT,dvbsubenc) \
	$(call GST_COND_SELECT,dvbsuboverlay) \
	$(call GST_COND_SELECT,dvdspu) \
	$(call GST_COND_SELECT,faceoverlay) \
	$(call GST_COND_SELECT,festival) \
	$(call GST_COND_SELECT,fieldanalysis) \
	$(call GST_COND_SELECT,freeverb) \
	$(call GST_COND_SELECT,frei0r) \
	$(call GST_COND_SELECT,gaudieffects) \
	$(call GST_COND_SELECT,gdp) \
	$(call GST_COND_SELECT,geometrictransform) \
	$(call GST_COND_SELECT,id3tag) \
	$(call GST_COND_SELECT,inter) \
	$(call GST_COND_SELECT,interlace) \
	$(call GST_COND_SELECT,ivfparse) \
	$(call GST_COND_SELECT,ivtc) \
	$(call GST_COND_SELECT,jp2kdecimator) \
	$(call GST_COND_SELECT,jpegformat) \
	-Dlibrfb=$(if $(CONFIG_PACKAGE_gst1-mod-rfbsrc),en,dis)abled \
	$(call GST_COND_SELECT,midi) \
	-Dmpegdemux=$(if $(CONFIG_PACKAGE_gst1-mod-mpegpsdemux),en,dis)abled \
	$(call GST_COND_SELECT,mpegpsmux) \
	$(call GST_COND_SELECT,mpegtsdemux) \
	$(call GST_COND_SELECT,mpegtsmux) \
	$(call GST_COND_SELECT,mxf) \
	$(call GST_COND_SELECT,netsim) \
	-Donvif=$(if $(CONFIG_PACKAGE_gst1-mod-rtponvif),en,dis)abled \
	$(call GST_COND_SELECT,pcapparse) \
	$(call GST_COND_SELECT,pnm) \
	$(call GST_COND_SELECT,proxy) \
	-Drawparse=$(if $(CONFIG_PACKAGE_gst1-mod-legacyrawparse),en,dis)abled \
	$(call GST_COND_SELECT,removesilence) \
	-Dsdp=$(if $(CONFIG_PACKAGE_gst1-mod-sdpelem),en,dis)abled \
	$(call GST_COND_SELECT,segmentclip) \
	$(call GST_COND_SELECT,siren) \
	$(call GST_COND_SELECT,smooth) \
	$(call GST_COND_SELECT,speed) \
	$(call GST_COND_SELECT,subenc) \
	$(call GST_COND_SELECT,switchbin) \
	$(call GST_COND_SELECT,timecode) \
	-Dvideofilters=$(if $(CONFIG_PACKAGE_gst1-mod-videofiltersbad),en,dis)abled \
	$(call GST_COND_SELECT,videoframe_audiolevel) \
	-Dvideoparsers=$(if $(CONFIG_PACKAGE_gst1-mod-videoparsersbad),en,dis)abled \
	$(call GST_COND_SELECT,videosignal) \
	$(call GST_COND_SELECT,vmnc) \
	-Dy4m=$(if $(CONFIG_PACKAGE_gst1-mod-y4mdec),en,dis)abled \
	\
	-Dopencv=disabled \
	-Dwayland=disabled \
	-Dx11=disabled \
	\
	-Daom=disabled \
	-Davtp=disabled \
	-Dandroidmedia=disabled \
	-Dapplemedia=disabled \
	-Dassrender=disabled \
	$(call GST_COND_SELECT,bluez) \
	-Dbs2b=disabled \
	$(call GST_COND_SELECT,bz2) \
	-Dchromaprint=disabled \
	-Dclosedcaption=disabled \
	-Dcolormanagement=disabled \
	-Dcurl=disabled \
	-Dcurl-ssh2=disabled \
	-Dd3dvideosink=disabled \
	-Dd3d11=disabled \
	-Ddash=disabled \
	-Ddc1394=disabled \
	-Ddecklink=disabled \
	-Ddirectfb=disabled \
	-Ddirectsound=disabled \
	$(call GST_COND_SELECT,dtls) \
	-Ddts=disabled \
	-Ddvb=disabled \
	-Dfaac=disabled \
	$(call GST_COND_SELECT,faad) \
	-Dfbdev=$(if $(CONFIG_PACKAGE_gst1-mod-fbdevsink),en,dis)abled \
	-Dfdkaac=disabled \
	-Dflite=disabled \
	-Dfluidsynth=disabled \
	-Dgl=disabled \
	-Dgme=disabled \
	-Dgpl=enabled \
	-Dgsm=disabled \
	-Dipcpipeline=disabled \
	-Diqa=disabled \
	-Dkms=disabled \
	-Dladspa=disabled \
	-Dlibde265=disabled \
	-Dlv2=disabled \
	-Dmediafoundation=disabled \
	-Dmicrodns=disabled \
	-Dmodplug=disabled \
	-Dmpeg2enc=disabled \
	-Dmplex=disabled \
	-Dmsdk=disabled \
	-Dmusepack=disabled \
	-Dneon=disabled \
	-Dnvcodec=disabled \
	-Dopenal=disabled \
	-Dopenexr=disabled \
	-Dopenh264=disabled \
	-Dopenjpeg=disabled \
	-Dopenmpt=disabled \
	-Dopenni2=disabled \
	-Dopensles=disabled \
	-Dopus=$(if $(CONFIG_PACKAGE_gst1-mod-opusparse),en,dis)abled \
	-Dresindvd=disabled \
	-Drsvg=disabled \
	-Drtmp=disabled \
	$(call GST_COND_SELECT,sbc) \
	-Dsctp=disabled \
	$(call GST_COND_SELECT,shm) \
	-Dsmoothstreaming=disabled \
	$(call GST_COND_SELECT,sndfile) \
	-Dsoundtouch=disabled \
	-Dspandsp=disabled \
	$(call GST_COND_SELECT,srt) \
	-Dsrtp=disabled \
	-Dteletext=disabled \
	-Dtinyalsa=disabled \
	-Dttml=disabled \
	-Duvch264=disabled \
	-Dvoaacenc=disabled \
	-Dvoamrwbenc=disabled \
	-Dvulkan=disabled \
	-Dwasapi=disabled \
	-Dwasapi2=disabled \
	$(call GST_COND_SELECT,webp) \
	-Dwebrtc=disabled \
	-Dwebrtcdsp=disabled \
	-Dwildmidi=disabled \
	-Dwinks=disabled \
	-Dwinscreencap=disabled \
	-Dx265=disabled \
	-Dzbar=disabled \
	-Dzxing=disabled \
	-Dwpe=disabled \
	-Dmagicleap=disabled \
	-Dv4l2codecs=disabled \
	\
	$(call GST_COND_SELECT,hls) \
	-Dhls-crypto=nettle \
	-Dexamples=disabled \
	-Dtests=disabled \
	-Dintrospection=disabled \
	-Dorc=disabled \
	-Dgobject-cast-checks=disabled \
	-Dglib-asserts=disabled \
	-Dglib-checks=disabled \
	-Dextra-checks=disabled \
	-Ddoc=disabled

define Package/gst1-plugins-bad/install
	/bin/true
endef

# 1: short name
# 2: description
# 3: dependencies on other gstreamer libraries (short name)
# 4: dependencies on other packages
define GstBuildLibrary

  GST_DEPENDS += +libgst1$(1)

  GST_BAD_LIBS+= $(1)
  define Package/libgst1$(1)
    $(call Package/gstreamer1-bad/Default)
    TITLE+= $(2) library (base)
    DEPENDS+= $$(foreach p,$(3),+libgst1$$(p)) $(4)
    HIDDEN:=1
  endef

  define Package/libgst1$(1)/description
   $(call Package/gstreamer1-bad/description/Default)
   .
   This package contains the GStreamer $(2) library.
  endef

  define Package/libgst1$(1)/install
	$(INSTALL_DIR) $$(1)/usr/lib
	( cd $(PKG_INSTALL_DIR); $(CP) \
		./usr/lib/libgst$(1)-$(GST_VERSION).so.* \
		$$(1)/usr/lib/ \
	)
  endef

  $$(eval $$(call BuildPackage,libgst1$(1)))
endef

$(eval $(call GstBuildLibrary,adaptivedemux,adaptivedemux,app uridownloader,))
$(eval $(call GstBuildLibrary,photography,photography,,))
$(eval $(call GstBuildLibrary,basecamerabinsrc,basecamerabinsrc,app,))
$(eval $(call GstBuildLibrary,uridownloader,uridownloader,,))
$(eval $(call GstBuildLibrary,codecparsers,codecparsers,,))
$(eval $(call GstBuildLibrary,mpegts,mpegts,,))

# 1: short name
# 2: description
# 3: dependencies on other gstreamer libraries (short name)
# 4: dependencies on other gstreamer plugins (short name)
# 5: dependencies on other packages
define GstBuildPlugin

  GST_DEPENDS += +gst1-mod-$(1)

  GST_BAD_MODULES+= $(1)

  define Package/gst1-mod-$(1)
    $(call Package/gstreamer1-bad/Default)
    TITLE+= $(2) plugin (bad)
    DEPENDS+= $$(foreach p,$(3),+libgst1$$(p)) $$(foreach p,$(4),+gst1-mod-$$(p)) $(5)
    HIDDEN:=1
  endef

  define Package/gst1-mod-$(1)/description
   $(call Package/gstreamer1-bad/description/Default)
   .
   This package contains the GStreamer $(2) plugin.
  endef

  define Package/gst1-mod-$(1)/install
	$(INSTALL_DIR) $$(1)/usr/lib/gstreamer-$(GST_VERSION)
	( cd $(PKG_INSTALL_DIR); $(CP) \
		./usr/lib/gstreamer-$(GST_VERSION)/libgst$(1).so* \
		$$(1)/usr/lib/gstreamer-$(GST_VERSION)/ \
	)
  endef

  $$(eval $$(call BuildPackage,gst1-mod-$(1)))
endef

$(eval $(call GstBuildPlugin,adpcmdec,adpcm decoding support,audio,,))
$(eval $(call GstBuildPlugin,adpcmenc,adpcm encoding support,audio,,))
$(eval $(call GstBuildPlugin,aiff,aiff support,audio tag,,))
$(eval $(call GstBuildPlugin,asfmux,asf muxing support,rtp,,))
$(eval $(call GstBuildPlugin,audiobuffersplit,audiobuffersplit support,audio,,))
$(eval $(call GstBuildPlugin,audiofxbad,audiofxbad support,audio,,))
$(eval $(call GstBuildPlugin,audiolatency,audiolatency support,audio,,))
$(eval $(call GstBuildPlugin,audiomixmatrix,audiomixmatrix support,audio,,))
$(eval $(call GstBuildPlugin,audiovisualizers,audiovisualizers support,audio,,))
$(eval $(call GstBuildPlugin,autoconvert,autoconvert support,,,))
$(eval $(call GstBuildPlugin,bayer,bayer support,video,,))
$(eval $(call GstBuildPlugin,camerabin,camerabin support,basecamerabinsrc photography pbutils app,,))
$(eval $(call GstBuildPlugin,coloreffects,coloreffects support,video,,))
$(eval $(call GstBuildPlugin,debugutilsbad,debugutils support,video,,))
$(eval $(call GstBuildPlugin,dvbsubenc,dvbsubenc support,video,,))
$(eval $(call GstBuildPlugin,dvbsuboverlay,dvbsuboverlay support,video,,))
$(eval $(call GstBuildPlugin,dvdspu,dvdspu support,video,,))
$(eval $(call GstBuildPlugin,faceoverlay,faceoverlay support,pbutils,,))
$(eval $(call GstBuildPlugin,festival,festival support,audio,,))
$(eval $(call GstBuildPlugin,fieldanalysis,fieldanalysis support,audio,,))
$(eval $(call GstBuildPlugin,freeverb,freeverb support,,,))
$(eval $(call GstBuildPlugin,frei0r,frei0r support,controller video,,))
$(eval $(call GstBuildPlugin,gaudieffects,gaudieffects support,audio,,))
$(eval $(call GstBuildPlugin,gdp,gdp support,,,))
$(eval $(call GstBuildPlugin,geometrictransform,geometrictransform support,,,))
$(eval $(call GstBuildPlugin,id3tag,id3tag support,tag,,))
$(eval $(call GstBuildPlugin,inter,inter support,,,))
$(eval $(call GstBuildPlugin,interlace,interlace support,,,))
$(eval $(call GstBuildPlugin,ivfparse,ivfparse support,,,))
$(eval $(call GstBuildPlugin,ivtc,ivtc support,,,))
$(eval $(call GstBuildPlugin,jp2kdecimator,jp2kdecimator support,,,))
$(eval $(call GstBuildPlugin,jpegformat,jpegformat support,tag codecparsers,,))
$(eval $(call GstBuildPlugin,legacyrawparse,rawparse support,audio video,,))
$(eval $(call GstBuildPlugin,midi,midi support,audio,,))
$(eval $(call GstBuildPlugin,mpegpsdemux,mpegpsdemux support,pbutils,,))
$(eval $(call GstBuildPlugin,mpegpsmux,mpegpsmux support,,,))
$(eval $(call GstBuildPlugin,mpegtsdemux,mpegtsdemux support,codecparsers mpegts pbutils,,))
$(eval $(call GstBuildPlugin,mpegtsmux,mpegtsmux support,mpegts video,,))
$(eval $(call GstBuildPlugin,mxf,mxf support,audio video,,))
$(eval $(call GstBuildPlugin,netsim,netsim support,,,))
$(eval $(call GstBuildPlugin,pcapparse,pcapparse support,,,))
$(eval $(call GstBuildPlugin,pnm,pnm support,video,,))
$(eval $(call GstBuildPlugin,proxy,proxy support,,,))
$(eval $(call GstBuildPlugin,removesilence,removesilence support,audio,,))
$(eval $(call GstBuildPlugin,rfbsrc,librfb support,video,,))
$(eval $(call GstBuildPlugin,rtponvif,rtponvif support,,,))
$(eval $(call GstBuildPlugin,sdpelem,sdp support,rtp sdp,,))
$(eval $(call GstBuildPlugin,segmentclip,segmentclip support,audio,,))
$(eval $(call GstBuildPlugin,siren,siren support,audio rtp,,))
$(eval $(call GstBuildPlugin,smooth,smooth support,,,))
$(eval $(call GstBuildPlugin,speed,speed support,audio,,))
$(eval $(call GstBuildPlugin,subenc,subenc support,controller,,))
$(eval $(call GstBuildPlugin,switchbin,switchbin support,,,))
$(eval $(call GstBuildPlugin,timecode,timecode support,,,))
$(eval $(call GstBuildPlugin,videofiltersbad,videofiltersbad support,,,))
$(eval $(call GstBuildPlugin,videoframe_audiolevel,videoframe_audiolevel support,,,))
#$(eval $(call GstBuildPlugin,videoparsersbad,videoparsersbad support,,,))
$(eval $(call GstBuildPlugin,videosignal,videosignal support,,,))
$(eval $(call GstBuildPlugin,vmnc,vmnc support,,,))
$(eval $(call GstBuildPlugin,y4mdec,y4mdec support,,,))

$(eval $(call GstBuildPlugin,bluez,bluez support,,,+bluez-libs))
#$(eval $(call GstBuildPlugin,bz2,bzip2 support,,,+libbz2))
#$(eval $(call GstBuildPlugin,dataurisrc,dataurisrc support,,,))
$(eval $(call GstBuildPlugin,dtls,DTLS support,,,+libopenssl))
$(eval $(call GstBuildPlugin,faad,faad support,audio,,+libfaad2))
$(eval $(call GstBuildPlugin,fbdevsink,fbdev support,video,,))
$(eval $(call GstBuildPlugin,hls,HLS support,pbutils adaptivedemux,multifile,+libnettle))
$(eval $(call GstBuildPlugin,opusparse,OPUS streams library,pbutils,,+libopus))
$(eval $(call GstBuildPlugin,sbc,sbc support,audio,,+sbc))
$(eval $(call GstBuildPlugin,shm,POSIX shared memory source and sink,,,+librt))
$(eval $(call GstBuildPlugin,sndfile,sndfile support,audio,,+libsndfile))
$(eval $(call GstBuildPlugin,srt,srt support,,,+srt))
#$(eval $(call GstBuildPlugin,srtp,srtp support,rtp,,+libsrtp))
$(eval $(call GstBuildPlugin,webp,webp support,,,+libwebp))
#$(eval $(call GstBuildPlugin,yadif,yadif support,,,))

$(eval $(call BuildPackage,gstreamer1-plugins-bad))
$(eval $(call BuildPackage,gst1-plugins-bad))
