From 5c52125423b91e0b624f8bca892ddce99f9d1885 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 23 Jan 2025 11:13:13 -0500 Subject: [PATCH] backports/signal-desktop: upgrade to 7.39.0 --- backports/signal-desktop/APKBUILD | 19 ++- .../signal-desktop/webrtc-rollback-red.patch | 138 ++++++++++++++++++ 2 files changed, 149 insertions(+), 8 deletions(-) create mode 100644 backports/signal-desktop/webrtc-rollback-red.patch diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index e64df73..4257ca5 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop -pkgver=7.37.0 +pkgver=7.39.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -58,6 +58,7 @@ makedepends=" pulseaudio-dev py3-setuptools python3 + re2-dev samurai sqlcipher-dev vips-dev @@ -66,9 +67,9 @@ makedepends=" options="net !check" # use _check_depends to validate this -_libsignalver=0.64.1 -_ringrtcver=2.49.1 -_webrtcver=6723b +_libsignalver=0.65.0 +_ringrtcver=2.49.2 +_webrtcver=6723c _stokenizerver=0.2.1 source=" @@ -87,6 +88,7 @@ source=" webrtc-shared-libs.patch webrtc-compiler.patch webrtc-gcc13.patch + webrtc-rollback-red.patch signal-desktop.sh " @@ -455,10 +457,10 @@ package() { } sha512sums=" -3c922ece17adb8bff292f1b799b4653b65c662ffe4085627ca578d62bcb7c146dff6f5b000940aec44a27b8b3af41337b7bcea3730c8fc3839b449c94f148e55 Signal-Desktop-7.37.0.tar.gz -a3c02fc38a8a3032dab6aad9e89c2952b1c49fedfcd892d060c6274d9bcf7c02fd38b325b32456d47f4c6a16982af0b6fc7428e0e8b23a683667aebfc8f5953d libsignal-0.64.1.tar.gz -394f38bc4f815e716b1ff8a874453823ec7bd088239ea6c55f196200e921cccdbb2efa781b54df4ea48a0fcdf9526ab71b47f8d7cbc3b68b58114bba32fe384d ringrtc-2.49.1.tar.gz -433ca889f458ed8327ca18685491f6ddd4a5cec4f268455bc5fce688d19dd7b2878d938cfe6fffb9b0881bc99de9341856baa206269d41bf030bd9d1fecf1455 webrtc-6723b.tar.zst +a94d52ef8b4d96786c2794b7fa25dc881e410c4c240cb642339d2bc69c3c43109a8a77d2e3d68b0e9335b1fc5b5ac653a82f7dbdbfc48d7defd60cbed2d1a32a Signal-Desktop-7.39.0.tar.gz +ecd7575cf7e3d5ba2c0ebd8b3d2835b041219fdb9982263c125ec06e8e999ee3c6ce6b23c00f22991883edc8974e7a7943330def4e9d24a727c16bedaad520c0 libsignal-0.65.0.tar.gz +159ea7842cb2d8ba9e31a1a093b1e094f8288b6a2eb35d213e1e3beeeec867b416926364daa1db21232d44602d00069d5474293a679487e2f7dce344ced0a5b0 ringrtc-2.49.2.tar.gz +89b4bfdf86d3d38daea00892cb27af6aaefd1bf01110d3528724223a64f7a0b06109e792f199dfa7f612983d2b49079b086fdf4d3475c655846c2b916d289c74 webrtc-6723c.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz 8d2d2d82c8546c2dd1fef161b61df79918f8c22235a56a46adb375a0beb4acef12c5fe53e67242a4be97f77adc522ff79b47949c352956c742a70d50f4179f7f libsignal-auditable.patch 18d5a0208d75fa910b6c0d531997402bba83290dfc7d7ce903acdcd0ce1d88bd3026ace40ecd32a88c2e429e48530b4e40f207a3d15bd9c0d6ebc8c447fa8ff9 signal-use-system-sqlcipher.patch @@ -469,5 +471,6 @@ fc2af28645364cd85c106304a26811b036f6be048c52137fbbcc112870a84132a181f532563e0569 98a7e4df27c3ed56c5968ebc3ae8e08bfb54362d0c910f9af1d414079a6d5fe0f18aa570ae3c38042f4691af6a130cb3ff689625e26a3987720dd319a5f587b1 webrtc-shared-libs.patch fe78cdc58c18826fc4227cc8e9377980766229390544578f6a1a6f7322bc3243c066963b589323dbfe4f2bfd37f8859ad84f63cb3783317892e5ae3652270a3a webrtc-compiler.patch 48ab5c733e643eaff08ccbe839086bebbb68d397984ad7c5c5b68df8071f75d2dfe92c3f52d9fbf9b81754934bdfa8a67c69addd476ce4265b978592fb4ff9bd webrtc-gcc13.patch +ee5c87387c5566901ec5aefe1bb6b59e0f47e2a640dd21c194c98f721f3518f7a2ba68fb9d11e27d170e255fcb0b3825b8c929ae75958b77d43751af97baf99b webrtc-rollback-red.patch 87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop.sh " diff --git a/backports/signal-desktop/webrtc-rollback-red.patch b/backports/signal-desktop/webrtc-rollback-red.patch new file mode 100644 index 0000000..0f15830 --- /dev/null +++ b/backports/signal-desktop/webrtc-rollback-red.patch @@ -0,0 +1,138 @@ +diff --git a/webrtc/ringrtc/rffi/src/sdp_observer.cc b/webrtc/ringrtc/rffi/src/sdp_observer.cc +index d60f3d5e7ba..d561dedd1d0 100644 +--- a/webrtc/ringrtc/rffi/src/sdp_observer.cc ++++ b/webrtc/ringrtc/rffi/src/sdp_observer.cc +@@ -6,7 +6,7 @@ + #include "rffi/api/sdp_observer_intf.h" + #include "rffi/src/ptr.h" + #include "rffi/src/sdp_observer.h" +-#include "third_party/re2/src/re2/re2.h" ++#include + + namespace webrtc { + namespace rffi { +@@ -29,10 +29,8 @@ void CreateSessionDescriptionObserverRffi::OnSuccess(SessionDescriptionInterface + // TODO tweak the response a little + std::string sdp; + if (session_description->ToString(&sdp)) { +- static LazyRE2 fmtp_re = {"(a=fmtp:111 ((?!cbr=).)*)\r?\n"}; +- RE2::Replace(&sdp, *fmtp_re, "$1;cbr=1\r\n"); +- static LazyRE2 ssrc_re = {".+urn:ietf:params:rtp-hdrext:ssrc-audio-level.*\r?\n"}; +- RE2::Replace(&sdp, *ssrc_re, ""); ++ sdp = std::regex_replace(sdp, std::regex("(a=fmtp:111 ((?!cbr=).)*)\r?\n"), "$1;cbr=1\r\n"); ++ sdp = std::regex_replace(sdp, std::regex(".+urn:ietf:params:rtp-hdrext:ssrc-audio-level.*\r?\n"), ""); + + std::unique_ptr session_description2 = CreateSessionDescription(session_description->GetType(), sdp); + delete session_description; +diff --git a/webrtc/ringrtc/rffi/BUILD.gn b/webrtc/ringrtc/rffi/BUILD.gn +index 4564e734e63..341535b0fc7 100644 +--- a/webrtc/ringrtc/rffi/BUILD.gn ++++ b/webrtc/ringrtc/rffi/BUILD.gn +@@ -58,7 +58,6 @@ if (is_android) { + "${android_sdk}:libjingle_peerconnection_jni", + "${android_sdk}:libjingle_peerconnection_metrics_default_jni", + "//pc:libjingle_peerconnection", +- "//third_party/re2", + ] + output_extension = "so" + } +@@ -78,7 +77,6 @@ if (is_ios) { + + deps = [ + "//third_party/libyuv", +- "//third_party/re2", + ] + } + } +@@ -94,7 +92,6 @@ if (is_linux || is_mac || is_win) { + deps = [ + "//sdk:media_constraints", + "//media:rtc_simulcast_encoder_adapter", +- "//third_party/re2", + ] + } + } +diff --git a/webrtc/ringrtc/rffi/api/peer_connection_intf.h b/webrtc/ringrtc/rffi/api/peer_connection_intf.h +index 66958254fed..4cd223beb93 100644 +--- a/webrtc/ringrtc/rffi/api/peer_connection_intf.h ++++ b/webrtc/ringrtc/rffi/api/peer_connection_intf.h +@@ -105,6 +105,7 @@ RUSTEXPORT webrtc::SessionDescriptionInterface* + Rust_sessionDescriptionFromV4(bool offer, + const RffiConnectionParametersV4* v4_borrowed, + bool enable_tcc_audio, ++ bool enable_red_audio, + bool enable_vp9); + + RUSTEXPORT void +diff --git a/webrtc/ringrtc/rffi/src/peer_connection.cc b/webrtc/ringrtc/rffi/src/peer_connection.cc +index 9db5ed8219d..0714b3589e3 100644 +--- a/webrtc/ringrtc/rffi/src/peer_connection.cc ++++ b/webrtc/ringrtc/rffi/src/peer_connection.cc +@@ -42,6 +42,7 @@ int VIDEO_LAYERS_ALLOCATION_EXT_ID = 14; + // 101 used by connection.rs + int DATA_PT = 101; + int OPUS_PT = 102; ++int OPUS_RED_PT = 105; + int VP8_PT = 108; + int VP8_RTX_PT = 118; + int VP9_PT = 109; +@@ -317,12 +318,14 @@ RUSTEXPORT webrtc::SessionDescriptionInterface* + Rust_sessionDescriptionFromV4(bool offer, + const RffiConnectionParametersV4* v4_borrowed, + bool enable_tcc_audio, ++ bool enable_red_audio, + bool enable_vp9) { + // Major changes from the default WebRTC behavior: + // 1. We remove all codecs except Opus, VP8, and VP9 + // 2. We remove all header extensions except for transport-cc, video orientation, + // and abs send time. + // 3. Opus CBR and DTX is enabled. ++ // 4. RED is enabled for audio. + + // For some reason, WebRTC insists that the video SSRCs for one side don't + // overlap with SSRCs from the other side. To avoid potential problems, we'll give the +@@ -361,6 +364,15 @@ Rust_sessionDescriptionFromV4(bool offer, + auto video = std::make_unique(); + set_rtp_params(video.get()); + ++ // Turn on the RED "meta codec" for Opus redundancy. ++ auto opus_red = cricket::CreateAudioCodec(OPUS_RED_PT, cricket::kRedCodecName, 48000, 2); ++ opus_red.SetParam("", std::to_string(OPUS_PT) + "/" + std::to_string(OPUS_PT)); ++ ++ if (enable_red_audio) { ++ // Add RED before Opus to use it by default when sending. ++ audio->AddCodec(opus_red); ++ } ++ + auto opus = cricket::CreateAudioCodec(OPUS_PT, cricket::kOpusCodecName, 48000, 2); + // These are the current defaults for WebRTC + // We set them explicitly to avoid having the defaults change on us. +@@ -378,6 +390,11 @@ Rust_sessionDescriptionFromV4(bool offer, + opus.AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc, cricket::kParamValueEmpty)); + audio->AddCodec(opus); + ++ if (!enable_red_audio) { ++ // Add RED after Opus so that RED packets can at least be decoded properly if received. ++ audio->AddCodec(opus_red); ++ } ++ + auto add_video_feedback_params = [] (cricket::Codec* video_codec) { + video_codec->AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc, cricket::kParamValueEmpty)); + video_codec->AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamCcm, cricket::kRtcpFbCcmParamFir)); +@@ -589,9 +606,16 @@ CreateSessionDescriptionForGroupCall(bool local, + opus.SetParam("cbr", "1"); + opus.AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc, cricket::kParamValueEmpty)); + ++ // Turn on the RED "meta codec" for Opus redundancy. ++ auto opus_red = cricket::CreateAudioCodec(OPUS_RED_PT, cricket::kRedCodecName, 48000, 2); ++ opus_red.SetParam("", std::to_string(OPUS_PT) + "/" + std::to_string(OPUS_PT)); ++ ++ // Add RED after Opus so that RED packets can at least be decoded properly if received. + local_audio->AddCodec(opus); ++ local_audio->AddCodec(opus_red); + for (auto& remote_audio : remote_audios) { + remote_audio->AddCodec(opus); ++ remote_audio->AddCodec(opus_red); + } + + auto add_video_feedback_params = [] (cricket::Codec* video_codec) { -- 2.49.1