--- Begin Message ---
Subject: |
Jami |
Date: |
Fri, 17 Apr 2020 02:00:29 +0200 |
Hello,
these commits are mainly updates, some improvements, I don't remember
it's late here :D
Jan Wielkiewicz
--- End Message ---
--- Begin Message ---
Subject: |
Re: [bug#40677] [PATCH v5] gnu: Add ffmpeg-jami. |
Date: |
Fri, 15 May 2020 09:11:14 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) |
Pushed with minor modifications.
Thanks for your work,
Mathieu
Jan Wielkiewicz <address@hidden> writes:
> This package is needed, because Jami uses a modified version
> of ffmpeg, which provides GPU hardware acceleration, automatical
> adapting of bitrate and extra codecs. Because of the configure flags
> list being long, it is better to keep them separated in variables,
> instead of littering the package definition.
>
> * gnu/packages/jami.scm (ffmpeg-jami, %ffmpeg-default-configure-flags,
> %ffmpeg-linux-configure-flags, %ffmpeg-linux-x86-configure-flags):
> New variables.
> (ffmpeg-compose-configure-flags): New procedure.
> (libring)[inputs]: Use ffmpeg-jami instead of ffmpeg.
> ---
> gnu/packages/jami.scm | 248 +++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 246 insertions(+), 2 deletions(-)
>
> diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
> index dda787b3cd..dea5e7d3b8 100644
> --- a/gnu/packages/jami.scm
> +++ b/gnu/packages/jami.scm
> @@ -59,7 +59,8 @@
> #:use-module (guix download)
> #:use-module (guix git-download)
> #:use-module (guix packages)
> - #:use-module (guix utils))
> + #:use-module (guix utils)
> + #:use-module (srfi srfi-1))
>
> (define %jami-version "20200401.1.6f090de")
>
> @@ -186,6 +187,249 @@
> "selftest: pjlib-test pjlib-util-test pjmedia-test"))
> #t)))))))
>
> +;; The following variables are configure flags used by ffmpeg-jami.
> +;; They're from the ring-project/daemon/contrib/src/ffmpeg/rules.mak
> +;; file. We try to keep it as close to the official Jami package as
> +;; possible to provide all the codecs and extra features that are
> +;; the effect of patching ffmpeg.
> +;;
> +;; Web view of the file:
> +;;https://review.jami.net/plugins/gitiles/ring-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak
> +(define %ffmpeg-default-configure-flags
> + '(;; disable everything
> + "--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=hevc"
> + "--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"))
> +
> +(define %ffmpeg-linux-configure-flags
> + '("--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-hwaccel=hevc_vaapi"
> + "--enable-encoder=h264_vaapi"
> + "--enable-encoder=vp8_vaapi"
> + "--enable-encoder=mjpeg_vaapi"
> + "--enable-encoder=hevc_vaapi"))
> +
> +;; ffnvcodec is not supported on ARM then we enable it here for i386 and
> x86_64
> +(define %ffmpeg-linux-x86-configure-flags
> + '("--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"))
> +
> +;; This procedure composes the configure flags list for ffmpeg-jami.
> +(define (ffmpeg-compose-configure-flags)
> + (define (system=? s)
> + (string-prefix? s (%current-system)))
> + `(,@%ffmpeg-default-configure-flags
> + ,@(if (string-contains (%current-system) "linux")
> + (if (or (system=? "i686")
> + (system=? "x86_64"))
> + (append %ffmpeg-linux-configure-flags
> + %ffmpeg-linux-x86-configure-flags)
> + %ffmpeg-linux-configure-flags)
> + '())))
> +
> +(define-public ffmpeg-jami
> + (package
> + (inherit ffmpeg)
> + (name "ffmpeg-jami")
> + (native-inputs
> + `(("sfl-patches" ,(jami-source))
> + ("libiconv" ,libiconv)
> + ,@(package-native-inputs ffmpeg)))
> + (supported-systems '("x86_64-linux" "i686-linux"
> + "aarch64-linux" "armhf-linux"))
> + (arguments
> + (append
> + '(#:tests? #f)
> + (substitute-keyword-arguments (package-arguments ffmpeg)
> + ((#:configure-flags '())
> + (ffmpeg-compose-configure-flags))
> + ((#: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))
> + ;; These patches come from:
> + ;; "ring-project/daemon/contrib/src/ffmpeg/rules.mak".
> + (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")
> @@ -197,7 +441,7 @@
> ("boost" ,boost)
> ("dbus-c++" ,dbus-c++)
> ("eudev" ,eudev)
> - ("ffmpeg" ,ffmpeg)
> + ("ffmpeg" ,ffmpeg-jami)
> ("flac" ,flac)
> ("gmp" ,gmp)
> ("gsm" ,gsm)
--- End Message ---