Subject: [PATCH 10/30] gnu: Add ffmpeg-jami.

From: Jan Wielkiewicz <[email-masked]>
Date: Fri, 17 Apr 2020 02:34:13 +0200

---
 gnu/packages/jami.scm | 238 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 238 insertions(+)

diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
index 21872122e1..de60c8bb15 100644
--- a/gnu/packages/jami.scm
+++ b/gnu/packages/jami.scm
@@ -183,6 +183,244 @@
                 "selftest: pjlib-test pjlib-util-test pjmedia-test"))
              #t)))))))
 
+(define-public ffmpeg-jami
+  (package
+    (inherit ffmpeg)
+    (name "ffmpeg-jami")
+    (version "4.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.ffmpeg.org/ffmpeg.git")
+                    (commit "59da9dcd7ef6277e4e04998ced71b05a6083c635")))
+              (file-name (git-file-name "ffmpeg" version))
+              (sha256
+               (base32
+                "0cm58kd06lvslc7knnfajv5p63v4cc6502badjcic5m9izd03lz2"))))
+    (native-inputs
+     `(("savoir-faire-linux-patches" ,(jami-source))
+       ("libiconv" ,libiconv)
+       ,@(package-native-inputs ffmpeg)))
+    (arguments
+     (append
+      '(#:tests? #f)
+      (substitute-keyword-arguments (package-arguments ffmpeg)
+        ((#:configure-flags '())
+         (append '("--disable-everything"
+                   "--enable-zlib"
+                   "--enable-gpl"
+                   "--enable-swscale"
+                   "--enable-bsfs"
+                   "--disable-filters"
+                   "--disable-programs"
+                   "--disable-postproc"
+                   "--disable-protocols"
+                   "--enable-protocol=crypto"
+                   "--enable-protocol=file"
+                   "--enable-protocol=rtp"
+                   "--enable-protocol=srtp"
+                   "--enable-protocol=tcp"
+                   "--enable-protocol=udp"
+                   "--enable-protocol=unix"
+                   "--enable-protocol=pipe"
+		   ;; enable muxers/demuxers
+                   "--disable-demuxers"
+                   "--disable-muxers"
+                   "--enable-muxer=rtp"
+                   "--enable-muxer=g722"
+                   "--enable-muxer=h263"
+                   "--enable-muxer=h264"
+                   "--enable-muxer=hevc"
+                   "--enable-muxer=webm"
+                   "--enable-muxer=ogg"
+                   "--enable-muxer=pcm_s16be"
+                   "--enable-muxer=pcm_s16le"
+                   "--enable-demuxer=rtp"
+                   "--enable-demuxer=mjpeg"
+                   "--enable-demuxer=mjpeg_2000"
+                   "--enable-demuxer=mpegvideo"
+                   "--enable-demuxer=gif"
+                   "--enable-demuxer=image_jpeg_pipe"
+                   "--enable-demuxer=image_png_pipe"
+                   "--enable-demuxer=image_webp_pipe"
+                   "--enable-demuxer=matroska"
+                   "--enable-demuxer=m4v"
+                   "--enable-demuxer=mp3"
+                   "--enable-demuxer=ogg"
+                   "--enable-demuxer=flac"
+                   "--enable-demuxer=wav"
+                   "--enable-demuxer=ac3"
+                   "--enable-demuxer=g722"
+                   "--enable-demuxer=pcm_mulaw"
+                   "--enable-demuxer=pcm_alaw"
+                   "--enable-demuxer=pcm_s16be"
+                   "--enable-demuxer=pcm_s16le"
+                   "--enable-demuxer=h263"
+                   "--enable-demuxer=h264"
+                   "--enable-demuxer=hevc"
+		   ;; enable parsers
+                   "--enable-parser=h263"
+                   "--enable-parser=h264"
+                   "--enable-parser=mpeg4video"
+                   "--enable-parser=vp8"
+                   "--enable-parser=vp9"
+                   "--enable-parser=opus"
+		   ;; encoders/decoders
+                   "--enable-encoder=adpcm_g722"
+                   "--enable-decoder=adpcm_g722"
+                   "--enable-encoder=rawvideo"
+                   "--enable-decoder=rawvideo"
+                   "--enable-encoder=libx264"
+                   "--enable-decoder=h264"
+                   "--enable-encoder=pcm_alaw"
+                   "--enable-decoder=pcm_alaw"
+                   "--enable-encoder=pcm_mulaw"
+                   "--enable-decoder=pcm_mulaw"
+                   "--enable-encoder=mpeg4"
+                   "--enable-decoder=mpeg4"
+                   "--enable-encoder=libvpx_vp8"
+                   "--enable-decoder=vp8"
+                   "--enable-decoder=vp9"
+                   "--enable-encoder=h263"
+                   "--enable-encoder=h263p"
+                   "--enable-decoder=h263"
+                   "--enable-encoder=mjpeg"
+                   "--enable-decoder=mjpeg"
+                   "--enable-decoder=mjpegb"
+                   "--enable-libspeex"
+                   "--enable-libopus"
+                   "--enable-libvpx"
+                   "--enable-libx264"
+                   "--enable-encoder=libspeex"
+                   "--enable-decoder=libspeex"
+                   "--enable-encoder=libopus"
+                   "--enable-decoder=libopus"
+		   ;; decoders for ringtones and audio streaming
+                   "--enable-decoder=flac"
+                   "--enable-decoder=vorbis"
+                   "--enable-decoder=aac"
+                   "--enable-decoder=ac3"
+                   "--enable-decoder=eac3"
+                   "--enable-decoder=mp3"
+                   "--enable-decoder=pcm_u24be"
+                   "--enable-decoder=pcm_u24le"
+                   "--enable-decoder=pcm_u32be"
+                   "--enable-decoder=pcm_u32le"
+                   "--enable-decoder=pcm_u8"
+                   "--enable-decoder=pcm_f16le"
+                   "--enable-decoder=pcm_f24le"
+                   "--enable-decoder=pcm_f32be"
+                   "--enable-decoder=pcm_f32le"
+                   "--enable-decoder=pcm_f64be"
+                   "--enable-decoder=pcm_f64le"
+                   "--enable-decoder=pcm_s16be"
+                   "--enable-decoder=pcm_s16be_planar"
+                   "--enable-decoder=pcm_s16le"
+                   "--enable-decoder=pcm_s16le_planar"
+                   "--enable-decoder=pcm_s24be"
+                   "--enable-decoder=pcm_s24le"
+                   "--enable-decoder=pcm_s24le_planar"
+                   "--enable-decoder=pcm_s32be"
+                   "--enable-decoder=pcm_s32le"
+                   "--enable-decoder=pcm_s32le_planar"
+                   "--enable-decoder=pcm_s64be"
+                   "--enable-decoder=pcm_s64le"
+                   "--enable-decoder=pcm_s8"
+                   "--enable-decoder=pcm_s8_planar"
+                   "--enable-decoder=pcm_u16be"
+                   "--enable-decoder=pcm_u16le"
+		   ;; encoders/decoders for images
+                   "--enable-encoder=gif"
+                   "--enable-decoder=gif"
+                   "--enable-encoder=jpegls"
+                   "--enable-decoder=jpegls"
+                   "--enable-encoder=ljpeg"
+                   "--enable-decoder=jpeg2000"
+                   "--enable-encoder=png"
+                   "--enable-decoder=png"
+                   "--enable-encoder=bmp"
+                   "--enable-decoder=bmp"
+                   "--enable-encoder=tiff"
+                   "--enable-decoder=tiff"
+		   ;; filters
+                   "--enable-filter=scale"
+                   "--enable-filter=overlay"
+                   "--enable-filter=amix"
+                   "--enable-filter=amerge"
+                   "--enable-filter=aresample"
+                   "--enable-filter=format"
+                   "--enable-filter=aformat"
+                   "--enable-filter=fps"
+                   "--enable-filter=transpose"
+                   "--enable-filter=pad")
+		 ;; platform specific options
+                 (if (string-contains (%current-system) "linux")
+                     '("--enable-pic"
+                       "--extra-cxxflags=-fPIC --extra-cflags=-fPIC"
+                       "--target-os=linux"
+                       "--enable-indev=v4l2"
+                       "--enable-indev=xcbgrab"
+                       "--enable-vdpau"
+                       "--enable-hwaccel=h264_vdpau"
+                       "--enable-hwaccel=mpeg4_vdpau"
+                       "--enable-vaapi"
+                       "--enable-hwaccel=h264_vaapi"
+                       "--enable-hwaccel=mpeg4_vaapi"
+                       "--enable-hwaccel=h263_vaapi"
+                       "--enable-hwaccel=vp8_vaapi"
+                       "--enable-hwaccel=mjpeg_vaapi"
+                       "--enable-encoder=h264_vaapi"
+                       "--enable-encoder=vp8_vaapi"
+                       "--enable-encoder=mjpeg_vaapi"
+                       ))
+		 (cond ((string?= (%current-system) "i386")
+			'("--arch=x86"
+			  "--enable-cuvid"
+			  "--enable-ffnvcodec"
+			  "--enable-nvdec"
+			  "--enable-nvenc"
+			  "--enable-hwaccel=h264_nvdec"
+			  "--enable-hwaccel=hevc_nvdec"
+			  "--enable-hwaccel=vp8_nvdec"
+			  "--enable-hwaccel=mjpeg_nvdec"
+			  "--enable-encoder=h264_nvenc"
+			  "--enable-encoder=hevc_nvenc"))
+		       ((string?= (%current-system) "x86_64")
+			'("--arch=x86_64"
+			  "--enable-cuvid"
+			  "--enable-ffnvcodec"
+			  "--enable-nvdec"
+			  "--enable-nvenc"
+			  "--enable-hwaccel=h264_nvdec"
+			  "--enable-hwaccel=hevc_nvdec"
+			  "--enable-hwaccel=vp8_nvdec"
+			  "--enable-hwaccel=mjpeg_nvdec"
+			  "--enable-encoder=h264_nvenc"
+			  "--enable-encoder=hevc_nvenc"))
+		       ((string?= (%current-system) "aarch64-linux") '("--arch=aarch64"))
+		       ((string?= (%current-system) "arm64-linux") '("--arch=aarch64"))
+		       ((string?= (%current-system) "arm") '("--arch=arm"))
+		       (else '()))))
+        ((#:phases phases)
+         `(modify-phases ,phases
+            (add-after 'unpack 'make-git-checkout-writable
+              (lambda _
+                (for-each make-file-writable (find-files "."))
+                #t))
+            (add-after 'unpack 'apply-patches
+              (lambda* (#:key inputs #:allow-other-keys)
+                (let ((jami-apply-dependency-patches ,jami-apply-dependency-patches))
+                  ;; Comes from
+                  ;; "ring-project/daemon/contrib/src/pjproject/rules.mak".
+                  ;; WARNING: These amount for huge changes in pjproject.
+                  (jami-apply-dependency-patches #:inputs inputs
+                                                 #:dep-name "ffmpeg"
+                                                 #:patches
+                                                 '("remove-mjpeg-log"
+                                                   "change-RTCP-ratio"
+                                                   "rtp_ext_abs_send_time"))
+                  #t))))))))))
+
 (define-public libring
   (package
     (name "libring")
-- 
2.26.1