1PORTNAME=	ffmpeg
2DISTVERSION=	8.0.1
3PORTREVISION=	0
4PORTEPOCH=	1
5CATEGORIES=	multimedia audio net
6MASTER_SITES=	https://ffmpeg.org/releases/
7
8MAINTAINER=	ports@MidnightBSD.org
9COMMENT=	Realtime audio/video encoder/converter and streaming server
10WWW=		https://ffmpeg.org/
11
12LICENSE=	gpl2+ lgpl2.1+
13LICENSE_COMB=	multi
14
15EXTRA_PATCHES=	${FILESDIR}/0001-Add-av_stream_get_first_dts-for-Chromium.patch:-p1
16
17FLAVORS=	default nox11
18FLAVOR?=	${FLAVORS:[1]}
19nox11_PKGNAMESUFFIX=	-nox11
20
21BUILD_DEPENDS=	${BUILD_DEPENDS_${ARCH}}
22BUILD_DEPENDS_aarch64=	as:devel/binutils
23BUILD_DEPENDS_amd64=	nasm:devel/nasm
24BUILD_DEPENDS_armv6=	as:devel/binutils
25BUILD_DEPENDS_armv7=	as:devel/binutils
26BUILD_DEPENDS_i386=	nasm:devel/nasm
27
28USES=		compiler:c17 cpe gmake localbase:ldflags perl5 \
29		pkgconfig shebangfix tar:xz
30USE_PERL5=	build
31SHEBANG_FILES=	doc/texi2pod.pl
32USE_LDCONFIG=	yes
33
34HAS_CONFIGURE=	yes
35CONFIGURE_LOG=	ffbuild/config.log
36NOPRECIOUSMAKEVARS=	yes
37
38CFLAGS_armv6=	-Wno-error=int-conversion
39CFLAGS_armv7=	-Wno-error=int-conversion
40CFLAGS_i386=	-Wno-error=int-conversion
41CFLAGS_powerpc=	-Wno-error=int-conversion
42LDFLAGS_aarch64=-Wl,-z,notext
43LDFLAGS_armv6=	-Wl,-z,notext
44LDFLAGS_armv7=	-Wl,-z,notext
45LDFLAGS_i386=	-Wl,-z,notext
46
47DATADIR=	${PREFIX}/share/${PORTNAME}${PKGNAMESUFFIX}
48DOCSDIR=	${PREFIX}/share/doc/${PORTNAME}${PKGNAMESUFFIX}
49
50MAKE_ENV+=	V=1
51
52HAS_SYMBOL_VERSION=	${PREFIX}/lib/libavcodec.so \
53			${PREFIX}/lib/libavdevice.so \
54			${PREFIX}/lib/libavfilter.so \
55			${PREFIX}/lib/libavformat.so \
56			${PREFIX}/lib/libavutil.so \
57			${PREFIX}/lib/libswresample.so \
58			${PREFIX}/lib/libswscale.so
59
60INSTALL_TARGET=	install-progs install-doc install-data \
61		install-libs install-headers install-examples
62
63CONFIGURE_ARGS=	--prefix="${PREFIX}" \
64		--mandir="${PREFIX}/share/man" \
65		--datadir="${DATADIR}" \
66		--docdir="${DOCSDIR}" \
67		--pkgconfigdir="${PREFIX}/libdata/pkgconfig" \
68		--disable-static \
69		--disable-libcelt \
70		--disable-mbedtls \
71		--enable-shared \
72		--enable-pic \
73		--enable-gpl \
74		--cc="${CC}" \
75		--cxx="${CXX}"
76
77OPTIONS_DEFINE=	ALSA AMR_NB AMR_WB AOM ARIBB24 ASM ASS BS2B CACA CDIO CODEC2 \
78		DAV1D DC1394 DEBUG DOCS DRM DVD FDK_AAC FLITE FONTCONFIG \
79		FREETYPE FREI0R FRIBIDI GLSLANG GME GSM HARFBUZZ ICONV ILBC \
80		JACK JXL KVAZAAR LADSPA LAME LCMS2 LENSFUN LIBBLURAY \
81		LIBPLACEBO LIBRSVG2 LIBXML2 LTO LV2 MODPLUG MYSOFA NETWORK \
82		NVENC OPENAL OPENCL OPENGL OPENH264 OPENJPEG OPENMPT \
83		OPTIMIZED_CFLAGS OPUS POCKETSPHINX PULSEAUDIO RAV1E RABBITMQ \
84		RIST RTCPU RUBBERBAND SDL SHADERC SMB SNAPPY SNDIO SOXR SPEEX \
85		SRT SSH SVTAV1 TENSORFLOW TESSERACT THEORA \
86		TWOLAME V4L VAAPI VAPOURSYNTH VDPAU VIDSTAB VMAF VO_AMRWBENC \
87		VORBIS VPX VULKAN VVENC WEBP X264 X265 XCB XVID XVIDEO ZIMG \
88		ZMQ ZVBI
89
90.if ${FLAVOR} == nox11
91COMMENT+=	(without x11)
92
93OPTIONS_EXCLUDE=	CACA DRM JACK JXL LADSPA LENSFUN LIBPLACEBO LIBRSVG2 \
94			LV2 MFX NVENC OPENAL OPENGL PULSEAUDIO SDL TESSERACT \
95			V4L VAAPI VAPOURSYNTH VDPAU VIDSTAB VPL XCB XVIDEO \
96			ZMQ ZVBI
97.endif
98
99# intel-media-sdk only for i386/amd64
100OPTIONS_DEFINE_amd64=	MFX VPL
101OPTIONS_DEFINE_i386=	MFX
102
103OPTIONS_RADIO=	RTMP SSL
104OPTIONS_RADIO_RTMP=	GCRYPT GMP
105OPTIONS_RADIO_SSL=	GNUTLS OPENSSL
106OPTIONS_GROUP=	LICENSE
107OPTIONS_GROUP_LICENSE=	GPL3 NONFREE
108
109OPTIONS_DEFAULT=	AOM ASM ASS DAV1D DVD GMP GNUTLS HARFBUZZ ICONV LAME \
110			LCMS2 LIBBLURAY LIBXML2 NETWORK OPTIMIZED_CFLAGS \
111			OPUS RTCPU SRT SVTAV1 VORBIS VPX WEBP X264 X265
112OPTIONS_DEFAULT_aarch64=LTO
113OPTIONS_DEFAULT_amd64=	LTO
114.if ${FLAVOR} == default
115OPTIONS_DEFAULT+=	DRM FONTCONFIG FREETYPE FREI0R JXL LIBPLACEBO \
116			LIBRSVG2 SHADERC V4L VAAPI VDPAU VMAF VULKAN XCB
117OPTIONS_DEFAULT_amd64+=	NVENC
118OPTIONS_DEFAULT_i386+=	NVENC
119.endif
120OPTIONS_SUB=	yes
121
122ASS_DESC=	Subtitles rendering via libass
123AOM_DESC=	AV1 video encoding/decoding via libaom
124ARIBB24_DESC=	ARIB text and caption decoding via libaribb24
125BS2B_DESC=	Bauer Stereophonic-to-Binaural filter
126CHROMAPRINT_DESC=	Audio fingerprinting with chromaprint
127CODEC2_DESC=	Codec 2 audio encoding/decoding via libcodec2
128DAV1D_DESC=	AV1 video decoding via libdav1d
129DC1394_DESC=	IIDC-1394 grabbing using libdc1394
130DRM_DESC=	KMS grabbing using libdrm
131DVD_DESC=	Support for DVD
132FDK_AAC_DESC=	AAC audio encoding via Fraunhofer FDK
133FLITE_DESC=	Voice synthesis support via libflite
134GLSLANG_DESC=	GLSL->SPIRV compilation via libglslang
135GME_DESC=	Game Music Emu demuxer
136GPL3_DESC=	Allow (L)GPL version 3 code(cs)
137HARFBUZZ_DESC=	Text shaping via HarfBuzz
138ILBC_DESC=	Internet Low Bit Rate codec
139KVAZAAR_DESC=	H.265 video codec support via Kvazaar
140LICENSE_DESC=	Licensing options
141LV2_DESC=	LV2 audio filtering
142MFX_DESC=	Intel MediaSDK (aka Quick Sync Video)
143MYSOFA_DESC=	SOFAlizer binaural filter
144NETWORK_DESC=	Networking support
145NONFREE_DESC=	Allow use of nonfree code
146NVENC_DESC=	NVIDIA decoder/encoder with CUDA support
147OPENMPT_DESC=	Decoding tracked files via libopenmpt
148OPENH264_DESC=	H.264 video codec support via OpenH264
149POCKETSPHINX_DESC=	Automatic Speech Recognition via PocketSphinx
150RAV1E_DESC=	AV1 encoding via librav1e
151RABBITMQ_DESC=	AMQP 0-9-1 protocol via RabbitMQ
152RIST_DESC=	Reliable Internet Stream Transport protocol via librist
153RUBBERBAND_DESC=Time-stretching and pitch-shifting with librubberband
154RTCPU_DESC=	Detect CPU capabilities at runtime
155RTMP_DESC=	RTMP(T)E protocol support
156SHADERC_DESC=	GLSL->SPIRV compilation via libshaderc
157SRT_DESC=	Haivision SRT protocol via libsrt
158SVTAV1_DESC=	AV1 encoding via SVT-AV1
159#SVTVP9_DESC=	VP9 encoding via SVT-VP9
160LIBPLACEBO_DESC=GPU filters from libplacebo
161TENSORFLOW_DESC=TensorFlow as a DNN module backend
162TESSERACT_DESC=	Optical Character Recognition via Tesseract
163THEORA_DESC=	Encoding support for theora via libtheora
164VAPOURSYNTH_DESC=	VapourSynth demuxer
165VIDSTAB_DESC=	Video stabilization filter
166VMAF_DESC=	VMAF filter via libvmaf
167VPL_DESC=	Intel oneVPL (aka Quick Sync Video)
168VULKAN_DESC=	Vulkan filters
169VVENC_DESC=	H.266/VVC encoding support via VVenC
170XCB_DESC=	X11 grabbing using XCB
171XVID_DESC=	Encoding support for MPEG-4 ASP via libxvid
172ZIMG_DESC=	"z" library video scaling filter
173ZMQ_DESC=	Message passing via libzmq${ZMQ_VERSION}
174ZVBI_DESC=	Teletext support via libzvbi
175
176###
177### Not ported libraries / options
178###
179###  --enable-libiec61883	enable iec61883 via libiec61883
180###  --enable-liblc3		enable LC3 de/encoding via liblc3
181###  --enable-liblcevc-dec	enable LCEVC decoding via liblcevc-dec
182###  --enable-liboapv		enable APV encoding via liboapv
183###  --enable-libopencv		enable video filtering via libopencv
184###  --enable-libqrencode	enable QR encode generation via libqrencode
185###  --enable-libquirc		enable QR decoding via libquirc
186###  --enable-libtls		enable LibreSSL (via libtls), needed for https support
187###				if openssl, gnutls or mbedtls are not used
188###  --enable-libtorch		enable Torch as one DNN backend
189###  --enable-libxeve		enable EVC encoding via libxeve
190###  --enable-libxevd		enable EVC decoding via libxevd
191###  --enable-libxavs		enable AVS encoding via xavs
192###  --enable-whisper		enable whisper filter
193###  --enable-libaribcaption	ARIB STD-B24 Caption Decoder/Renderer
194###  --enable-libdavs2		AVS2 decoding
195###  --enable-libuavs3d		AVS3 decoding via libuavs3d
196###  --enable-libxavs2		AVS2 encoding via libxavs2
197###  --enable-libklvanc		Kernel Labs VANC processing
198###  --enable-libopenvino	OpenVINO as a DNN module backend
199
200# ALSA
201ALSA_LIB_DEPENDS=	libasound.so:audio/alsa-lib
202ALSA_CONFIGURE_ENABLE=	alsa
203
204# Opencore AMR NB
205AMR_NB_LIB_DEPENDS=	libopencore-amrnb.so:audio/opencore-amr
206AMR_NB_CONFIGURE_ENABLE=	libopencore-amrnb
207AMR_NB_IMPLIES=		GPL3
208
209# Opencore AMR WB
210AMR_WB_LIB_DEPENDS=	libopencore-amrwb.so:audio/opencore-amr
211AMR_WB_CONFIGURE_ENABLE=	libopencore-amrwb
212AMR_WB_IMPLIES=		GPL3
213
214# AOM AV1 codec
215AOM_LIB_DEPENDS=	libaom.so:multimedia/aom
216AOM_CONFIGURE_ENABLE=	libaom
217
218# ARIB STD-B24, decoding JIS 8 bit characters and parsing MPEG-TS stream
219ARIBB24_LIB_DEPENDS=	libaribb24.so:multimedia/aribb24
220ARIBB24_CONFIGURE_ENABLE=	libaribb24
221
222# Assembly support
223ASM_CONFIGURE_ENABLE=	asm
224
225# ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle renderer
226ASS_LIB_DEPENDS=	libass.so:multimedia/libass
227ASS_CONFIGURE_ENABLE=	libass
228
229# Bauer Stereophonic-to-Binaural filter via libbs2b
230BS2B_LIB_DEPENDS=	libbs2b.so:audio/libbs2b
231BS2B_CONFIGURE_ENABLE=	libbs2b
232
233# Convert video into colour ASCII art via (lib)caca
234CACA_LIB_DEPENDS=	libcaca.so:graphics/libcaca
235CACA_CONFIGURE_ENABLE=	libcaca
236
237# CD Audio support via (lib)cdio
238CDIO_LIB_DEPENDS=	libcdio_paranoia.so:sysutils/libcdio-paranoia
239CDIO_CONFIGURE_ENABLE=	libcdio
240
241# chromaprint
242#CHROMAPRINT_BROKEN=		Dependency loop
243#CHROMAPRINT_LIB_DEPENDS=	libchromaprint.so:audio/chromaprint
244#CHROMAPRINT_CONFIGURE_ENABLE=	chromaprint
245
246# codec2 format support via (lib)codec2
247CODEC2_LIB_DEPENDS=	libcodec2.so:audio/codec2
248CODEC2_CONFIGURE_ENABLE=	libcodec2
249
250# AV1 decoder
251DAV1D_LIB_DEPENDS=	libdav1d.so:multimedia/dav1d
252DAV1D_CONFIGURE_ENABLE=	libdav1d
253
254# IEEE 1394 camera control via (lib)dc1394
255DC1394_LIB_DEPENDS=	libdc1394.so:multimedia/libdc1394
256DC1394_CONFIGURE_ENABLE=	libdc1394
257
258# Debugging
259DEBUG_CONFIGURE_ON=	--disable-stripping
260DEBUG_CONFIGURE_OFF=	--disable-debug
261
262# Documentation
263DOCS_BUILD_DEPENDS=	texi2html:textproc/texi2html
264DOCS_CONFIGURE_ENABLE=	htmlpages
265DOCS_BINARY_ALIAS=	makeinfo=${FALSE} # force texi2html
266
267# DRM
268DRM_LIB_DEPENDS=	libdrm.so:graphics/libdrm
269DRM_CONFIGURE_ENABLE=	libdrm
270
271# DVD support
272DVD_LIB_DEPENDS=	libdvdnav.so:multimedia/libdvdnav \
273			libdvdread.so:multimedia/libdvdread
274DVD_CONFIGURE_ENABLE=	libdvdnav \
275			libdvdread
276
277# Fraunhofer FDK AAC codec
278FDK_AAC_LIB_DEPENDS=	libfdk-aac.so:audio/fdk-aac
279FDK_AAC_CONFIGURE_ENABLE=	libfdk-aac
280FDK_AAC_IMPLIES=	NONFREE
281
282# Speech synthesis via (lib)flite
283FLITE_LIB_DEPENDS=	libflite.so:audio/flite
284FLITE_CONFIGURE_ENABLE=	libflite
285
286# (lib)fontconfig
287FONTCONFIG_LIB_DEPENDS=	libfontconfig.so:x11-fonts/fontconfig
288FONTCONFIG_CONFIGURE_ENABLE=	fontconfig
289
290# (lib)freetype
291FREETYPE_LIB_DEPENDS=	libfreetype.so:print/freetype2
292FREETYPE_CONFIGURE_ENABLE=	libfreetype
293
294# Video effects via (lib)Frei0r
295FREI0R_BUILD_DEPENDS=	${LOCALBASE}/include/frei0r.h:graphics/frei0r
296FREI0R_CONFIGURE_ENABLE=	frei0r
297
298# (lib)FriBidi
299FRIBIDI_LIB_DEPENDS=	libfribidi.so:converters/fribidi
300FRIBIDI_CONFIGURE_ENABLE=	libfribidi
301
302# Libgcrypt
303GCRYPT_LIB_DEPENDS=	libgcrypt.so:security/libgcrypt
304GCRYPT_CONFIGURE_ENABLE=	gcrypt
305
306# OpenGL and OpenGL ES shader frontend
307GLSLANG_BUILD_DEPENDS=	glslang>0:graphics/glslang \
308			spirv-tools>0:graphics/spirv-tools
309GLSLANG_CONFIGURE_ENABLE=	libglslang
310GLSLANG_LDFLAGS=	-lm
311GLSLANG_IMPLIES=	VULKAN
312
313# GnuTLS
314GNUTLS_LIB_DEPENDS=	libgnutls.so:security/gnutls
315GNUTLS_CONFIGURE_ENABLE=	gnutls
316
317# Game Music Emu via libgme
318GME_LIB_DEPENDS=	libgme.so:audio/libgme
319GME_CONFIGURE_ENABLE=	libgme
320
321# GMP
322GMP_LIB_DEPENDS=	libgmp.so:math/gmp
323GMP_CONFIGURE_ENABLE=	gmp
324GMP_IMPLIES=		GPL3
325
326# GSM de/encoding via libgsm
327GSM_LIB_DEPENDS=	libgsm.so:audio/gsm
328GSM_CONFIGURE_ENABLE=	libgsm
329
330# (lib)harfbuzz
331HARFBUZZ_LIB_DEPENDS=	libharfbuzz.so:print/harfbuzz
332HARFBUZZ_CONFIGURE_ENABLE=	libharfbuzz
333
334# iconv
335ICONV_USES=	iconv
336ICONV_CONFIGURE_ENABLE=	iconv
337
338# iLBC de/encoding via libilbc
339ILBC_LIB_DEPENDS=	libilbc.so:net/libilbc
340ILBC_CONFIGURE_ENABLE=	libilbc
341
342# Support for JACK low-latency audio server
343JACK_LIB_DEPENDS=	libjack.so:audio/jack
344JACK_CONFIGURE_ENABLE=	libjack
345
346# JPEG XL de/encoding via libjxl
347JXL_LIB_DEPENDS=	libjxl.so:graphics/libjxl
348JXL_CONFIGURE_ENABLE=	libjxl
349
350# HEVC encoding via libkvazaar
351KVAZAAR_LIB_DEPENDS=	libkvazaar.so:multimedia/kvazaar
352KVAZAAR_CONFIGURE_ENABLE=	libkvazaar
353
354# Support for Linux Audio Developer's Simple Plugin
355LADSPA_BUILD_DEPENDS=	${LOCALBASE}/include/ladspa.h:audio/ladspa
356LADSPA_RUN_DEPENDS=	${LOCALBASE}/lib/ladspa/amp.so:audio/ladspa
357LADSPA_CONFIGURE_ENABLE=	ladspa
358
359# MP3 encoding via LAME
360LAME_LIB_DEPENDS=	libmp3lame.so:audio/lame
361LAME_CONFIGURE_ENABLE=	libmp3lame
362
363# lcms2
364LCMS2_LIB_DEPENDS=	liblcms2.so:graphics/lcms2
365LCMS2_CONFIGURE_ENABLE=	lcms2
366
367# Lens geometry distortions correction filter via lib(lensfun)
368LENSFUN_LIB_DEPENDS=	liblensfun.so:graphics/lensfun
369LENSFUN_CONFIGURE_ENABLE=	liblensfun
370
371# libbluray
372LIBBLURAY_LIB_DEPENDS=	libbluray.so:multimedia/libbluray
373LIBBLURAY_CONFIGURE_ENABLE=	libbluray
374LIBBLURAY_IMPLIES=	FONTCONFIG \
375			FREETYPE
376
377# GPU-accelerated video/image rendering via libplacebo
378LIBPLACEBO_LIB_DEPENDS=	libplacebo.so:graphics/libplacebo
379LIBPLACEBO_CONFIGURE_ENABLE=	libplacebo
380LIBPLACEBO_IMPLIES=	VULKAN
381
382# SVG format support via librsvg
383LIBRSVG2_USES=	gnome
384LIBRSVG2_USE=	GNOME=cairo,librsvg2
385LIBRSVG2_CONFIGURE_ENABLE=	librsvg
386
387# XML support via libxml2
388LIBXML2_USES=	gnome
389LIBXML2_USE=	GNOME=libxml2
390LIBXML2_CONFIGURE_ENABLE=	libxml2
391
392# lto
393LTO_CONFIGURE_ON=	--enable-lto
394
395# LV2 audio filtering
396LV2_BUILD_DEPENDS=	lv2>0:audio/lv2
397LV2_LIB_DEPENDS=	liblilv-0.so:audio/lilv
398LV2_CONFIGURE_ENABLE=	lv2
399
400# Intel MediaSDK support via libmfx
401MFX_LIB_DEPENDS=	libmfx.so:multimedia/intel-media-sdk
402MFX_CONFIGURE_ENABLE=	libmfx
403
404# ModPlug via libmodplug
405MODPLUG_LIB_DEPENDS=	libmodplug.so:audio/libmodplug
406MODPLUG_CONFIGURE_ENABLE=	libmodplug
407
408# mysofa
409MYSOFA_LIB_DEPENDS=	libmysofa.so:audio/libmysofa
410MYSOFA_CONFIGURE_ENABLE=	libmysofa
411
412# network
413NETWORK_CONFIGURE_ENABLE=	network
414
415# Glue for Nvidia Codec SDK headers, hardware decoding/encoding
416NVENC_BUILD_DEPENDS=	ffnvcodec-headers>=11.1.5.2:multimedia/ffnvcodec-headers
417NVENC_CONFIGURE_ENABLE=	cuvid \
418			nvdec \
419			nvenc
420
421# OpenAL 1.1 capture support
422OPENAL_LIB_DEPENDS=	libopenal.so:audio/openal-soft
423OPENAL_CONFIGURE_ENABLE=	openal
424
425# OpenCL processing
426OPENCL_BUILD_DEPENDS=	${LOCALBASE}/include/CL/opencl.h:devel/opencl
427OPENCL_LIB_DEPENDS=	libOpenCL.so:devel/ocl-icd
428OPENCL_CONFIGURE_ENABLE=	opencl
429
430# OpenGL rendering
431OPENGL_USES=		gl
432OPENGL_USE=		GL=gl
433OPENGL_CONFIGURE_ENABLE=	opengl
434
435# H.264 encoding via OpenH264
436OPENH264_LIB_DEPENDS=	libopenh264.so:multimedia/openh264
437OPENH264_CONFIGURE_ENABLE=	libopenh264
438
439# JPEG 2000 encoding via OpenJPEG
440OPENJPEG_LIB_DEPENDS=	libopenjp2.so:graphics/openjpeg
441OPENJPEG_CONFIGURE_ENABLE=	libopenjpeg
442
443# Support for various mod files formats via (lib)openmpt
444OPENMPT_LIB_DEPENDS=	libopenmpt.so:audio/libopenmpt
445OPENMPT_CONFIGURE_ENABLE=	libopenmpt
446
447# OpenSSL
448OPENSSL_USES=		ssl
449OPENSSL_CONFIGURE_ENABLE=	openssl
450OPENSSL_IMPLIES=	NONFREE
451
452# Enable optimizations defined by upstream
453OPTIMIZED_CFLAGS_CONFIGURE_ENABLE=	optimizations
454
455# Opus de/encoding via libopus
456OPUS_LIB_DEPENDS=	libopus.so:audio/opus
457OPUS_CONFIGURE_ENABLE=	libopus
458
459# Speech recognition via (lib)PocketSphinx
460POCKETSPHINX_LIB_DEPENDS=	libpocketsphinx.so:audio/pocketsphinx
461POCKETSPHINX_CONFIGURE_ENABLE=	pocketsphinx
462POCKETSPHINX_BROKEN=	pocketsphinx < 5prealpha is not supported
463
464# Pulseaudio input via libpulse
465PULSEAUDIO_LIB_DEPENDS=	libpulse.so:audio/pulseaudio
466PULSEAUDIO_CONFIGURE_ENABLE=	libpulse
467
468# AV1 encoding via librav1e
469RAV1E_LIB_DEPENDS=	librav1e.so:multimedia/librav1e
470RAV1E_CONFIGURE_ENABLE=	librav1e
471
472# RabbitMQ
473RABBITMQ_LIB_DEPENDS=	librabbitmq.so:net/rabbitmq-c
474RABBITMQ_CONFIGURE_ENABLE=	librabbitmq
475
476# RIST via librist
477RIST_LIB_DEPENDS=	librist.so:multimedia/librist
478RIST_CONFIGURE_ENABLE=	librist
479
480# Real-time detection of CPU features
481RTCPU_CONFIGURE_ENABLE=	runtime-cpudetect
482
483# Time streching effect via (lib)Rubberband
484RUBBERBAND_LIB_DEPENDS=	librubberband.so:audio/rubberband
485RUBBERBAND_CONFIGURE_ENABLE=	librubberband
486
487# SDL(2) video output support
488SDL_USES=		sdl
489SDL_USE=		SDL=sdl2
490SDL_CONFIGURE_ENABLE=	sdl2
491
492# GLSL/HLSL to SPIR-V shader compiler
493SHADERC_LIB_DEPENDS=	libshaderc_shared.so:graphics/shaderc
494SHADERC_CONFIGURE_ENABLE=	libshaderc
495SHADERC_IMPLIES=	VULKAN
496SHADERC_PREVENTS=	GLSLANG
497
498# Samba protocol support via libsmbclient
499SMB_USES=		samba:lib
500SMB_CONFIGURE_ENABLE=	libsmbclient
501SMB_IMPLIES=		GPL3
502
503# Snappy compression via libsnappy
504SNAPPY_LIB_DEPENDS=	libsnappy.so:archivers/snappy
505SNAPPY_CONFIGURE_ENABLE=	libsnappy
506
507# sndio
508SNDIO_LIB_DEPENDS=	libsndio.so:audio/sndio
509SNDIO_CONFIGURE_ENABLE=	sndio
510
511# libsoxr resampling
512SOXR_LIB_DEPENDS=	libsoxr.so:audio/libsoxr
513SOXR_CONFIGURE_ENABLE=	libsoxr
514
515# Speex de/encoding via libspeex
516SPEEX_LIB_DEPENDS=	libspeex.so:audio/speex
517SPEEX_CONFIGURE_ENABLE=	libspeex
518
519# Haivision SRT protocol via libsrt
520SRT_LIB_DEPENDS=	libsrt.so:www/srt
521SRT_CONFIGURE_ENABLE=	libsrt
522
523# SFTP protocol support via libssh
524SSH_LIB_DEPENDS=	libssh.so:security/libssh
525SSH_CONFIGURE_ENABLE=	libssh
526
527# AV1 encoding via SVT
528SVTAV1_LIB_DEPENDS=	libSvtAv1Enc.so:multimedia/svt-av1
529SVTAV1_CONFIGURE_ON=	--enable-libsvtav1
530
531# VP9 encoding via SVT
532#SVTVP9_LIB_DEPENDS=	libSvtVp9Enc.so:multimedia/svt-vp9
533#SVTVP9_CONFIGURE_ON=	--enable-libsvtvp9
534#SVTVP9_PATCH_SITES=	https://github.com/OpenVisualCloud/SVT-VP9/raw/v0.3.0-20-gbab25a6/ffmpeg_plugin/:svtvp9
535#SVTVP9_PATCHFILES=	master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch:-p1:svtvp9
536#.if make(makesum)
537#.MAKEFLAGS:		WITH+=SVTVP9
538#.endif
539
540# TensorFlow
541TENSORFLOW_LIB_DEPENDS=	libtensorflow.so:science/py-tensorflow
542TENSORFLOW_CONFIGURE_ENABLE=	libtensorflow
543
544# OCR support via Tesseract
545TESSERACT_LIB_DEPENDS=	libtesseract.so:graphics/tesseract
546TESSERACT_CONFIGURE_ENABLE=	libtesseract
547
548# Theora encoding via libtheora
549THEORA_LIB_DEPENDS=	libtheora.so:multimedia/libtheora
550THEORA_CONFIGURE_ENABLE=	libtheora
551
552# MP2 encoding via libtwolame
553TWOLAME_LIB_DEPENDS=	libtwolame.so:audio/twolame
554TWOLAME_CONFIGURE_ENABLE=	libtwolame
555
556# V4L
557V4L_BUILD_DEPENDS=	v4l_compat>0:multimedia/v4l_compat
558V4L_LIB_DEPENDS=	libv4l2.so:multimedia/libv4l
559V4L_CONFIGURE_ENABLE=	libv4l2
560V4L_CONFIGURE_OFF=	--disable-indev=v4l2 \
561			--disable-outdev=v4l2
562
563# Video Acceleration API (VA-API)
564VAAPI_LIB_DEPENDS=	libva.so:multimedia/libva
565VAAPI_CONFIGURE_ENABLE=	vaapi
566
567# VapourSynth demuxer
568VAPOURSYNTH_LIB_DEPENDS=	libvapoursynth-script.so:multimedia/vapoursynth
569VAPOURSYNTH_CONFIGURE_ENABLE=	vapoursynth
570
571# Nvidia Video Decode and Presentation API
572VDPAU_USES=		xorg
573VDPAU_USE=		XORG=x11
574VDPAU_LIB_DEPENDS=	libvdpau.so:multimedia/libvdpau
575VDPAU_CONFIGURE_ENABLE=	vdpau
576
577# Video stabilization via (lib)VidStab
578VIDSTAB_LIB_DEPENDS=	libvidstab.so:multimedia/vid.stab
579VIDSTAB_CONFIGURE_ENABLE=	libvidstab
580
581# Perceptual video quality assessment via libvmaf
582VMAF_LIB_DEPENDS=	libvmaf.so:multimedia/vmaf
583VMAF_CONFIGURE_ENABLE=	libvmaf
584
585# VisualOn AMR-WB encoder
586VO_AMRWBENC_LIB_DEPENDS=	libvo-amrwbenc.so:audio/vo-amrwbenc
587VO_AMRWBENC_CONFIGURE_ENABLE=	libvo-amrwbenc
588VO_AMRWBENC_IMPLIES=	GPL3
589
590# Vorbis en/decoding via libvorbis
591VORBIS_LIB_DEPENDS=	libvorbisenc.so:audio/libvorbis
592VORBIS_CONFIGURE_ENABLE=	libvorbis
593
594# Intel oneVPL
595VPL_LIB_DEPENDS=	libvpl.so:multimedia/onevpl
596VPL_CONFIGURE_ENABLE=	libvpl
597
598# VP8 and VP9 de/encoding via libvpx
599VPX_LIB_DEPENDS=	libvpx.so:multimedia/libvpx
600VPX_CONFIGURE_ENABLE=	libvpx
601
602# Vulkan
603VULKAN_BUILD_DEPENDS=	vulkan-headers>0:graphics/vulkan-headers
604VULKAN_LIB_DEPENDS=	libvulkan.so:graphics/vulkan-loader
605VULKAN_CONFIGURE_ENABLE=	vulkan
606
607# H.266/VVC encoding via VVenC
608VVENC_LIB_DEPENDS=	libvvenc.so:multimedia/vvenc
609VVENC_CONFIGURE_ENABLE=	libvvenc
610
611# WebP encoding via libwebp
612WEBP_LIB_DEPENDS=	libwebp.so:graphics/webp
613WEBP_CONFIGURE_ENABLE=	libwebp
614
615# H.264 encoding via (lib)x264
616X264_LIB_DEPENDS=	libx264.so:multimedia/libx264
617X264_CONFIGURE_ENABLE=	libx264
618
619# HEVC encoding via (lib)x265
620X265_LIB_DEPENDS=	libx265.so:multimedia/x265
621X265_CONFIGURE_ENABLE=	libx265
622
623# X11 grabbing using XCB
624XCB_USES=		xorg
625XCB_USE=		XORG=xcb,x11,xext,xv
626XCB_CONFIGURE_ENABLE=	libxcb libxcb-shape libxcb-shm libxcb-xfixes xlib
627
628# XviD support
629XVID_LIB_DEPENDS=	libxvidcore.so:multimedia/xvid
630XVID_CONFIGURE_ENABLE=	libxvid
631
632# xv
633XVIDEO_USES=		xorg
634XVIDEO_USE=		XORG=x11,xext,xv
635XVIDEO_CONFIGURE_OFF=	--disable-outdev=xv
636
637# Scaling, colorspace conversion, and dithering via "z" library
638ZIMG_LIB_DEPENDS=	libzimg.so:graphics/sekrit-twc-zimg
639ZIMG_CONFIGURE_ENABLE=	libzimg
640
641# Message passing via libzmq
642ZMQ_LIB_DEPENDS=	libzmq.so:net/libzmq${ZMQ_VERSION}
643ZMQ_CONFIGURE_ENABLE=	libzmq
644ZMQ_VERSION?=		4
645
646# Teletext support via libzvbi
647ZVBI_LIB_DEPENDS=	libzvbi.so:devel/libzvbi
648ZVBI_CONFIGURE_ENABLE=	libzvbi
649
650# License knobs
651GPL3_CONFIGURE_ENABLE=	version3
652GPL3_VARS=		LICENSE="gpl3+ lgpl3+"
653#LICENSE_FILE_GPLv3+ =	${WRKSRC}/COPYING.GPLv3
654#LICENSE_FILE_LGPL3+ =	${WRKSRC}/COPYING.LGPLv3
655
656NONFREE_CONFIGURE_ENABLE=nonfree
657
658.include <bsd.mport.options.mk>
659
660.if ${PORT_OPTIONS:MNONFREE}
661LICENSE+=	NONFREE
662LICENSE_COMB=	multi
663LICENSE_NAME_NONFREE=	Non free code
664LICENSE_TEXT_NONFREE=	enabling OpenSSL or fdk-aac restricts redistribution
665LICENSE_PERMS_NONFREE=	auto-accept
666.endif
667
668.if !${PORT_OPTIONS:MVDPAU} || !${PORT_OPTIONS:MXCB} || !${PORT_OPTIONS:MXVIDEO}
669CONFIGURE_ARGS+=	--disable-xlib
670.endif
671
672post-patch:
673# {C,LD}FLAGS safeness
674	@${REINPLACE_CMD} -E \
675		-e 's|freebsd|midnightbsd|g' \
676		-e 's|require_pkg_config opencv|require_pkg_config opencv-core|g' \
677		${CONFIGURE_WRKSRC}/${CONFIGURE_SCRIPT}
678
679.include <bsd.port.mk>
680