aboutsummaryrefslogtreecommitdiff
path: root/multimedia/ffmpeg/Makefile
blob: 329db8eaa6b782dd4bbce44e4ffba1e0c6000b16 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
PORTNAME=	ffmpeg
DISTVERSION=	8.0.1
PORTREVISION=	1
PORTEPOCH=	1
CATEGORIES=	multimedia audio net
MASTER_SITES=	https://ffmpeg.org/releases/

MAINTAINER=	multimedia@FreeBSD.org
COMMENT=	Realtime audio/video encoder/converter and streaming server
WWW=		https://ffmpeg.org/

LICENSE=	GPLv2+ LGPL21+
LICENSE_COMB=	multi

EXTRA_PATCHES=	${FILESDIR}/0001-Add-av_stream_get_first_dts-for-Chromium.patch:-p1

FLAVORS=	default nox11
FLAVOR?=	${FLAVORS:[1]}
nox11_PKGNAMESUFFIX=	-nox11

BUILD_DEPENDS=	${BUILD_DEPENDS_${ARCH}}
BUILD_DEPENDS_aarch64=	as:devel/binutils
BUILD_DEPENDS_amd64=	nasm:devel/nasm
BUILD_DEPENDS_armv6=	as:devel/binutils
BUILD_DEPENDS_armv7=	as:devel/binutils
BUILD_DEPENDS_i386=	nasm:devel/nasm

USES=		compiler:c17 cpe gmake localbase:ldflags perl5 \
		pkgconfig shebangfix tar:xz
USE_PERL5=	build
SHEBANG_FILES=	doc/texi2pod.pl
USE_LDCONFIG=	yes

HAS_CONFIGURE=	yes
CONFIGURE_LOG=	ffbuild/config.log
NOPRECIOUSMAKEVARS=	yes

CFLAGS_armv6=	-Wno-error=int-conversion
CFLAGS_armv7=	-Wno-error=int-conversion
CFLAGS_i386=	-Wno-error=int-conversion
CFLAGS_powerpc=	-Wno-error=int-conversion
LDFLAGS_aarch64=-Wl,-z,notext
LDFLAGS_armv6=	-Wl,-z,notext
LDFLAGS_armv7=	-Wl,-z,notext
LDFLAGS_i386=	-Wl,-z,notext

DATADIR=	${PREFIX}/share/${PORTNAME}${PKGNAMESUFFIX}
DOCSDIR=	${PREFIX}/share/doc/${PORTNAME}${PKGNAMESUFFIX}

MAKE_ENV+=	V=1

HAS_SYMBOL_VERSION=	${PREFIX}/lib/libavcodec.so \
			${PREFIX}/lib/libavdevice.so \
			${PREFIX}/lib/libavfilter.so \
			${PREFIX}/lib/libavformat.so \
			${PREFIX}/lib/libavutil.so \
			${PREFIX}/lib/libswresample.so \
			${PREFIX}/lib/libswscale.so

INSTALL_TARGET=	install-progs install-doc install-data \
		install-libs install-headers install-examples

CONFIGURE_ARGS=	--prefix="${PREFIX}" \
		--mandir="${PREFIX}/share/man" \
		--datadir="${DATADIR}" \
		--docdir="${DOCSDIR}" \
		--pkgconfigdir="${PREFIX}/libdata/pkgconfig" \
		--disable-static \
		--disable-libcelt \
		--disable-mbedtls \
		--enable-shared \
		--enable-pic \
		--enable-gpl \
		--cc="${CC}" \
		--cxx="${CXX}"

OPTIONS_DEFINE=	ALSA AMR_NB AMR_WB AOM ARIBB24 ASM ASS BS2B CACA CDIO CODEC2 \
		DAV1D DC1394 DEBUG DOCS DRM DVD FDK_AAC FLITE FONTCONFIG \
		FREETYPE FREI0R FRIBIDI GLSLANG GME GSM HARFBUZZ ICONV ILBC \
		JACK JXL KVAZAAR LADSPA LAME LCMS2 LENSFUN LIBBLURAY \
		LIBPLACEBO LIBRSVG2 LIBXML2 LTO LV2 MODPLUG MYSOFA NETWORK \
		NVENC OPENAL OPENCL OPENGL OPENH264 OPENJPEG OPENMPT \
		OPTIMIZED_CFLAGS OPUS POCKETSPHINX PULSEAUDIO RAV1E RABBITMQ \
		RIST RTCPU RUBBERBAND SDL SHADERC SMB SNAPPY SNDIO SOXR SPEEX \
		SRT SSH SVTAV1 TENSORFLOW TESSERACT THEORA \
		TWOLAME V4L VAAPI VAPOURSYNTH VDPAU VIDSTAB VMAF VO_AMRWBENC \
		VORBIS VPX VULKAN VVENC WEBP X264 X265 XCB XVID XVIDEO ZIMG \
		ZMQ ZVBI

.if ${FLAVOR} == nox11
COMMENT+=	(without x11)

OPTIONS_EXCLUDE=	CACA DRM JACK JXL LADSPA LENSFUN LIBPLACEBO LIBRSVG2 \
			LV2 MFX NVENC OPENAL OPENGL PULSEAUDIO SDL TESSERACT \
			V4L VAAPI VAPOURSYNTH VDPAU VIDSTAB VPL XCB XVIDEO \
			ZMQ ZVBI
.endif

# intel-media-sdk only for i386/amd64
OPTIONS_DEFINE_amd64=	MFX VPL
OPTIONS_DEFINE_i386=	MFX

OPTIONS_RADIO=	RTMP SSL
OPTIONS_RADIO_RTMP=	GCRYPT GMP
OPTIONS_RADIO_SSL=	GNUTLS OPENSSL
OPTIONS_GROUP=	LICENSE
OPTIONS_GROUP_LICENSE=	GPL3 NONFREE

OPTIONS_DEFAULT=	AOM ASM ASS DAV1D DVD GMP GNUTLS HARFBUZZ ICONV LAME \
			LCMS2 LIBBLURAY LIBXML2 NETWORK OPTIMIZED_CFLAGS \
			OPUS RTCPU SRT SVTAV1 VORBIS VPX WEBP X264 X265
OPTIONS_DEFAULT_aarch64=LTO
OPTIONS_DEFAULT_amd64=	LTO
.if ${FLAVOR} == default
OPTIONS_DEFAULT+=	DRM FONTCONFIG FREETYPE FREI0R JXL LIBPLACEBO \
			LIBRSVG2 SHADERC V4L VAAPI VDPAU VMAF VULKAN XCB
OPTIONS_DEFAULT_amd64+=	NVENC
OPTIONS_DEFAULT_i386+=	NVENC
.endif
OPTIONS_SUB=	yes

ASS_DESC=	Subtitles rendering via libass
AOM_DESC=	AV1 video encoding/decoding via libaom
ARIBB24_DESC=	ARIB text and caption decoding via libaribb24
BS2B_DESC=	Bauer Stereophonic-to-Binaural filter
CHROMAPRINT_DESC=	Audio fingerprinting with chromaprint
CODEC2_DESC=	Codec 2 audio encoding/decoding via libcodec2
DAV1D_DESC=	AV1 video decoding via libdav1d
DC1394_DESC=	IIDC-1394 grabbing using libdc1394
DRM_DESC=	KMS grabbing using libdrm
DVD_DESC=	Support for DVD
FDK_AAC_DESC=	AAC audio encoding via Fraunhofer FDK
FLITE_DESC=	Voice synthesis support via libflite
GLSLANG_DESC=	GLSL->SPIRV compilation via libglslang
GME_DESC=	Game Music Emu demuxer
GPL3_DESC=	Allow (L)GPL version 3 code(cs)
HARFBUZZ_DESC=	Text shaping via HarfBuzz
ILBC_DESC=	Internet Low Bit Rate codec
KVAZAAR_DESC=	H.265 video codec support via Kvazaar
LICENSE_DESC=	Licensing options
LV2_DESC=	LV2 audio filtering
MFX_DESC=	Intel MediaSDK (aka Quick Sync Video)
MYSOFA_DESC=	SOFAlizer binaural filter
NETWORK_DESC=	Networking support
NONFREE_DESC=	Allow use of nonfree code
NVENC_DESC=	NVIDIA decoder/encoder with CUDA support
OPENMPT_DESC=	Decoding tracked files via libopenmpt
OPENH264_DESC=	H.264 video codec support via OpenH264
POCKETSPHINX_DESC=	Automatic Speech Recognition via PocketSphinx
RAV1E_DESC=	AV1 encoding via librav1e
RABBITMQ_DESC=	AMQP 0-9-1 protocol via RabbitMQ
RIST_DESC=	Reliable Internet Stream Transport protocol via librist
RUBBERBAND_DESC=Time-stretching and pitch-shifting with librubberband
RTCPU_DESC=	Detect CPU capabilities at runtime
RTMP_DESC=	RTMP(T)E protocol support
SHADERC_DESC=	GLSL->SPIRV compilation via libshaderc
SRT_DESC=	Haivision SRT protocol via libsrt
SVTAV1_DESC=	AV1 encoding via SVT-AV1
#SVTVP9_DESC=	VP9 encoding via SVT-VP9
LIBPLACEBO_DESC=GPU filters from libplacebo
TENSORFLOW_DESC=TensorFlow as a DNN module backend
TESSERACT_DESC=	Optical Character Recognition via Tesseract
THEORA_DESC=	Encoding support for theora via libtheora
VAPOURSYNTH_DESC=	VapourSynth demuxer
VIDSTAB_DESC=	Video stabilization filter
VMAF_DESC=	VMAF filter via libvmaf
VPL_DESC=	Intel oneVPL (aka Quick Sync Video)
VULKAN_DESC=	Vulkan filters
VVENC_DESC=	H.266/VVC encoding support via VVenC
XCB_DESC=	X11 grabbing using XCB
XVID_DESC=	Encoding support for MPEG-4 ASP via libxvid
ZIMG_DESC=	"z" library video scaling filter
ZMQ_DESC=	Message passing via libzmq${ZMQ_VERSION}
ZVBI_DESC=	Teletext support via libzvbi

###
### Not ported libraries / options
###
###  --enable-libiec61883	enable iec61883 via libiec61883
###  --enable-liblc3		enable LC3 de/encoding via liblc3
###  --enable-liblcevc-dec	enable LCEVC decoding via liblcevc-dec
###  --enable-liboapv		enable APV encoding via liboapv
###  --enable-libopencv		enable video filtering via libopencv
###  --enable-libqrencode	enable QR encode generation via libqrencode
###  --enable-libquirc		enable QR decoding via libquirc
###  --enable-libtls		enable LibreSSL (via libtls), needed for https support
###				if openssl, gnutls or mbedtls are not used
###  --enable-libtorch		enable Torch as one DNN backend
###  --enable-libxeve		enable EVC encoding via libxeve
###  --enable-libxevd		enable EVC decoding via libxevd
###  --enable-libxavs		enable AVS encoding via xavs
###  --enable-whisper		enable whisper filter
###  --enable-libaribcaption	ARIB STD-B24 Caption Decoder/Renderer
###  --enable-libdavs2		AVS2 decoding
###  --enable-libuavs3d		AVS3 decoding via libuavs3d
###  --enable-libxavs2		AVS2 encoding via libxavs2
###  --enable-libklvanc		Kernel Labs VANC processing
###  --enable-libopenvino	OpenVINO as a DNN module backend

# ALSA
ALSA_LIB_DEPENDS=	libasound.so:audio/alsa-lib
ALSA_CONFIGURE_ENABLE=	alsa

# Opencore AMR NB
AMR_NB_LIB_DEPENDS=	libopencore-amrnb.so:audio/opencore-amr
AMR_NB_CONFIGURE_ENABLE=	libopencore-amrnb
AMR_NB_IMPLIES=		GPL3

# Opencore AMR WB
AMR_WB_LIB_DEPENDS=	libopencore-amrwb.so:audio/opencore-amr
AMR_WB_CONFIGURE_ENABLE=	libopencore-amrwb
AMR_WB_IMPLIES=		GPL3

# AOM AV1 codec
AOM_LIB_DEPENDS=	libaom.so:multimedia/aom
AOM_CONFIGURE_ENABLE=	libaom

# ARIB STD-B24, decoding JIS 8 bit characters and parsing MPEG-TS stream
ARIBB24_LIB_DEPENDS=	libaribb24.so:multimedia/aribb24
ARIBB24_CONFIGURE_ENABLE=	libaribb24

# Assembly support
ASM_CONFIGURE_ENABLE=	asm

# ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle renderer
ASS_LIB_DEPENDS=	libass.so:multimedia/libass
ASS_CONFIGURE_ENABLE=	libass

# Bauer Stereophonic-to-Binaural filter via libbs2b
BS2B_LIB_DEPENDS=	libbs2b.so:audio/libbs2b
BS2B_CONFIGURE_ENABLE=	libbs2b

# Convert video into colour ASCII art via (lib)caca
CACA_LIB_DEPENDS=	libcaca.so:graphics/libcaca
CACA_CONFIGURE_ENABLE=	libcaca

# CD Audio support via (lib)cdio
CDIO_LIB_DEPENDS=	libcdio_paranoia.so:sysutils/libcdio-paranoia
CDIO_CONFIGURE_ENABLE=	libcdio

# chromaprint
#CHROMAPRINT_BROKEN=		Dependency loop
#CHROMAPRINT_LIB_DEPENDS=	libchromaprint.so:audio/chromaprint
#CHROMAPRINT_CONFIGURE_ENABLE=	chromaprint

# codec2 format support via (lib)codec2
CODEC2_LIB_DEPENDS=	libcodec2.so:audio/codec2
CODEC2_CONFIGURE_ENABLE=	libcodec2

# AV1 decoder
DAV1D_LIB_DEPENDS=	libdav1d.so:multimedia/dav1d
DAV1D_CONFIGURE_ENABLE=	libdav1d

# IEEE 1394 camera control via (lib)dc1394
DC1394_LIB_DEPENDS=	libdc1394.so:multimedia/libdc1394
DC1394_CONFIGURE_ENABLE=	libdc1394

# Debugging
DEBUG_CONFIGURE_ON=	--disable-stripping
DEBUG_CONFIGURE_OFF=	--disable-debug

# Documentation
DOCS_BUILD_DEPENDS=	texi2html:textproc/texi2html
DOCS_CONFIGURE_ENABLE=	htmlpages
DOCS_BINARY_ALIAS=	makeinfo=${FALSE} # force texi2html

# DRM
DRM_LIB_DEPENDS=	libdrm.so:graphics/libdrm
DRM_CONFIGURE_ENABLE=	libdrm

# DVD support
DVD_LIB_DEPENDS=	libdvdnav.so:multimedia/libdvdnav \
			libdvdread.so:multimedia/libdvdread
DVD_CONFIGURE_ENABLE=	libdvdnav \
			libdvdread

# Fraunhofer FDK AAC codec
FDK_AAC_LIB_DEPENDS=	libfdk-aac.so:audio/fdk-aac
FDK_AAC_CONFIGURE_ENABLE=	libfdk-aac
FDK_AAC_IMPLIES=	NONFREE

# Speech synthesis via (lib)flite
FLITE_LIB_DEPENDS=	libflite.so:audio/flite
FLITE_CONFIGURE_ENABLE=	libflite

# (lib)fontconfig
FONTCONFIG_LIB_DEPENDS=	libfontconfig.so:x11-fonts/fontconfig
FONTCONFIG_CONFIGURE_ENABLE=	fontconfig

# (lib)freetype
FREETYPE_LIB_DEPENDS=	libfreetype.so:print/freetype2
FREETYPE_CONFIGURE_ENABLE=	libfreetype

# Video effects via (lib)Frei0r
FREI0R_BUILD_DEPENDS=	${LOCALBASE}/include/frei0r.h:graphics/frei0r
FREI0R_CONFIGURE_ENABLE=	frei0r

# (lib)FriBidi
FRIBIDI_LIB_DEPENDS=	libfribidi.so:converters/fribidi
FRIBIDI_CONFIGURE_ENABLE=	libfribidi

# Libgcrypt
GCRYPT_LIB_DEPENDS=	libgcrypt.so:security/libgcrypt
GCRYPT_CONFIGURE_ENABLE=	gcrypt

# OpenGL and OpenGL ES shader frontend
GLSLANG_BUILD_DEPENDS=	glslang>0:graphics/glslang \
			spirv-tools>0:graphics/spirv-tools
GLSLANG_CONFIGURE_ENABLE=	libglslang
GLSLANG_LDFLAGS=	-lm
GLSLANG_IMPLIES=	VULKAN

# GnuTLS
GNUTLS_LIB_DEPENDS=	libgnutls.so:security/gnutls
GNUTLS_CONFIGURE_ENABLE=	gnutls

# Game Music Emu via libgme
GME_LIB_DEPENDS=	libgme.so:audio/libgme
GME_CONFIGURE_ENABLE=	libgme

# GMP
GMP_LIB_DEPENDS=	libgmp.so:math/gmp
GMP_CONFIGURE_ENABLE=	gmp
GMP_IMPLIES=		GPL3

# GSM de/encoding via libgsm
GSM_LIB_DEPENDS=	libgsm.so:audio/gsm
GSM_CONFIGURE_ENABLE=	libgsm

# (lib)harfbuzz
HARFBUZZ_LIB_DEPENDS=	libharfbuzz.so:print/harfbuzz
HARFBUZZ_CONFIGURE_ENABLE=	libharfbuzz

# iconv
ICONV_USES=	iconv
ICONV_CONFIGURE_ENABLE=	iconv

# iLBC de/encoding via libilbc
ILBC_LIB_DEPENDS=	libilbc.so:net/libilbc
ILBC_CONFIGURE_ENABLE=	libilbc

# Support for JACK low-latency audio server
JACK_LIB_DEPENDS=	libjack.so:audio/jack
JACK_CONFIGURE_ENABLE=	libjack

# JPEG XL de/encoding via libjxl
JXL_LIB_DEPENDS=	libjxl.so:graphics/libjxl
JXL_CONFIGURE_ENABLE=	libjxl

# HEVC encoding via libkvazaar
KVAZAAR_LIB_DEPENDS=	libkvazaar.so:multimedia/kvazaar
KVAZAAR_CONFIGURE_ENABLE=	libkvazaar

# Support for Linux Audio Developer's Simple Plugin
LADSPA_BUILD_DEPENDS=	${LOCALBASE}/include/ladspa.h:audio/ladspa
LADSPA_RUN_DEPENDS=	${LOCALBASE}/lib/ladspa/amp.so:audio/ladspa
LADSPA_CONFIGURE_ENABLE=	ladspa

# MP3 encoding via LAME
LAME_LIB_DEPENDS=	libmp3lame.so:audio/lame
LAME_CONFIGURE_ENABLE=	libmp3lame

# lcms2
LCMS2_LIB_DEPENDS=	liblcms2.so:graphics/lcms2
LCMS2_CONFIGURE_ENABLE=	lcms2

# Lens geometry distortions correction filter via lib(lensfun)
LENSFUN_LIB_DEPENDS=	liblensfun.so:graphics/lensfun
LENSFUN_CONFIGURE_ENABLE=	liblensfun

# libbluray
LIBBLURAY_LIB_DEPENDS=	libbluray.so:multimedia/libbluray
LIBBLURAY_CONFIGURE_ENABLE=	libbluray
LIBBLURAY_IMPLIES=	FONTCONFIG \
			FREETYPE

# GPU-accelerated video/image rendering via libplacebo
LIBPLACEBO_LIB_DEPENDS=	libplacebo.so:graphics/libplacebo
LIBPLACEBO_CONFIGURE_ENABLE=	libplacebo
LIBPLACEBO_IMPLIES=	VULKAN

# SVG format support via librsvg
LIBRSVG2_USES=	gnome
LIBRSVG2_USE=	GNOME=cairo,librsvg2
LIBRSVG2_CONFIGURE_ENABLE=	librsvg

# XML support via libxml2
LIBXML2_USES=	gnome
LIBXML2_USE=	GNOME=libxml2
LIBXML2_CONFIGURE_ENABLE=	libxml2

# lto
LTO_CONFIGURE_ON=	--enable-lto

# LV2 audio filtering
LV2_BUILD_DEPENDS=	lv2>0:audio/lv2
LV2_LIB_DEPENDS=	liblilv-0.so:audio/lilv
LV2_CONFIGURE_ENABLE=	lv2

# Intel MediaSDK support via libmfx
MFX_LIB_DEPENDS=	libmfx.so:multimedia/intel-media-sdk
MFX_CONFIGURE_ENABLE=	libmfx

# ModPlug via libmodplug
MODPLUG_LIB_DEPENDS=	libmodplug.so:audio/libmodplug
MODPLUG_CONFIGURE_ENABLE=	libmodplug

# mysofa
MYSOFA_LIB_DEPENDS=	libmysofa.so:audio/libmysofa
MYSOFA_CONFIGURE_ENABLE=	libmysofa

# network
NETWORK_CONFIGURE_ENABLE=	network

# Glue for Nvidia Codec SDK headers, hardware decoding/encoding
NVENC_BUILD_DEPENDS=	ffnvcodec-headers>=11.1.5.2:multimedia/ffnvcodec-headers
NVENC_CONFIGURE_ENABLE=	cuvid \
			nvdec \
			nvenc

# OpenAL 1.1 capture support
OPENAL_LIB_DEPENDS=	libopenal.so:audio/openal-soft
OPENAL_CONFIGURE_ENABLE=	openal

# OpenCL processing
OPENCL_BUILD_DEPENDS=	${LOCALBASE}/include/CL/opencl.h:devel/opencl
OPENCL_LIB_DEPENDS=	libOpenCL.so:devel/ocl-icd
OPENCL_CONFIGURE_ENABLE=	opencl

# OpenGL rendering
OPENGL_USES=		gl
OPENGL_USE=		GL=gl
OPENGL_CONFIGURE_ENABLE=	opengl

# H.264 encoding via OpenH264
OPENH264_LIB_DEPENDS=	libopenh264.so:multimedia/openh264
OPENH264_CONFIGURE_ENABLE=	libopenh264

# JPEG 2000 encoding via OpenJPEG
OPENJPEG_LIB_DEPENDS=	libopenjp2.so:graphics/openjpeg
OPENJPEG_CONFIGURE_ENABLE=	libopenjpeg

# Support for various mod files formats via (lib)openmpt
OPENMPT_LIB_DEPENDS=	libopenmpt.so:audio/libopenmpt
OPENMPT_CONFIGURE_ENABLE=	libopenmpt

# OpenSSL
OPENSSL_USES=		ssl
OPENSSL_CONFIGURE_ENABLE=	openssl
OPENSSL_IMPLIES=	NONFREE

# Enable optimizations defined by upstream
OPTIMIZED_CFLAGS_CONFIGURE_ENABLE=	optimizations

# Opus de/encoding via libopus
OPUS_LIB_DEPENDS=	libopus.so:audio/opus
OPUS_CONFIGURE_ENABLE=	libopus

# Speech recognition via (lib)PocketSphinx
POCKETSPHINX_LIB_DEPENDS=	libpocketsphinx.so:audio/pocketsphinx
POCKETSPHINX_CONFIGURE_ENABLE=	pocketsphinx
POCKETSPHINX_BROKEN=	pocketsphinx < 5prealpha is not supported

# Pulseaudio input via libpulse
PULSEAUDIO_LIB_DEPENDS=	libpulse.so:audio/pulseaudio
PULSEAUDIO_CONFIGURE_ENABLE=	libpulse

# AV1 encoding via librav1e
RAV1E_LIB_DEPENDS=	librav1e.so:multimedia/librav1e
RAV1E_CONFIGURE_ENABLE=	librav1e

# RabbitMQ
RABBITMQ_LIB_DEPENDS=	librabbitmq.so:net/rabbitmq-c
RABBITMQ_CONFIGURE_ENABLE=	librabbitmq

# RIST via librist
RIST_LIB_DEPENDS=	librist.so:multimedia/librist
RIST_CONFIGURE_ENABLE=	librist

# Real-time detection of CPU features
RTCPU_CONFIGURE_ENABLE=	runtime-cpudetect

# Time streching effect via (lib)Rubberband
RUBBERBAND_LIB_DEPENDS=	librubberband.so:audio/rubberband
RUBBERBAND_CONFIGURE_ENABLE=	librubberband

# SDL(2) video output support
SDL_USES=		sdl
SDL_USE=		SDL=sdl2
SDL_CONFIGURE_ENABLE=	sdl2

# GLSL/HLSL to SPIR-V shader compiler
SHADERC_LIB_DEPENDS=	libshaderc_shared.so:graphics/shaderc
SHADERC_CONFIGURE_ENABLE=	libshaderc
SHADERC_IMPLIES=	VULKAN
SHADERC_PREVENTS=	GLSLANG

# Samba protocol support via libsmbclient
SMB_USES=		samba:lib
SMB_CONFIGURE_ENABLE=	libsmbclient
SMB_IMPLIES=		GPL3

# Snappy compression via libsnappy
SNAPPY_LIB_DEPENDS=	libsnappy.so:archivers/snappy
SNAPPY_CONFIGURE_ENABLE=	libsnappy

# sndio
SNDIO_LIB_DEPENDS=	libsndio.so:audio/sndio
SNDIO_CONFIGURE_ENABLE=	sndio

# libsoxr resampling
SOXR_LIB_DEPENDS=	libsoxr.so:audio/libsoxr
SOXR_CONFIGURE_ENABLE=	libsoxr

# Speex de/encoding via libspeex
SPEEX_LIB_DEPENDS=	libspeex.so:audio/speex
SPEEX_CONFIGURE_ENABLE=	libspeex

# Haivision SRT protocol via libsrt
SRT_LIB_DEPENDS=	libsrt.so:www/srt
SRT_CONFIGURE_ENABLE=	libsrt

# SFTP protocol support via libssh
SSH_LIB_DEPENDS=	libssh.so:security/libssh
SSH_CONFIGURE_ENABLE=	libssh

# AV1 encoding via SVT
SVTAV1_LIB_DEPENDS=	libSvtAv1Enc.so:multimedia/svt-av1
SVTAV1_CONFIGURE_ON=	--enable-libsvtav1

# VP9 encoding via SVT
#SVTVP9_LIB_DEPENDS=	libSvtVp9Enc.so:multimedia/svt-vp9
#SVTVP9_CONFIGURE_ON=	--enable-libsvtvp9
#SVTVP9_PATCH_SITES=	https://github.com/OpenVisualCloud/SVT-VP9/raw/v0.3.0-20-gbab25a6/ffmpeg_plugin/:svtvp9
#SVTVP9_PATCHFILES=	master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch:-p1:svtvp9
#.if make(makesum)
#.MAKEFLAGS:		WITH+=SVTVP9
#.endif

# TensorFlow
TENSORFLOW_LIB_DEPENDS=	libtensorflow.so:science/py-tensorflow
TENSORFLOW_CONFIGURE_ENABLE=	libtensorflow

# OCR support via Tesseract
TESSERACT_LIB_DEPENDS=	libtesseract.so:graphics/tesseract
TESSERACT_CONFIGURE_ENABLE=	libtesseract

# Theora encoding via libtheora
THEORA_LIB_DEPENDS=	libtheora.so:multimedia/libtheora
THEORA_CONFIGURE_ENABLE=	libtheora

# MP2 encoding via libtwolame
TWOLAME_LIB_DEPENDS=	libtwolame.so:audio/twolame
TWOLAME_CONFIGURE_ENABLE=	libtwolame

# V4L
V4L_BUILD_DEPENDS=	v4l_compat>0:multimedia/v4l_compat
V4L_LIB_DEPENDS=	libv4l2.so:multimedia/libv4l
V4L_CONFIGURE_ENABLE=	libv4l2
V4L_CONFIGURE_OFF=	--disable-indev=v4l2 \
			--disable-outdev=v4l2

# Video Acceleration API (VA-API)
VAAPI_LIB_DEPENDS=	libva.so:multimedia/libva
VAAPI_CONFIGURE_ENABLE=	vaapi

# VapourSynth demuxer
VAPOURSYNTH_LIB_DEPENDS=	libvapoursynth-script.so:multimedia/vapoursynth
VAPOURSYNTH_CONFIGURE_ENABLE=	vapoursynth

# Nvidia Video Decode and Presentation API
VDPAU_USES=		xorg
VDPAU_USE=		XORG=x11
VDPAU_LIB_DEPENDS=	libvdpau.so:multimedia/libvdpau
VDPAU_CONFIGURE_ENABLE=	vdpau

# Video stabilization via (lib)VidStab
VIDSTAB_LIB_DEPENDS=	libvidstab.so:multimedia/vid.stab
VIDSTAB_CONFIGURE_ENABLE=	libvidstab

# Perceptual video quality assessment via libvmaf
VMAF_LIB_DEPENDS=	libvmaf.so:multimedia/vmaf
VMAF_CONFIGURE_ENABLE=	libvmaf

# VisualOn AMR-WB encoder
VO_AMRWBENC_LIB_DEPENDS=	libvo-amrwbenc.so:audio/vo-amrwbenc
VO_AMRWBENC_CONFIGURE_ENABLE=	libvo-amrwbenc
VO_AMRWBENC_IMPLIES=	GPL3

# Vorbis en/decoding via libvorbis
VORBIS_LIB_DEPENDS=	libvorbisenc.so:audio/libvorbis
VORBIS_CONFIGURE_ENABLE=	libvorbis

# Intel oneVPL
VPL_LIB_DEPENDS=	libvpl.so:multimedia/onevpl
VPL_CONFIGURE_ENABLE=	libvpl

# VP8 and VP9 de/encoding via libvpx
VPX_LIB_DEPENDS=	libvpx.so:multimedia/libvpx
VPX_CONFIGURE_ENABLE=	libvpx

# Vulkan
VULKAN_BUILD_DEPENDS=	vulkan-headers>0:graphics/vulkan-headers
VULKAN_LIB_DEPENDS=	libvulkan.so:graphics/vulkan-loader
VULKAN_CONFIGURE_ENABLE=	vulkan

# H.266/VVC encoding via VVenC
VVENC_LIB_DEPENDS=	libvvenc.so:multimedia/vvenc
VVENC_CONFIGURE_ENABLE=	libvvenc

# WebP encoding via libwebp
WEBP_LIB_DEPENDS=	libwebp.so:graphics/webp
WEBP_CONFIGURE_ENABLE=	libwebp

# H.264 encoding via (lib)x264
X264_LIB_DEPENDS=	libx264.so:multimedia/libx264
X264_CONFIGURE_ENABLE=	libx264

# HEVC encoding via (lib)x265
X265_LIB_DEPENDS=	libx265.so:multimedia/x265
X265_CONFIGURE_ENABLE=	libx265

# X11 grabbing using XCB
XCB_USES=		xorg
XCB_USE=		XORG=xcb,x11,xext,xv
XCB_CONFIGURE_ENABLE=	libxcb libxcb-shape libxcb-shm libxcb-xfixes xlib

# XviD support
XVID_LIB_DEPENDS=	libxvidcore.so:multimedia/xvid
XVID_CONFIGURE_ENABLE=	libxvid

# xv
XVIDEO_USES=		xorg
XVIDEO_USE=		XORG=x11,xext,xv
XVIDEO_CONFIGURE_OFF=	--disable-outdev=xv

# Scaling, colorspace conversion, and dithering via "z" library
ZIMG_LIB_DEPENDS=	libzimg.so:graphics/sekrit-twc-zimg
ZIMG_CONFIGURE_ENABLE=	libzimg

# Message passing via libzmq
ZMQ_LIB_DEPENDS=	libzmq.so:net/libzmq${ZMQ_VERSION}
ZMQ_CONFIGURE_ENABLE=	libzmq
ZMQ_VERSION?=		4

# Teletext support via libzvbi
ZVBI_LIB_DEPENDS=	libzvbi.so:devel/libzvbi
ZVBI_CONFIGURE_ENABLE=	libzvbi

# License knobs
GPL3_CONFIGURE_ENABLE=	version3
GPL3_VARS=		LICENSE="GPLv3+ LGPL3+"
#LICENSE_FILE_GPLv3+ =	${WRKSRC}/COPYING.GPLv3
#LICENSE_FILE_LGPL3+ =	${WRKSRC}/COPYING.LGPLv3

NONFREE_CONFIGURE_ENABLE=nonfree

.include <bsd.port.options.mk>

.if ${PORT_OPTIONS:MNONFREE}
LICENSE+=	NONFREE
LICENSE_COMB=	multi
LICENSE_NAME_NONFREE=	Non free code
LICENSE_TEXT_NONFREE=	enabling OpenSSL or fdk-aac restricts redistribution
LICENSE_PERMS_NONFREE=	auto-accept
.endif

.if !${PORT_OPTIONS:MVDPAU} || !${PORT_OPTIONS:MXCB} || !${PORT_OPTIONS:MXVIDEO}
CONFIGURE_ARGS+=	--disable-xlib
.endif

.include <bsd.port.mk>