Message ID | 20200502011450.2676-8-tona_kosmicznego_smiecia@interia.pl |
---|---|
State | Accepted |
Headers | show |
Series | Jami patches. | expand |
Context | Check | Description |
---|---|---|
cbaines/comparison | success | View comparision |
cbaines/git branch | success | View Git branch |
cbaines/applying patch | success | View Laminar job |
cbaines/comparison | success | View comparision |
cbaines/git branch | success | View Git branch |
cbaines/applying patch | fail | View Laminar job |
Ok, last one! As discussed before I'm not very comfortable with this very long list of configuration options. Are the ffmpeg configuration options needed by Jami described somewhere? Thanks, Mathieu
On Sat, 02 May 2020 11:36:30 +0200 Mathieu Othacehe <m.othacehe@gmail.com> wrote: > Ok, last one! As discussed before I'm not very comfortable with this > very long list of configuration options. > > Are the ffmpeg configuration options needed by Jami described > somewhere? > > Thanks, > > Mathieu I copied it from ring-project/daemon/contrib/src/ffmpeg/rules.mak. Tarballs are here: https://dl.jami.net/ring-release/tarballs/ Jan Wielkiewicz
On Sat, 02 May 2020 11:36:30 +0200 Mathieu Othacehe <m.othacehe@gmail.com> wrote: > Ok, last one! As discussed before I'm not very comfortable with this > very long list of configuration options. > > Are the ffmpeg configuration options needed by Jami described > somewhere? > > Thanks, > > Mathieu So I compared the list of flags turned off by default with ffmpeg package currently in guix with ffmpeg-jami package and I managed to shorten the list from 107 to 95. It isn't worth the effort. I tried looking for the flags needed in the documentation, but I couldn't find anything. There's only the rules.mak file in Jami source code and they use these flags. There are only few comments: #disable everything #enable muxers/demuxers #enable parsers #encoders/decoders #decoders for ringtones and audio streaming #encoders/decoders for images #filters #platform specific options #Android Linux #Desktop Linux ... That's all. I see no point in comparing these flags every release just for 12 of them I can inherit from the default ffmpeg package. I prefer just copy the list from rules.mak. What I could do is defining a separate "ffmpeg-configure-flags" variable somewhere near ffmpeg-jami and use it, instead of having the bloated list inside the package definition (if that's even possible). Correct me if I'm wrong or suggest a reasonable solution, because I have no idea how to deal with it right now. Jan Wielkiewicz
Hello Jan, > So I compared the list of flags turned off by default with ffmpeg > package currently in guix with ffmpeg-jami package and I managed to > shorten the list from 107 to 95. It isn't worth the effort. Oh that's a disappointment indeed. Among those 95 flags I'm pretty sure most of them match the default, but going through all of them feels like a burden. > I prefer just copy the list from rules.mak. What I could do is defining > a separate "ffmpeg-configure-flags" variable somewhere near ffmpeg-jami > and use it, instead of having the bloated list inside the package > definition (if that's even possible). > Correct me if I'm wrong or suggest a reasonable solution, because I have > no idea how to deal with it right now. Ok, this seems fine. Don't hesitate to add a link to a Web view of the rules.mak file, so that it's clear where those flags come from. Another remark on this part, > "--enable-encoder=h264_nvenc" > "--enable-encoder=hevc_nvenc")) > ((string?= (%current-system) "aarch64-linux") '("--arch=aarch64")) > ((string?= (%current-system) "arm64-linux") '("--arch=aarch64")) "arm64-linux" is not a valid system, you can remove it. > ((string?= (%current-system) "arm") '("--arch=arm")) I think the right system here is "armhf-linux". However, you would also need to support cross-compilation when %current-target-system is set. In that case, the value looks like "aarch64-linux-gnu" and "arm-linux-gnueabihf". If you add support for those plaforms you need to test it by building ffmpeg-jami with "--system" and "--target" flags. As this is a complex package with a lot of dependencies (probably failing to cross-compile), it would be fine with me if you just drop support for other systems/targets. Thanks, Mathieu
Hi again! On Tue, 05 May 2020 09:18:58 +0200 Mathieu Othacehe <m.othacehe@gmail.com> wrote: > Hello Jan, > > Oh that's a disappointment indeed. Among those 95 flags I'm pretty > sure most of them match the default, but going through all of them > feels like a burden. > > Ok, this seems fine. Don't hesitate to add a link to a Web view of the > rules.mak file, so that it's clear where those flags come from. Done. > Another remark on this part, > > > "--enable-encoder=h264_nvenc" > > "--enable-encoder=hevc_nvenc")) > > ((string?= (%current-system) "aarch64-linux") > > '("--arch=aarch64")) ((string?= (%current-system) "arm64-linux") > > '("--arch=aarch64")) > > "arm64-linux" is not a valid system, you can remove it. Done. > > ((string?= (%current-system) "arm") '("--arch=arm")) > > I think the right system here is "armhf-linux". However, you would > also need to support cross-compilation when %current-target-system is > set. In that case, the value looks like "aarch64-linux-gnu" and > "arm-linux-gnueabihf". I added "%current-target-system" to support cross-compilation. Also fixed the drunk "string?=" uses - there's "string=?" actually and I replaced it with "string-prefix?". What's the difference between "arm-linux-gnueabihf" and "aarch64-linux-gnu"? Are they synonyms? Should it be: if "arm-linux-gnueabihf" or "aarch64-linux-gnu" use "--arch=armhf-linux"? > If you add support for those plaforms you need to test it by building > ffmpeg-jami with "--system" and "--target" flags. As this is a complex > package with a lot of dependencies (probably failing to > cross-compile), it would be fine with me if you just drop support for > other systems/targets. I want to try anyway. Jami supports Raspbian, so it is worth trying. > Thanks, > > Mathieu Jan Wielkiewicz
Hi, I tried fixing cross-compilation but there are several problems: - dav1d fails, because "meson doesn't support cross-compilation" - perl fails during installation and if I checked correctly, guix doesn't have support for perl on armhf or aarch64 - glib fails, because "meson doesn't support cross-compilation" And other possible problems I didn't get to. With dav1d I could just disable it, because it's just one codec. I also disabled perl, but disabling glib won't work. This isn't a good advertisement for this meson build system :P Should I proudly drop all the support for cross compilation? Jan Wielkiewicz
Hello Jan, > - dav1d fails, because "meson doesn't support cross-compilation" > - perl fails during installation and if I checked correctly, guix > doesn't have support for perl on armhf or aarch64 > - glib fails, because "meson doesn't support cross-compilation" > And other possible problems I didn't get to. With dav1d I could just > disable it, because it's just one codec. I also disabled perl, but > disabling glib won't work. > > This isn't a good advertisement for this meson build system :P > Should I proudly drop all the support for cross compilation? On core-updates the cross-compilation support is a bit better (perl at least should be fixed), but it won't get you much further. So yes you can drop cross compilation. You can still check that native compilation for armv7 and aarch64 works with "--system armhf-linux" and "--system aarch64-linux". Note that you will need to setup binfmt. Thanks, Mathieu
Hey, > What's the difference between "arm-linux-gnueabihf" and > "aarch64-linux-gnu"? Are they synonyms? No, "arm-linux-gnueabihf" is for ARMv7 systems with hardware floating point support. "aarch64-linux-gnu" is for ARMv8 processors. This is quite confusing! Mathieu
Hi, I had a success building ffmpeg-jami on both aarch64-linux and armhf-linux (through qemu). I have one question regarding the naming convention of variables. Why do some variables start with "%"? I couldn't find any explanation in the documentation nor in the source code. Say I want to add a variable called "ffmpeg-linux-configure-flags". Should I start it with "%" - "%fmpeg-linux-configure-flags" or not? Jan Wielkiewicz
Hello Jan, > I had a success building ffmpeg-jami on both aarch64-linux and > armhf-linux (through qemu). I have one question regarding the naming > convention of variables. Why do some variables start with "%"? I > couldn't find any explanation in the documentation nor in the source > code. Say I want to add a variable called > "ffmpeg-linux-configure-flags". Should I start it with "%" - > "%fmpeg-linux-configure-flags" or not? Good job! Variables prefixed by '%' often denote parameters (see: https://www.gnu.org/software/guile/manual/html_node/Parameters.html). I guess something like: --8<---------------cut here---------------start------------->8--- (define %fmpeg-linux-configure-flags '("--flag-1" "--flag-2")) --8<---------------cut here---------------end--------------->8--- would be fine. But using "ffmpeg-linux-configure-flags" would also be correct. Thanks, Mathieu
diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm index 8d34029918..0fc03b6088 100644 --- a/gnu/packages/jami.scm +++ b/gnu/packages/jami.scm @@ -186,6 +186,245 @@ "selftest: pjlib-test pjlib-util-test pjmedia-test")) #t))))))) +(define-public ffmpeg-jami + (let ((commit "59da9dcd7ef6277e4e04998ced71b05a6083c635") + (revision "0")) + (package + (inherit ffmpeg) + (name "ffmpeg-jami") + (version (git-version "4.2.1" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://git.ffmpeg.org/ffmpeg.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0cm58kd06lvslc7knnfajv5p63v4cc6502badjcic5m9izd03lz2")))) + (native-inputs + `(("SFL-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)) + ;; 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")