From c9f9ecc04aaff5c48490e3fc88b0b2b4ef79eafb Mon Sep 17 00:00:00 2001
From: Raghav Gururajan <raghavgururajan@disroot.org>
Date: Sun, 5 Apr 2020 03:25:10 -0400
Subject: [PATCH 3/3] gnu: Add mediastreamer2

* gnu/packages/linphone.scm (mediastreamer2): New variable.
---
 gnu/packages/linphone.scm                     |  78 +++++++++
 .../patches/mediastreamer-msfactory.patch     |  31 ++++
 .../patches/mediastreamer-srtp2.patch         | 155 ++++++++++++++++++
 3 files changed, 264 insertions(+)
 create mode 100644 gnu/packages/patches/mediastreamer-msfactory.patch
 create mode 100644 gnu/packages/patches/mediastreamer-srtp2.patch

diff --git a/gnu/packages/linphone.scm b/gnu/packages/linphone.scm
index 0e32500b07..a3ec664a40 100644
--- a/gnu/packages/linphone.scm
+++ b/gnu/packages/linphone.scm
@@ -19,12 +19,24 @@
 
 (define-module (gnu packages linphone)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages audio)
   #:use-module (gnu packages base)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages pulseaudio)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages telephony)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -252,3 +264,69 @@ protocol, written in C.  It is fully portable and can be executed on many
 platforms including both ARM and x86.")
     (home-page "https://gitlab.linphone.org/BC/public/bzrtp")
     (license license:gpl2+)))
+
+(define-public mediastreamer2
+  (package
+    (name "mediastreamer")
+    (version "2.16.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "https://www.linphone.org/releases/sources/" name
+                       "/" name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0whpqr69wz0pnzvragkpfblxhd0rds8k06c3mw5a0ag216a1yd9k"))
+       (patches
+        (list
+         ;; For updating definitions.
+         ;; Fixes "-Werror" flag related errors and MS2_GIT_VERSION error.
+         (search-patch "mediastreamer-msfactory.patch")
+         ;; For srtp2 compatibility.
+         ;; Fixes locating srtp2 files.
+         (search-patch "mediastreamer-srtp2.patch")))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ; No test target
+       #:configure-flags
+       (list
+        "-DENABLE_STATIC=NO"            ; Not required
+        "-DENABLE_BV16=NO")))           ; Not available
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)
+       ("python" ,python)))
+    (inputs
+     `(("alsa" ,alsa-lib)
+       ("bcg729" ,bcg729)
+       ("bcmatroska2" ,bcmatroska2)
+       ("bctoolbox" ,bctoolbox)
+       ("ffmpeg" ,ffmpeg)
+       ("glew" ,glew)
+       ("glu" ,glu)
+       ("glx" ,mesa-utils)
+       ("gsm" ,gsm)
+       ("opengl" ,mesa)
+       ("opus" ,opus)
+       ("ortp" ,ortp)
+       ("pcap" ,libpcap)
+       ("portaudio" ,portaudio)
+       ("pulseaudio" ,pulseaudio)
+       ("spandsp" ,spandsp)
+       ("speex" ,speex)
+       ("speexdsp" ,speexdsp)
+       ("srtp" ,libsrtp)
+       ("theora" ,libtheora)
+       ("turbojpeg" ,libjpeg-turbo)
+       ("v4l" ,v4l-utils)
+       ("vpx" ,libvpx)
+       ("x11" ,libx11)
+       ("xv" ,libxv)
+       ("zrtp", bzrtp)))
+    (synopsis "Belledonne Communications Streaming Engine")
+    (description "Mediastreamer is a powerful and lightweight streaming
+engine for telephony applications.  This media processing and streaming toolkit
+is responsible for receiving and sending all multimedia streams in Linphone,
+including media capture, encoding and decoding, and rendering.")
+    (home-page "https://gitlab.linphone.org/BC/public/mediastreamer2")
+    (license license:gpl2+)))
diff --git a/gnu/packages/patches/mediastreamer-msfactory.patch b/gnu/packages/patches/mediastreamer-msfactory.patch
new file mode 100644
index 0000000000..debc74e01c
--- /dev/null
+++ b/gnu/packages/patches/mediastreamer-msfactory.patch
@@ -0,0 +1,31 @@
+From de3a24b795d7a78e78eab6b974e7ec5abf2259ac Mon Sep 17 00:00:00 2001
+From: Simon Morlat <simon.morlat@linphone.org>
+Date: Mon, 14 Aug 2017 11:18:16 +0200
+Subject: [PATCH] allow MS2_GIT_VERSION to be undefined, as it will be the case
+ when building rpms.
+
+---
+ src/base/msfactory.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/base/msfactory.c b/src/base/msfactory.c
+index 6562d86c..f61c68a8 100644
+--- a/src/base/msfactory.c
++++ b/src/base/msfactory.c
+@@ -24,9 +24,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ #   ifndef MEDIASTREAMER_VERSION
+ #   define MEDIASTREAMER_VERSION "unknown"
+ #   endif
+-#	ifndef MS2_GIT_VERSION
+-#	define MS2_GIT_VERSION "unknown"
+-#	endif
++#endif
++
++#ifndef MS2_GIT_VERSION
++#define MS2_GIT_VERSION "unknown"
+ #endif
+ 
+ #include "mediastreamer2/msfilter.h"
+-- 
+2.21.0
+
diff --git a/gnu/packages/patches/mediastreamer-srtp2.patch b/gnu/packages/patches/mediastreamer-srtp2.patch
new file mode 100644
index 0000000000..f6d494facb
--- /dev/null
+++ b/gnu/packages/patches/mediastreamer-srtp2.patch
@@ -0,0 +1,155 @@
+From 97903498364ae2596e790cb2c2ce9ac76c04d64a Mon Sep 17 00:00:00 2001
+From: Danmei Chen <danmei.chen@belledonne-communications.com>
+Date: Fri, 19 Jan 2018 10:04:07 +0100
+Subject: [PATCH] add compability with srtp2
+
+---
+ cmake/FindSRTP.cmake    | 24 ++++++++++++++++++++----
+ src/CMakeLists.txt      |  1 +
+ src/crypto/ms_srtp.c    | 10 ++--------
+ src/utils/srtp_prefix.h | 41 +++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 64 insertions(+), 12 deletions(-)
+ create mode 100644 src/utils/srtp_prefix.h
+
+diff --git a/cmake/FindSRTP.cmake b/cmake/FindSRTP.cmake
+index 988b846a..f720ce7e 100644
+--- a/cmake/FindSRTP.cmake
++++ b/cmake/FindSRTP.cmake
+@@ -31,20 +31,36 @@ set(_SRTP_ROOT_PATHS
+ )
+ 
+ find_path(SRTP_INCLUDE_DIRS
+-	NAMES srtp/srtp.h
++	NAMES srtp2/srtp.h
+ 	HINTS _SRTP_ROOT_PATHS
+ 	PATH_SUFFIXES include
+ )
+ 
+ if(SRTP_INCLUDE_DIRS)
+ 	set(HAVE_SRTP_SRTP_H 1)
+-endif()
+-
+-find_library(SRTP_LIBRARIES
++	set(SRTP_VERSION 2)
++	find_library(SRTP_LIBRARIES
++		NAMES srtp2
++		HINTS ${_SRTP_ROOT_PATHS}
++		PATH_SUFFIXES bin lib
++	)
++else()
++	find_path(SRTP_INCLUDE_DIRS
++		NAMES srtp/srtp.h
++		HINTS _SRTP_ROOT_PATHS
++		PATH_SUFFIXES include
++	)
++	if(SRTP_INCLUDE_DIRS)
++		set(HAVE_SRTP_SRTP_H 1)
++		set(SRTP_VERSION 1)
++	endif()
++	find_library(SRTP_LIBRARIES
+ 	NAMES srtp
+ 	HINTS ${_SRTP_ROOT_PATHS}
+ 	PATH_SUFFIXES bin lib
+ )
++endif()
++
+ 
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(SRTP
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index da429764..c46faa62 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -183,6 +183,7 @@ set(VOIP_SOURCE_FILES_C
+ 	utils/pcap_sender.c
+ 	utils/pcap_sender.h
+ 	utils/stream_regulator.c
++	utils/srtp_prefix.h
+ 	voip/audioconference.c
+ 	voip/audiostream.c
+ 	voip/bandwidthcontroller.c
+diff --git a/src/crypto/ms_srtp.c b/src/crypto/ms_srtp.c
+index 5a510c99..67810316 100644
+--- a/src/crypto/ms_srtp.c
++++ b/src/crypto/ms_srtp.c
+@@ -25,6 +25,7 @@
+ #include "mediastreamer2/ms_srtp.h"
+ #include "mediastreamer2/mediastream.h"
+ 
++
+ #ifdef HAVE_SRTP
+ 
+ /*srtp defines all this stuff*/
+@@ -34,13 +35,7 @@
+ #undef PACKAGE_TARNAME
+ #undef PACKAGE_VERSION
+ 
+-#if defined(MS2_WINDOWS_PHONE)
+-// Windows phone doesn't use make install
+-#include <srtp.h>
+-#else
+-#include <srtp/srtp.h>
+-#endif
+-
++#include "srtp_prefix.h"
+ 
+ #include "ortp/b64.h"
+ 
+@@ -352,7 +347,6 @@ int ms_srtp_init(void)
+ 			srtp_init_done++;
+ 		}else{
+ 			ms_fatal("Couldn't initialize SRTP library: %d.", st);
+-			err_reporting_init("mediastreamer2");
+ 		}
+ 	}else srtp_init_done++;
+ 	return (int)st;
+diff --git a/src/utils/srtp_prefix.h b/src/utils/srtp_prefix.h
+new file mode 100644
+index 00000000..68bde496
+--- /dev/null
++++ b/src/utils/srtp_prefix.h
+@@ -0,0 +1,41 @@
++/*
++  mediastreamer2 library - modular sound and video processing and streaming
++  Copyright (C) 2006-2014 Belledonne Communications, Grenoble
++
++  This library is free software; you can redistribute it and/or
++  modify it under the terms of the GNU Lesser General Public
++  License as published by the Free Software Foundation; either
++  version 2.1 of the License, or (at your option) any later version.
++
++  This library is distributed in the hope that it will be useful,
++  but WITHOUT ANY WARRANTY; without even the implied warranty of
++  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++  Lesser General Public License for more details.
++
++  You should have received a copy of the GNU Lesser General Public
++  License along with this library; if not, write to the Free Software
++  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++*/
++#ifndef __SRTP2_H__
++#define __SRTP2_H__
++
++#if defined(MS2_WINDOWS_PHONE)
++// Windows phone doesn't use make install
++#include <srtp.h>
++#elif SRTP_VERSION==1
++#include <srtp/srtp.h>
++#else
++#include <srtp2/srtp.h>
++#define err_status_t srtp_err_status_t
++#define err_status_ok srtp_err_status_ok
++#define crypto_policy_t srtp_crypto_policy_t
++#define crypto_policy_set_aes_cm_256_hmac_sha1_80 srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80
++#define crypto_policy_set_aes_cm_128_hmac_sha1_32 srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32
++#define crypto_policy_set_aes_cm_128_null_auth srtp_crypto_policy_set_aes_cm_128_null_auth
++#define crypto_policy_set_null_cipher_hmac_sha1_80 srtp_crypto_policy_set_null_cipher_hmac_sha1_80
++#define crypto_policy_set_aes_cm_128_hmac_sha1_80 srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80
++#define crypto_policy_set_aes_cm_256_hmac_sha1_32 srtp_crypto_policy_set_aes_cm_256_hmac_sha1_32
++#define ssrc_t srtp_ssrc_t
++#endif
++
++#endif
+-- 
+2.21.0
+
-- 
2.26.0

