git: f0dadc529fe9 - main - multimedia/ffmpeg: fork 4.* into a pinned port
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 17 Mar 2023 21:04:01 UTC
The branch main has been updated by jbeich:
URL: https://cgit.FreeBSD.org/ports/commit/?id=f0dadc529fe9c4ee69dd96db92e2d0572d2092aa
commit f0dadc529fe9c4ee69dd96db92e2d0572d2092aa
Author: Jan Beich <jbeich@FreeBSD.org>
AuthorDate: 2023-03-17 18:58:47 +0000
Commit: Jan Beich <jbeich@FreeBSD.org>
CommitDate: 2023-03-17 20:59:23 +0000
multimedia/ffmpeg: fork 4.* into a pinned port
Mainly for leaf consumers: applications but not plugins or libraries.
Otherwise, indirectly mixing different versions of ffmpeg libraries at
runtime can lead to crashes.
To use simply add the following before <bsd.port.mk> or <bsd.port.pre.mk>
.include "${.CURDIR:H:H}/multimedia/ffmpeg4/override.mk"
PR: 261302
Inspired by: c717faa5c764
---
multimedia/Makefile | 1 +
multimedia/ffmpeg4/Makefile | 655 ++++++++++++++
multimedia/ffmpeg4/distinfo | 9 +
multimedia/ffmpeg4/files/patch-configure | 26 +
multimedia/ffmpeg4/files/patch-doc-Makefile | 11 +
multimedia/ffmpeg4/files/patch-libavdevice_v4l2.c | 18 +
.../ffmpeg4/files/patch-libavfilter_vf__lensfun.c | 51 ++
multimedia/ffmpeg4/files/patch-libavformat_rtsp.c | 44 +
multimedia/ffmpeg4/files/patch-libavutil-common.h | 13 +
multimedia/ffmpeg4/files/patch-libavutil-x86-asm.h | 11 +
.../ffmpeg4/files/patch-libavutil_hwcontext__drm.c | 24 +
.../files/patch-libswscale_ppc_yuv2rgb__altivec.c | 15 +
multimedia/ffmpeg4/files/patch-svtav1 | 437 ++++++++++
multimedia/ffmpeg4/files/patch-vmaf | 951 +++++++++++++++++++++
multimedia/ffmpeg4/override.mk | 8 +
multimedia/ffmpeg4/pkg-descr | 3 +
multimedia/ffmpeg4/pkg-plist | 220 +++++
17 files changed, 2497 insertions(+)
diff --git a/multimedia/Makefile b/multimedia/Makefile
index 7875ba189f9b..c3103e9e153b 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -60,6 +60,7 @@
SUBDIR += ffaudioconverter
SUBDIR += ffdec
SUBDIR += ffmpeg
+ SUBDIR += ffmpeg4
SUBDIR += ffmpegthumbnailer
SUBDIR += ffms2
SUBDIR += ffnvcodec-headers
diff --git a/multimedia/ffmpeg4/Makefile b/multimedia/ffmpeg4/Makefile
new file mode 100644
index 000000000000..94be714a6010
--- /dev/null
+++ b/multimedia/ffmpeg4/Makefile
@@ -0,0 +1,655 @@
+PORTNAME= ffmpeg
+PORTVERSION= 4.4.3
+CATEGORIES= multimedia audio net
+MASTER_SITES= https://ffmpeg.org/releases/
+PKGNAMESUFFIX= 4
+
+MAINTAINER= multimedia@FreeBSD.org
+COMMENT= Realtime audio/video encoder/converter and streaming server (legacy 4.* series)
+WWW= https://ffmpeg.org/
+
+LICENSE= GPLv2+ LGPL21+
+LICENSE_COMB= multi
+
+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
+
+HAS_CONFIGURE= yes
+CONFIGURE_LOG= ffbuild/config.log
+USES= compiler:c11 cpe gmake localbase:ldflags perl5 \
+ pkgconfig shebangfix tar:xz
+USE_LDCONFIG= yes
+USE_PERL5= build
+SHEBANG_FILES= doc/texi2pod.pl
+NOPRECIOUSMAKEVARS= yes # ARCH
+
+.ifdef PKGNAMESUFFIX
+PORTSCOUT= limit:^4\.
+PREFIX= ${LOCALBASE}/${PKGBASE} # avoid conflict with the default
+.endif
+
+# Option CHROMAPRINT disabled, it cannot work and people are baffled.
+OPTIONS_DEFINE= ALSA AMR_NB AMR_WB AOM ARIBB24 ASM ASS BS2B CACA CDIO \
+ CODEC2 DAV1D DAVS2 DC1394 DEBUG DOCS DRM FDK_AAC FLITE \
+ FONTCONFIG FREETYPE FREI0R FRIBIDI GLSLANG GME GSM ICONV ILBC \
+ JACK KLVANC KVAZAAR LADSPA LAME LENSFUN LIBBLURAY LIBRSVG2 \
+ LIBXML2 LTO LV2 MODPLUG MYSOFA NETWORK NVENC OPENAL OPENCL OPENGL \
+ OPENH264 OPENJPEG OPENMPT OPENVINO OPTIMIZED_CFLAGS OPUS POCKETSPHINX \
+ PULSEAUDIO RAV1E RABBITMQ RIST RTCPU RUBBERBAND SDL SMB SNAPPY \
+ SNDIO SOXR SPEEX SRT SSH SVTAV1 SVTHEVC SVTVP9 TENSORFLOW \
+ TESSERACT THEORA TWOLAME UAVS3D V4L VAAPI VAPOURSYNTH VDPAU VIDSTAB \
+ VMAF VO_AMRWBENC VORBIS VPX VULKAN WEBP X264 X265 \
+ XAVS2 XCB XVID XVIDEO ZIMG ZMQ ZVBI
+# intel-media-sdk only for i386/amd64
+OPTIONS_DEFINE_amd64= MFX
+OPTIONS_DEFINE_i386= MFX
+
+OPTIONS_DEFAULT= AOM ASM ASS DAV1D DRM FONTCONFIG FREETYPE FREI0R GMP \
+ GNUTLS ICONV LAME LIBXML2 NETWORK OPTIMIZED_CFLAGS OPUS \
+ RTCPU SVTAV1 V4L VAAPI VDPAU VMAF VORBIS VPX WEBP X264 \
+ X265 XCB
+OPTIONS_DEFAULT_amd64= NVENC
+OPTIONS_DEFAULT_i386= NVENC
+
+# i386 is too register-starved for LTO (PR257124)
+OPTIONS_EXCLUDE_i386= LTO
+
+.if !exists(${.CURDIR:H:H}/multimedia/davs2)
+# https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/5985a1bf7233
+OPTIONS_EXCLUDE+= DAVS2
+.endif
+
+.if !exists(${.CURDIR:H:H}/multimedia/uavs3d)
+# https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/c952db9d68d3
+OPTIONS_EXCLUDE+= UAVS3D
+.endif
+
+.if !exists(${.CURDIR:H:H}/multimedia/xavs2)
+# https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/85a921f4618
+OPTIONS_EXCLUDE+= XAVS2
+.endif
+
+.if !exists(${.CURDIR:H:H}/multimedia/klvanc)
+# https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/8732dfa9954
+OPTIONS_EXCLUDE+= KLVANC
+.endif
+
+.if !exists(${.CURDIR:H:H}/science/openvino)
+# https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/ff37ebaf30e6
+OPTIONS_EXCLUDE+= OPENVINO
+.endif
+
+OPTIONS_RADIO= RTMP SSL
+OPTIONS_RADIO_RTMP= GCRYPT GMP LIBRTMP
+OPTIONS_RADIO_SSL= GNUTLS MBEDTLS OPENSSL
+OPTIONS_GROUP= LICENSE
+OPTIONS_GROUP_LICENSE= GPL3 NONFREE
+
+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
+DAVS2_DESC= AVS2 decoding via libdavs2
+DC1394_DESC= IIDC-1394 grabbing using libdc1394
+DRM_DESC= KMS grabbing using libdrm
+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)
+ILBC_DESC= Internet Low Bit Rate codec
+KLVANC_DESC= Kernel Labs VANC processing
+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
+OPENVINO_DESC= OpenVINO as a DNN module backend for DNN based filters like dnn_processing
+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
+SRT_DESC= Haivision SRT protocol via libsrt
+SVTAV1_DESC= AV1 encoding via SVT-AV1
+SVTHEVC_DESC= HEVC encoding via SVT-HEVC
+SVTVP9_DESC= VP9 encoding via SVT-VP9
+LIBRTMP_DESC= ${RTMP_DESC} via librtmp
+TENSORFLOW_DESC=TensorFlow as a DNN module backend for DNN based filters like sr
+TESSERACT_DESC= Optical Character Recognition via Tesseract
+THEORA_DESC= Encoding support for theora via libtheora
+UAVS3D_DESC= AVS3 decoding via libuavs3d
+VAPOURSYNTH_DESC= VapourSynth demuxer
+VIDSTAB_DESC= Video stabilization filter
+VMAF_DESC= VMAF filter via libvmaf
+VULKAN_DESC= Vulkan filters
+XAVS2_DESC= AVS2 encoding via libxavs2
+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
+
+OPTIONS_SUB= yes
+
+# 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
+AOM_LIB_DEPENDS= libaom.so:multimedia/aom
+AOM_CONFIGURE_ENABLE= libaom
+
+# arib
+ARIBB24_LIB_DEPENDS= libaribb24.so:multimedia/aribb24
+ARIBB24_CONFIGURE_ENABLE= libaribb24
+
+# asm support
+ASM_CONFIGURE_ENABLE= asm
+
+# ass
+ASS_LIB_DEPENDS= libass.so:multimedia/libass
+ASS_CONFIGURE_ENABLE= libass
+
+# bs2b
+BS2B_LIB_DEPENDS= libbs2b.so:audio/libbs2b
+BS2B_CONFIGURE_ENABLE= libbs2b
+
+# caca
+CACA_LIB_DEPENDS= libcaca.so:graphics/libcaca
+CACA_CONFIGURE_ENABLE= libcaca
+
+# 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
+CODEC2_LIB_DEPENDS= libcodec2.so:audio/codec2
+CODEC2_CONFIGURE_ENABLE= libcodec2
+
+# dav1d
+DAV1D_LIB_DEPENDS= libdav1d.so:multimedia/dav1d
+DAV1D_CONFIGURE_ENABLE= libdav1d
+
+# davs2
+DAVS2_LIB_DEPENDS= libdavs2.so:multimedia/davs2
+DAVS2_CONFIGURE_ENABLE= libdavs2
+
+# dc1394
+DC1394_LIB_DEPENDS= libdc1394.so:multimedia/libdc1394
+DC1394_CONFIGURE_ENABLE= libdc1394
+
+# debugging
+DEBUG_CONFIGURE_ON= --disable-stripping
+DEBUG_CONFIGURE_OFF= --disable-debug
+
+# docs
+DOCS_BUILD_DEPENDS= texi2html:textproc/texi2html
+DOCS_CONFIGURE_ENABLE= htmlpages
+
+# drm
+DRM_LIB_DEPENDS= libdrm.so:graphics/libdrm
+DRM_CONFIGURE_ENABLE= libdrm
+
+# fdk_aac
+FDK_AAC_LIB_DEPENDS= libfdk-aac.so:audio/fdk-aac
+FDK_AAC_CONFIGURE_ENABLE= libfdk-aac
+FDK_AAC_IMPLIES= NONFREE
+
+# flite
+FLITE_LIB_DEPENDS= libflite.so:audio/flite
+FLITE_CONFIGURE_ENABLE= libflite
+
+# fontconfig
+FONTCONFIG_LIB_DEPENDS= libfontconfig.so:x11-fonts/fontconfig
+FONTCONFIG_CONFIGURE_ENABLE= fontconfig
+
+# freetype
+FREETYPE_LIB_DEPENDS= libfreetype.so:print/freetype2
+FREETYPE_CONFIGURE_ENABLE= libfreetype
+
+# frei0r
+FREI0R_BUILD_DEPENDS= ${LOCALBASE}/include/frei0r.h:graphics/frei0r
+FREI0R_CONFIGURE_ENABLE= frei0r
+
+# fribidi
+FRIBIDI_LIB_DEPENDS= libfribidi.so:converters/fribidi
+FRIBIDI_CONFIGURE_ENABLE= libfribidi
+
+# gcrypt
+GCRYPT_LIB_DEPENDS= libgcrypt.so:security/libgcrypt
+GCRYPT_CONFIGURE_ENABLE= gcrypt
+
+# glslang
+GLSLANG_BUILD_DEPENDS= glslang>0:graphics/glslang \
+ spirv-tools>0:graphics/spirv-tools
+GLSLANG_CONFIGURE_ENABLE= libglslang
+GLSLANG_LDFLAGS= -lm
+
+# gnutls
+GNUTLS_LIB_DEPENDS= libgnutls.so:security/gnutls
+GNUTLS_CONFIGURE_ENABLE= gnutls
+
+# gme
+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
+GSM_LIB_DEPENDS= libgsm.so:audio/gsm
+GSM_CONFIGURE_ENABLE= libgsm
+
+# iconv
+ICONV_USES= iconv
+ICONV_CONFIGURE_ENABLE= iconv
+
+# ilbc
+ILBC_LIB_DEPENDS= libilbc.so:net/libilbc
+ILBC_CONFIGURE_ENABLE= libilbc
+
+# jack
+JACK_LIB_DEPENDS= libjack.so:audio/jack
+JACK_CONFIGURE_ENABLE= libjack
+
+# klvanc
+KLVANC_LIB_DEPENDS= libklvanc.so:multimedia/libklvanc
+KLVANC_CONFIGURE_ENABLE= libklvanc
+
+# kvazaar
+KVAZAAR_LIB_DEPENDS= libkvazaar.so:multimedia/kvazaar
+KVAZAAR_CONFIGURE_ENABLE= libkvazaar
+
+# ladspa
+LADSPA_BUILD_DEPENDS= ${LOCALBASE}/include/ladspa.h:audio/ladspa
+LADSPA_RUN_DEPENDS= ${LOCALBASE}/lib/ladspa/amp.so:audio/ladspa
+LADSPA_CONFIGURE_ENABLE= ladspa
+
+# lame
+LAME_LIB_DEPENDS= libmp3lame.so:audio/lame
+LAME_CONFIGURE_ENABLE= libmp3lame
+
+# lensfun
+LENSFUN_LIB_DEPENDS= liblensfun.so:graphics/lensfun
+LENSFUN_CONFIGURE_ENABLE= liblensfun
+
+# libbluray
+LIBBLURAY_LIB_DEPENDS= libbluray.so:multimedia/libbluray
+LIBBLURAY_CONFIGURE_ENABLE= libbluray
+
+# librsvg
+LIBRSVG2_USES= gnome
+LIBRSVG2_USE= GNOME=cairo,librsvg2
+LIBRSVG2_CONFIGURE_ENABLE= librsvg
+
+# libxml
+LIBXML2_LIB_DEPENDS= libxml2.so:textproc/libxml2
+LIBXML2_CONFIGURE_ENABLE= libxml2
+
+# lto
+LTO_CONFIGURE_ENABLE= lto
+
+# lv2
+LV2_BUILD_DEPENDS= lv2>0:audio/lv2
+LV2_LIB_DEPENDS= liblilv-0.so:audio/lilv
+LV2_CONFIGURE_ENABLE= lv2
+
+# libv4l
+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
+
+# mbedtls
+MBEDTLS_LIB_DEPENDS= libmbedtls.so:security/mbedtls
+MBEDTLS_CONFIGURE_ENABLE= mbedtls
+
+# mfx
+MFX_LIB_DEPENDS= libmfx.so:multimedia/intel-media-sdk
+MFX_CONFIGURE_ENABLE= libmfx
+
+# modplug
+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
+
+# nvenc
+NVENC_BUILD_DEPENDS= ${LOCALBASE}/include/ffnvcodec/nvEncodeAPI.h:multimedia/ffnvcodec-headers
+NVENC_CONFIGURE_ENABLE= nvenc
+
+# OpenAL
+OPENAL_LIB_DEPENDS= libopenal.so:audio/openal-soft
+OPENAL_CONFIGURE_ENABLE= openal
+
+# opencl
+OPENCL_BUILD_DEPENDS= ${LOCALBASE}/include/CL/opencl.h:devel/opencl
+OPENCL_LIB_DEPENDS= libOpenCL.so:devel/ocl-icd
+OPENCL_CONFIGURE_ENABLE= opencl
+
+# opengl
+OPENGL_USES= gl
+OPENGL_USE= GL=gl
+OPENGL_CONFIGURE_ENABLE= opengl
+
+# openh264
+OPENH264_LIB_DEPENDS= libopenh264.so:multimedia/openh264
+OPENH264_CONFIGURE_ENABLE= libopenh264
+
+# openjpeg
+OPENJPEG_LIB_DEPENDS= libopenjp2.so:graphics/openjpeg
+OPENJPEG_CONFIGURE_ENABLE= libopenjpeg
+
+# openmpt
+OPENMPT_LIB_DEPENDS= libopenmpt.so:audio/libopenmpt
+OPENMPT_CONFIGURE_ENABLE= libopenmpt
+
+# openssl/libtls
+OPENSSL_USES= ssl
+OPENSSL_CONFIGURE_ENABLE= ${"${SSL_DEFAULT:Mlibressl*}"!="":?libtls:openssl}
+OPENSSL_IMPLIES= NONFREE
+
+# openvino
+OPENVINO_LIB_DEPENDS= libinference_engine_c_api.so:science/openvino
+OPENVINO_CONFIGURE_ENABLE= libopenvino
+
+# optimizations
+OPTIMIZED_CFLAGS_CONFIGURE_ENABLE= optimizations
+
+# opus
+OPUS_LIB_DEPENDS= libopus.so:audio/opus
+OPUS_CONFIGURE_ENABLE= libopus
+
+# pocketsphinx
+POCKETSPHINX_LIB_DEPENDS= libpocketsphinx.so:audio/pocketsphinx
+POCKETSPHINX_CONFIGURE_ENABLE= pocketsphinx
+POCKETSPHINX_BROKEN= pocketsphinx < 5prealpha is not supported
+
+# pulseaudio
+PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio
+PULSEAUDIO_CONFIGURE_ENABLE= libpulse
+
+# rav1e
+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
+RIST_LIB_DEPENDS= librist.so:multimedia/librist
+RIST_CONFIGURE_ENABLE= librist
+
+# rubberband
+RUBBERBAND_LIB_DEPENDS= librubberband.so:audio/rubberband
+RUBBERBAND_CONFIGURE_ENABLE= librubberband
+
+# rtcpu
+RTCPU_CONFIGURE_ENABLE= runtime-cpudetect
+
+# rtmp
+LIBRTMP_LIB_DEPENDS= librtmp.so:multimedia/librtmp
+LIBRTMP_CONFIGURE_ENABLE= librtmp
+
+# sdl
+SDL_USES= sdl
+SDL_USE= SDL=sdl2
+SDL_CONFIGURE_ENABLE= sdl2
+
+# smbclient
+SMB_USES= samba:lib
+SMB_CONFIGURE_ENABLE= libsmbclient
+SMB_IMPLIES= GPL3
+
+# snappy
+SNAPPY_LIB_DEPENDS= libsnappy.so:archivers/snappy
+SNAPPY_CONFIGURE_ENABLE= libsnappy
+
+# sndio
+SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio
+SNDIO_CONFIGURE_ENABLE= sndio
+
+# soxr
+SOXR_LIB_DEPENDS= libsoxr.so:audio/libsoxr
+SOXR_CONFIGURE_ENABLE= libsoxr
+
+# speex
+SPEEX_LIB_DEPENDS= libspeex.so:audio/speex
+SPEEX_CONFIGURE_ENABLE= libspeex
+
+# ssh
+SSH_LIB_DEPENDS= libssh.so:security/libssh
+SSH_CONFIGURE_ENABLE= libssh
+
+# srt
+SRT_LIB_DEPENDS= libsrt.so:www/srt
+SRT_CONFIGURE_ENABLE= libsrt
+
+# svt-av1
+SVTAV1_LIB_DEPENDS= libSvtAv1Enc.so:multimedia/svt-av1
+SVTAV1_CONFIGURE_ON= --enable-libsvtav1
+
+# svt-hevc
+SVTHEVC_LIB_DEPENDS= libSvtHevcEnc.so:multimedia/svt-hevc
+SVTHEVC_CONFIGURE_ON= --enable-libsvthevc
+SVTHEVC_PATCH_SITES= https://github.com/OpenVisualCloud/SVT-HEVC/raw/v1.5.0-3-g86b58f77/ffmpeg_plugin/:svthevc
+SVTHEVC_PATCHFILES= 0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch:-p1:svthevc \
+ 0002-doc-Add-libsvt_hevc-encoder-docs.patch:-p1:svthevc
+.if make(makesum)
+.MAKEFLAGS: WITH+=SVTHEVC
+.endif
+
+# svt-vp9
+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-4-gabd5c59/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
+
+# tesseract
+TESSERACT_LIB_DEPENDS= libtesseract.so:graphics/tesseract
+TESSERACT_CONFIGURE_ENABLE= libtesseract
+
+# theora
+THEORA_LIB_DEPENDS= libtheora.so:multimedia/libtheora
+THEORA_CONFIGURE_ENABLE= libtheora
+
+# twolame
+TWOLAME_LIB_DEPENDS= libtwolame.so:audio/twolame
+TWOLAME_CONFIGURE_ENABLE= libtwolame
+
+# uavs3d
+UAVS3D_LIB_DEPENDS= libuavs3d.so:multimedia/uavs3d
+UAVS3D_CONFIGURE_ENABLE= libuavs3d
+
+# vaapi
+VAAPI_LIB_DEPENDS= libva.so:multimedia/libva
+VAAPI_CONFIGURE_ENABLE= vaapi
+
+# vapoursynth
+VAPOURSYNTH_LIB_DEPENDS= libvapoursynth-script.so:multimedia/vapoursynth
+VAPOURSYNTH_CONFIGURE_ENABLE= vapoursynth
+
+# vdpau
+VDPAU_USES= xorg
+VDPAU_USE= XORG=x11
+VDPAU_LIB_DEPENDS= libvdpau.so:multimedia/libvdpau
+VDPAU_CONFIGURE_ENABLE= vdpau
+
+# vmaf
+VMAF_LIB_DEPENDS= libvmaf.so:multimedia/vmaf
+VMAF_CONFIGURE_ENABLE= libvmaf
+
+# vo-amrwbenc
+VO_AMRWBENC_LIB_DEPENDS= libvo-amrwbenc.so:audio/vo-amrwbenc
+VO_AMRWBENC_CONFIGURE_ENABLE= libvo-amrwbenc
+VO_AMRWBENC_IMPLIES= GPL3
+
+# vid.stab
+VIDSTAB_LIB_DEPENDS= libvidstab.so:multimedia/vid.stab
+VIDSTAB_CONFIGURE_ENABLE= libvidstab
+
+# vorbis
+VORBIS_LIB_DEPENDS= libvorbisenc.so:audio/libvorbis
+VORBIS_CONFIGURE_ENABLE= libvorbis
+
+# vp8
+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
+VULKAN_IMPLIES= GLSLANG
+
+# webp
+WEBP_LIB_DEPENDS= libwebp.so:graphics/webp
+WEBP_CONFIGURE_ENABLE= libwebp
+
+# x264
+X264_LIB_DEPENDS= libx264.so:multimedia/libx264
+X264_CONFIGURE_ENABLE= libx264
+
+# x265
+X265_LIB_DEPENDS= libx265.so:multimedia/x265
+X265_CONFIGURE_ENABLE= libx265
+
+# xavs2
+XAVS2_LIB_DEPENDS= libxavs2.so:multimedia/xavs2
+XAVS2_CONFIGURE_ENABLE= libxavs2
+
+# xcb
+XCB_USES= xorg
+XCB_USE= XORG=xcb
+XCB_CONFIGURE_ENABLE= libxcb
+
+# xvid
+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
+
+# zimg
+ZIMG_LIB_DEPENDS= libzimg.so:graphics/sekrit-twc-zimg
+ZIMG_CONFIGURE_ENABLE= libzimg
+
+# zmq
+ZMQ_LIB_DEPENDS= libzmq.so:net/libzmq${ZMQ_VERSION}
+ZMQ_CONFIGURE_ENABLE= libzmq
+ZMQ_VERSION?= 4
+
+# zvbi
+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
+
+INSTALL_TARGET= install-progs install-doc install-data \
+ install-libs install-headers install-examples
+
+DATADIR= ${PREFIX}/share/${PORTNAME}${PKGNAMESUFFIX}
+DOCSDIR= ${PREFIX}/share/doc/${PORTNAME}${PKGNAMESUFFIX}
+MAKE_ENV+= V=1
+LDFLAGS_aarch64=-Wl,-z,notext
+LDFLAGS_armv6= -Wl,-z,notext
+LDFLAGS_armv7= -Wl,-z,notext
+LDFLAGS_i386= -Wl,-z,notext
+
+CONFIGURE_ARGS+=--prefix="${PREFIX}" \
+ --mandir="${PREFIX}/man" \
+ --datadir="${DATADIR}" \
+ --docdir="${DOCSDIR}" \
+ --pkgconfigdir="${PREFIX}/libdata/pkgconfig" \
+ --disable-static \
+ --disable-libcelt \
+ --enable-shared \
+ --enable-pic \
+ --enable-gpl \
+ --enable-avresample \
+ --cc="${CC}" \
+ --cxx="${CXX}"
+
+DOC_FILES= Changelog CREDITS INSTALL.md LICENSE.md MAINTAINERS \
+ README.md RELEASE_NOTES
+# under doc subdirectory
+DOC_DOCFILES= APIchanges *.txt
+PORTDOCS= *
+
+.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
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == powerpc64 && ${PORT_OPTIONS:MLTO} && ${CHOSEN_COMPILER_TYPE} == clang
+USE_GCC= yes
+.endif
+
+post-install:
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} \
+ "${DOC_FILES}" ${STAGEDIR}${DOCSDIR})
+ (cd ${WRKSRC}/doc && ${COPYTREE_SHARE} \
+ "${DOC_DOCFILES}" ${STAGEDIR}${DOCSDIR})
+
+.include <bsd.port.post.mk>
diff --git a/multimedia/ffmpeg4/distinfo b/multimedia/ffmpeg4/distinfo
new file mode 100644
index 000000000000..da3325c05deb
--- /dev/null
+++ b/multimedia/ffmpeg4/distinfo
@@ -0,0 +1,9 @@
+TIMESTAMP = 1665342284
+SHA256 (ffmpeg-4.4.3.tar.xz) = 6c5b6c195e61534766a0b5fe16acc919170c883362612816d0a1c7f4f947006e
+SIZE (ffmpeg-4.4.3.tar.xz) = 9566020
+SHA256 (0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch) = 376ea23e9d876390fbca936c80cb437bb9daa6232ff65df0ea91673e18b739ff
+SIZE (0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch) = 24259
+SHA256 (0002-doc-Add-libsvt_hevc-encoder-docs.patch) = d16589efc4be2602a9f436e9938cfee0cc7b5ccd7a4a6b41c0c9a59ae0859fda
+SIZE (0002-doc-Add-libsvt_hevc-encoder-docs.patch) = 5336
+SHA256 (master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch) = b7d722dfce20b73e9d5c73d55ffe041bbdc92a3c4a5c5d766b6b3040671b4052
+SIZE (master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch) = 33497
diff --git a/multimedia/ffmpeg4/files/patch-configure b/multimedia/ffmpeg4/files/patch-configure
new file mode 100644
index 000000000000..760c50b8e912
--- /dev/null
+++ b/multimedia/ffmpeg4/files/patch-configure
@@ -0,0 +1,26 @@
+--- configure.orig 2022-10-09 19:04:43 UTC
++++ configure
+@@ -3784,13 +3784,7 @@ host_os=$target_os_default
+ host_os=$target_os_default
+
+ # machine
+-if test "$target_os_default" = aix; then
+- arch_default=$(uname -p)
+- strip_default="strip -X32_64"
+- nm_default="nm -g -X32_64"
+-else
+- arch_default=$(uname -m)
+-fi
++arch_default=$(uname -p)
+ cpu="generic"
+ intrinsics="none"
+
+@@ -6758,7 +6752,7 @@ if enabled x86; then
+
+ if enabled x86; then
+ case $target_os in
+- mingw32*|mingw64*|win32|win64|linux|cygwin*)
++ freebsd|mingw32*|mingw64*|win32|win64|linux|cygwin*)
+ ;;
+ *)
+ disable ffnvcodec cuvid nvdec nvenc
diff --git a/multimedia/ffmpeg4/files/patch-doc-Makefile b/multimedia/ffmpeg4/files/patch-doc-Makefile
new file mode 100644
index 000000000000..52ab4033ad98
--- /dev/null
+++ b/multimedia/ffmpeg4/files/patch-doc-Makefile
@@ -0,0 +1,11 @@
+--- doc/Makefile.orig 2015-06-19 20:44:35 UTC
++++ doc/Makefile
+@@ -145,7 +145,7 @@ install-html: $(HTMLPAGES)
+ endif
+
+ ifdef CONFIG_MANPAGES
+-install-progs-$(CONFIG_DOC): install-man
++#install-progs-$(CONFIG_DOC): install-man
+
+ install-man: $(MANPAGES)
+ $(Q)mkdir -p "$(MANDIR)/man1"
diff --git a/multimedia/ffmpeg4/files/patch-libavdevice_v4l2.c b/multimedia/ffmpeg4/files/patch-libavdevice_v4l2.c
new file mode 100644
index 000000000000..8518fadce3af
--- /dev/null
+++ b/multimedia/ffmpeg4/files/patch-libavdevice_v4l2.c
@@ -0,0 +1,18 @@
+- ioctl() prototype on BSDs follows Version 7 AT&T UNIX
+
+--- libavdevice/v4l2.c.orig 2019-04-21 04:37:17 UTC
++++ libavdevice/v4l2.c
+@@ -95,10 +95,10 @@ struct video_data {
+ int (*open_f)(const char *file, int oflag, ...);
+ int (*close_f)(int fd);
+ int (*dup_f)(int fd);
+-#ifdef __GLIBC__
+- int (*ioctl_f)(int fd, unsigned long int request, ...);
+-#else
++#if defined(__sun) || defined(__BIONIC__) || defined(__musl__) /* POSIX-like */
+ int (*ioctl_f)(int fd, int request, ...);
++#else
++ int (*ioctl_f)(int fd, unsigned long int request, ...);
+ #endif
+ ssize_t (*read_f)(int fd, void *buffer, size_t n);
+ void *(*mmap_f)(void *start, size_t length, int prot, int flags, int fd, int64_t offset);
diff --git a/multimedia/ffmpeg4/files/patch-libavfilter_vf__lensfun.c b/multimedia/ffmpeg4/files/patch-libavfilter_vf__lensfun.c
new file mode 100644
index 000000000000..805d07687521
--- /dev/null
+++ b/multimedia/ffmpeg4/files/patch-libavfilter_vf__lensfun.c
@@ -0,0 +1,51 @@
+Partially revert https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/8b78eb312de9
+until graphics/lensfun is updated to a version that contains
+https://github.com/lensfun/lensfun/commit/b135e05d729d
+
+--- libavfilter/vf_lensfun.c.orig 2021-04-08 21:28:40 UTC
++++ libavfilter/vf_lensfun.c
+@@ -222,20 +222,39 @@ static int config_props(AVFilterLink *inlink)
+
+ if (!lensfun->modifier) {
+ if (lensfun->camera && lensfun->lens) {
+- lensfun->modifier = lf_modifier_create(lensfun->lens,
++ lensfun->modifier = lf_modifier_create(
++#if (LF_VERSION > 0x35F00)
++ lensfun->lens,
+ lensfun->focal_length,
++#endif
+ lensfun->camera->CropFactor,
+ inlink->w,
+ inlink->h, LF_PF_U8, lensfun->reverse);
+ if (lensfun->mode & VIGNETTING)
+- lf_modifier_enable_vignetting_correction(lensfun->modifier, lensfun->aperture, lensfun->focus_distance);
++ lf_modifier_enable_vignetting_correction(lensfun->modifier,
++#if (LF_VERSION <= 0x35F00)
++ lensfun->lens, lensfun->focal_length,
++#endif
++ lensfun->aperture, lensfun->focus_distance);
+ if (lensfun->mode & GEOMETRY_DISTORTION) {
+- lf_modifier_enable_distortion_correction(lensfun->modifier);
+- lf_modifier_enable_projection_transform(lensfun->modifier, lensfun->target_geometry);
++ lf_modifier_enable_distortion_correction(lensfun->modifier,
++#if (LF_VERSION <= 0x35F00)
++ lensfun->lens, lensfun->focal_length
++#endif
++ );
++ lf_modifier_enable_projection_transform(lensfun->modifier,
++#if (LF_VERSION <= 0x35F00)
++ lensfun->lens, lensfun->focal_length,
++#endif
++ lensfun->target_geometry);
+ lf_modifier_enable_scaling(lensfun->modifier, lensfun->scale);
+ }
+ if (lensfun->mode & SUBPIXEL_DISTORTION)
+- lf_modifier_enable_tca_correction(lensfun->modifier);
++ lf_modifier_enable_tca_correction(lensfun->modifier,
++#if (LF_VERSION <= 0x35F00)
++ lensfun->lens, lensfun->focal_length
++#endif
++ );
+ } else {
+ // lensfun->camera and lensfun->lens should have been initialized
+ return AVERROR_BUG;
diff --git a/multimedia/ffmpeg4/files/patch-libavformat_rtsp.c b/multimedia/ffmpeg4/files/patch-libavformat_rtsp.c
new file mode 100644
index 000000000000..7cd751dbd79c
--- /dev/null
+++ b/multimedia/ffmpeg4/files/patch-libavformat_rtsp.c
@@ -0,0 +1,44 @@
+--- libavformat/rtsp.c.orig 2016-10-27 16:17:40 UTC
++++ libavformat/rtsp.c
+@@ -1614,7 +1614,12 @@ int ff_rtsp_make_setup_request(AVFormatC
+ }
+ if (ttl > 0)
+ snprintf(optbuf, sizeof(optbuf), "?ttl=%d", ttl);
+- getnameinfo((struct sockaddr*) &addr, sizeof(addr),
++ getnameinfo((struct sockaddr*) &addr,
++#if HAVE_STRUCT_SOCKADDR_SA_LEN
++ ((struct sockaddr*) &addr)->sa_len,
++#else
++ sizeof(addr),
++#endif
+ namebuf, sizeof(namebuf), NULL, 0, NI_NUMERICHOST);
+ ff_url_join(url, sizeof(url), "rtp", NULL, namebuf,
+ port, "%s", optbuf);
+@@ -1830,8 +1835,13 @@ redirect:
+ goto fail;
+ }
+ if (!getpeername(tcp_fd, (struct sockaddr*) &peer, &peer_len)) {
+- getnameinfo((struct sockaddr*) &peer, peer_len, host, sizeof(host),
+- NULL, 0, NI_NUMERICHOST);
++ getnameinfo((struct sockaddr*) &peer,
++#if HAVE_STRUCT_SOCKADDR_SA_LEN
++ ((struct sockaddr*) &peer)->sa_len,
++#else
++ peer_len,
++#endif
++ host, sizeof(host), NULL, 0, NI_NUMERICHOST);
+ }
+
+ /* request options supported by the server; this also detects server
+@@ -2310,7 +2320,11 @@ static int sdp_read_header(AVFormatConte
+ AVDictionary *opts = map_to_opts(rt);
+
+ err = getnameinfo((struct sockaddr*) &rtsp_st->sdp_ip,
++#if HAVE_STRUCT_SOCKADDR_SA_LEN
++ ((struct sockaddr*) &rtsp_st->sdp_ip)->sa_len,
++#else
+ sizeof(rtsp_st->sdp_ip),
++#endif
+ namebuf, sizeof(namebuf), NULL, 0, NI_NUMERICHOST);
+ if (err) {
+ av_log(s, AV_LOG_ERROR, "getnameinfo: %s\n", gai_strerror(err));
diff --git a/multimedia/ffmpeg4/files/patch-libavutil-common.h b/multimedia/ffmpeg4/files/patch-libavutil-common.h
new file mode 100644
index 000000000000..2c8c84e6d372
--- /dev/null
+++ b/multimedia/ffmpeg4/files/patch-libavutil-common.h
@@ -0,0 +1,13 @@
+--- libavutil/common.h.orig 2015-06-19 20:44:53 UTC
++++ libavutil/common.h
+@@ -49,6 +49,10 @@
+ # define AV_NE(be, le) (le)
+ #endif
+
++#ifndef UINT64_C
++#define UINT64_C(c) (c ## UL)
++#endif
++
+ //rounded division & shift
+ #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
+ /* assume b>0 */
diff --git a/multimedia/ffmpeg4/files/patch-libavutil-x86-asm.h b/multimedia/ffmpeg4/files/patch-libavutil-x86-asm.h
new file mode 100644
index 000000000000..71e31a029955
--- /dev/null
+++ b/multimedia/ffmpeg4/files/patch-libavutil-x86-asm.h
@@ -0,0 +1,11 @@
+--- libavutil/x86/asm.h.orig 2015-06-19 20:44:54 UTC
++++ libavutil/x86/asm.h
+@@ -71,7 +71,7 @@ typedef int32_t x86_reg;
+ typedef int x86_reg;
+ #endif
+
+-#define HAVE_7REGS (ARCH_X86_64 || (HAVE_EBX_AVAILABLE && HAVE_EBP_AVAILABLE))
++#define HAVE_7REGS (ARCH_X86_64 || (HAVE_EBX_AVAILABLE && HAVE_EBP_AVAILABLE && !defined(__clang__)))
+ #define HAVE_6REGS (ARCH_X86_64 || (HAVE_EBX_AVAILABLE || HAVE_EBP_AVAILABLE))
+
+ #if ARCH_X86_64 && defined(PIC)
diff --git a/multimedia/ffmpeg4/files/patch-libavutil_hwcontext__drm.c b/multimedia/ffmpeg4/files/patch-libavutil_hwcontext__drm.c
new file mode 100644
index 000000000000..f5e186300975
--- /dev/null
+++ b/multimedia/ffmpeg4/files/patch-libavutil_hwcontext__drm.c
@@ -0,0 +1,24 @@
+drm-kmod doesn't expose uAPI yet, so bundle like Mesa
+
+--- libavutil/hwcontext_drm.c.orig 2022-07-22 17:58:39 UTC
++++ libavutil/hwcontext_drm.c
+@@ -28,6 +28,19 @@
+ #if HAVE_LINUX_DMA_BUF_H
+ #include <linux/dma-buf.h>
+ #include <sys/ioctl.h>
++#else // BSDs
++#undef HAVE_LINUX_DMA_BUF_H
++#define HAVE_LINUX_DMA_BUF_H 1
++#include <sys/ioctl.h>
++struct dma_buf_sync {
++ uint64_t flags;
++};
++#define DMA_BUF_BASE 'b'
++#define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync)
++#define DMA_BUF_SYNC_READ (1 << 0)
++#define DMA_BUF_SYNC_WRITE (2 << 0)
++#define DMA_BUF_SYNC_START (0 << 2)
++#define DMA_BUF_SYNC_END (1 << 2)
+ #endif
+
+ #include <drm.h>
diff --git a/multimedia/ffmpeg4/files/patch-libswscale_ppc_yuv2rgb__altivec.c b/multimedia/ffmpeg4/files/patch-libswscale_ppc_yuv2rgb__altivec.c
new file mode 100644
index 000000000000..38ff9087b842
--- /dev/null
+++ b/multimedia/ffmpeg4/files/patch-libswscale_ppc_yuv2rgb__altivec.c
@@ -0,0 +1,15 @@
+Error:
+libswscale/ppc/yuv2rgb_altivec.c:288:36: error: redeclaration of 'vec_xl' must have the 'overloadable' attribute
+static inline vector unsigned char vec_xl(signed long long offset, const ubyte *addr)
+
+--- libswscale/ppc/yuv2rgb_altivec.c.orig 2021-04-08 21:28:40 UTC
*** 1659 LINES SKIPPED ***