[3.22] backports/signal-desktop: upgrade to 7.69.0 #1596
9 changed files with 591 additions and 27 deletions
|
|
@ -28,7 +28,7 @@ jobs:
|
|||
${{ github.workspace }}/.forgejo/bin/build.sh
|
||||
touch packages/dummy
|
||||
- name: Package upload
|
||||
uses: forgejo/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: package
|
||||
path: packages
|
||||
|
|
@ -49,6 +49,6 @@ jobs:
|
|||
- name: Repo pull
|
||||
uses: actions/checkout@v4
|
||||
- name: Package download
|
||||
uses: forgejo/download-artifact@v3
|
||||
uses: actions/download-artifact@v3
|
||||
- name: Package deployment
|
||||
run: ${{ github.workspace }}/.forgejo/bin/deploy.sh
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ jobs:
|
|||
${{ github.workspace }}/.forgejo/bin/generate-cross.sh ${{ github.ref_name }} ${{ inputs.target_arch }}
|
||||
mv -v /home/buildozer/packages/main ${{ github.workspace }}/packages/cross
|
||||
- name: Package upload
|
||||
uses: forgejo/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: package
|
||||
path: packages
|
||||
|
|
@ -54,6 +54,6 @@ jobs:
|
|||
- name: Repo pull
|
||||
uses: actions/checkout@v4
|
||||
- name: Package download
|
||||
uses: forgejo/download-artifact@v3
|
||||
uses: actions/download-artifact@v3
|
||||
- name: Package deployment
|
||||
run: ${{ github.workspace }}/.forgejo/bin/deploy.sh
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ jobs:
|
|||
${{ github.workspace }}/.forgejo/bin/build.sh
|
||||
touch packages/dummy
|
||||
- name: Package upload
|
||||
uses: forgejo/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: package
|
||||
path: packages
|
||||
|
|
@ -49,6 +49,6 @@ jobs:
|
|||
- name: Repo pull
|
||||
uses: actions/checkout@v4
|
||||
- name: Package download
|
||||
uses: forgejo/download-artifact@v3
|
||||
uses: actions/download-artifact@v3
|
||||
- name: Package deployment
|
||||
run: ${{ github.workspace }}/.forgejo/bin/deploy.sh
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
# Contributor: Antoine Martin (ayakael) <dev@ayakael.net>
|
||||
# Maintainer: Antoine Martin (ayakael) <dev@ayakael.net>
|
||||
pkgname=signal-desktop
|
||||
pkgver=7.56.1
|
||||
pkgrel=1
|
||||
pkgver=7.69.0
|
||||
pkgrel=0
|
||||
pkgdesc="A messaging app for simple private communication with friends"
|
||||
url="https://github.com/signalapp/Signal-Desktop/"
|
||||
# same as electron
|
||||
|
|
@ -37,7 +37,6 @@ makedepends="
|
|||
glib-dev
|
||||
gn
|
||||
jsoncpp-dev
|
||||
libavif-dev
|
||||
libjpeg-turbo-dev
|
||||
libepoxy-dev
|
||||
libsecret-dev
|
||||
|
|
@ -67,10 +66,10 @@ makedepends="
|
|||
options="net !check"
|
||||
|
||||
# use _check_depends to validate this
|
||||
_libsignalver=0.72.1
|
||||
_ringrtcver=2.52.0
|
||||
_webrtcver=6998c
|
||||
_sqlcipherver=2.0.3
|
||||
_libsignalver=0.78.3
|
||||
_ringrtcver=2.57.0
|
||||
_webrtcver=7204c
|
||||
_sqlcipherver=2.4.4
|
||||
|
||||
source="
|
||||
https://github.com/signalapp/Signal-Desktop/archive/refs/tags/v$pkgver/Signal-Desktop-$pkgver.tar.gz
|
||||
|
|
@ -87,12 +86,14 @@ source="
|
|||
signal-rollback-locale-changes.patch
|
||||
signal-do-not-package-sqlcipher-deps.patch
|
||||
ringrtc-webrtc-renamed.patch
|
||||
ringrtc-use-sh.patch
|
||||
webrtc-shared-libs.patch
|
||||
webrtc-compiler.patch
|
||||
webrtc-gcc13.patch
|
||||
webrtc-rollback-red.patch
|
||||
webrtc-rollback-3rdparty-build-gn.patch
|
||||
webrtc-pipewire-1.4.patch
|
||||
webrtc-add-cstdint-include-patch-event.patch
|
||||
webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch
|
||||
webrtc-fix-declaration-that-change-meaning-inside-class.patch
|
||||
|
||||
signal-desktop.sh
|
||||
"
|
||||
|
|
@ -112,6 +113,10 @@ export CFLAGS="${CFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknow
|
|||
export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations"
|
||||
export CPPFLAGS="$CPPFLAGS -D__DATE__= -D__TIME__= -D__TIMESTAMP__="
|
||||
|
||||
# stdatomic from compiler-rt uses implicit function declaration
|
||||
export CFLAGS="$CFLAGS -Wno-implicit-function-declaration"
|
||||
export CXXFLAGS="$CXXFLAGS -Wno-implicit-function-declaration"
|
||||
|
||||
export CARGO_PROFILE_RELEASE_OPT_LEVEL=2
|
||||
export CARGO_PROFILE_RELEASE_STRIP="symbols"
|
||||
#export RUSTFLAGS="$RUSTFLAGS -C linker=clang"
|
||||
|
|
@ -136,7 +141,7 @@ _update_depends() {
|
|||
-e "s|^_ringrtcver=.*|_ringrtcver=$_ringrtcver|" \
|
||||
-e "s|^_webrtcver=.*|_webrtcver=$_webrtcver|" \
|
||||
-e "s|^_sqlcipherver=.*|_sqlcipherver=$_sqlcipherver|" \
|
||||
APKBUILD
|
||||
$APKBUILD
|
||||
}
|
||||
|
||||
# webrtc only, the other dependencies are fine with tarballs
|
||||
|
|
@ -223,7 +228,6 @@ prepare() {
|
|||
icu
|
||||
jsoncpp
|
||||
libaom
|
||||
libavif
|
||||
libdrm
|
||||
libjpeg
|
||||
libpng
|
||||
|
|
@ -329,6 +333,9 @@ build() {
|
|||
rtc_include_ilbc=false
|
||||
rtc_libvpx_build_vp9=true
|
||||
rtc_use_x11=false
|
||||
rustc_version=\"yes\"
|
||||
rust_bindgen_root=\"/usr\"
|
||||
rust_sysroot_absolute=\"/usr\"
|
||||
|
||||
build_with_mozilla=false
|
||||
chrome_pgo_phase=0
|
||||
|
|
@ -478,24 +485,26 @@ package() {
|
|||
}
|
||||
|
||||
sha512sums="
|
||||
cb5a3471ba6269bb36b95183152ec8e74e77cf605970fd1310b2435ee87ef024eb7a51750a5993abd10c036198e30ccdfdc5b6195c0381035bf7b1e3735e0e34 Signal-Desktop-7.56.1.tar.gz
|
||||
e7e08e2909080f34a6c9e65065cfd107e922415727dcdaf9b61aa0e9fb91c7906326c233b3bb7e26eb665e6b4a1b771e2af13e58d8f6ea0f79c39306c9a071cf libsignal-0.72.1.tar.gz
|
||||
37bf7c4d847117c4fcdf371ac84193b005e5f1ff37eec89e2a54ca8968e59945104587b3742b3de116aa0f6f825f3695baeb49b4b96f0268a4c9da0e324b5678 ringrtc-2.52.0.tar.gz
|
||||
ec503ba505ea84673773ce761f2108272a890c14fb33d194828045d8170023e8b450f15c3888af89e236cb59a812138216cd0dbd68a7ec62773318b71705c046 node-sqlcipher-2.0.3.tar.gz
|
||||
b43d6ba8d8a64de0715efdcf3c17f174eec359d3f4af123908d18d94c15d5d87339184aa4acd640b6a8c28b1a8ed4ca4e1a36e16bd66aa7914dc47d88be89002 webrtc-6998c.tar.zst
|
||||
d322c7d0e0eb947bf579d3b4a0c2de4850ea729ebd3871d3aee7d99a10cf1c00abe3c72b99a12b3afb7265dc9f5c0cda9de6c242eb490d6e4e0e9a7b6361ad81 Signal-Desktop-7.69.0.tar.gz
|
||||
fc2170bb029628efed5dbae795471026387e501bc2ca7075a5e210df6d81103608361c8163759c7d73f9e82b61e2a5e46d8bf32f40a0c5a19e5fc556a2ff1413 libsignal-0.78.3.tar.gz
|
||||
205da87c64a000cc439b2c7bfddb923eac5ab70a0611dab9858eb2e0c0a71227722e6d13eaba2a458807cf27ff93641b8f549580f5e1fc3781ab3c7fb29d9edb ringrtc-2.57.0.tar.gz
|
||||
79dd21548329b4ee409fa73b013c18ed4e85038aeef7a4cfe196fd6b5113279da8ad287a259fa6a6b546b52a5a6dd6ae2cb1050007043d25f76d7917dbbbc02d node-sqlcipher-2.4.4.tar.gz
|
||||
5dd61ebe525c592020a7246337dd837a8cd5de45b201afdc5b75cf3b25c5afcf6bbbae2bb677677807157697fdfb0be51681c0a8e68839e4f1eee30d3dbcad48 webrtc-7204c.tar.zst
|
||||
8d2d2d82c8546c2dd1fef161b61df79918f8c22235a56a46adb375a0beb4acef12c5fe53e67242a4be97f77adc522ff79b47949c352956c742a70d50f4179f7f libsignal-auditable.patch
|
||||
7ee747c8aaa9d6e9149fe0a031e3d4cc9e9c08f22c42076bd05e2acb86952f8170032613d13a53716010edfa3f26ad97b530e82460318eb46a42e28cf5faeb9d signal-use-system-sqlcipher.patch
|
||||
fc2af28645364cd85c106304a26811b036f6be048c52137fbbcc112870a84132a181f532563e0569b560fde3cf8c02480666a9b01d804b0008f97c728005b1c7 signal-disable-updates.patch
|
||||
ef3622da416a5bd2d4bea4f2a4fbb21a985f660d4acc17bbe66ce51ac1180ab92c0c843a5414ff56ea1deda87c2b0f611a299ca8ebe4d6a24df53626b36ceea8 signal-disable-updates.patch
|
||||
853de84d636f730694f17bcec63463fa7bfbdd0a7f7a64618a8fc6bc523ce1a9854b4c651753735af735c18101295d3efbe54f83ae0bccbed83c8c1fee3e7049 signal-update-links.patch
|
||||
882d6889b23a3ebc6449c8b6acec8c3853674a7e94f066d65b57bab674ba8c11d582ba2c760825cb67b9202716e6d8b7123001d1e9f9229e49a0b77e9d978265 signal-show-window-please.patch
|
||||
aca92e4de6cd005d660d7e8b99607de96ca2d7dc220e3465247d517e915e4d41a4b0eb519e85c5eca1c81cd8bac9821acd03ff57f1603918987829c6ea7757b4 signal-rollback-locale-changes.patch
|
||||
961568777b86f8fbcc73360252123686c9d1e16b2650f23d8afbc6d7580d53024f81b62e9e9cbdcd0031b5cf99854bd47c6dd4580197f2b27b8b4cbb51c6c9c9 signal-do-not-package-sqlcipher-deps.patch
|
||||
02a648bb8541a39c75fec2db39f024a27976afca41908eefa2fe1f2e30b05b5d59f980ccc930021c0b0c09ba8b0cbcae071e9f0dd530543c667adbc4272af552 ringrtc-webrtc-renamed.patch
|
||||
19d2e07bdc0b160ec542fcb0a3d94ae1e37dcb1b3455e57b278cf074f8aac625341b47f4f06a1f7eb5a197cb0f11754de8785ffd10876852972cbfafdc2615db ringrtc-use-sh.patch
|
||||
98a7e4df27c3ed56c5968ebc3ae8e08bfb54362d0c910f9af1d414079a6d5fe0f18aa570ae3c38042f4691af6a130cb3ff689625e26a3987720dd319a5f587b1 webrtc-shared-libs.patch
|
||||
897174fa3b1eaa74a3b2d7d861863a9f60550ddb0d7be700cd590600efdc3bd962f52c21e371276eaf8d5657c98fe8ade9853b0197b61a68d5dce6fa03b5899b webrtc-compiler.patch
|
||||
3f1095861a79862ab5a55c86d7e353d272974617afba39e4d4441024bede8d7b9b8e122da90d56a9c3c0965171803d6b9e29e91d78167a08c6bcc86b3eedab18 webrtc-gcc13.patch
|
||||
8f53dcf3264c5cec338f037e57a7770ec939ee06dfb0c5dfeab23967a3a64d3f861a6b5419766ac892676036b4522bce2f47279ca3658b5c0b6a31c82ac05053 webrtc-rollback-red.patch
|
||||
f8bd574a0de077a643ced26e8a0e3f162e014bbf91c957bbefd113883a70e2b63e483bf400b7e2da8d09edfe76d4f6a257f194a14124f344f1625c5632d12acb webrtc-rollback-3rdparty-build-gn.patch
|
||||
7fa0344a144d5b8f05d0962799b8ce1dbe8f2d403a311d4fbf802a2d032e6586a1268387052b529e809c4740a79d6737a63d7e37ea8902ce926b74309dd44fc3 webrtc-pipewire-1.4.patch
|
||||
2a83171eae579a756edbf95c3ded80cbe0cd0fdb4f19b4c73612837f7ea6f573125dde013a17c8e7ce08f101568bb73bfb86a945dc2d10dd91ad45632c69a132 webrtc-add-cstdint-include-patch-event.patch
|
||||
1520ca0993cd9df44401de001d1f49da924b8c9bd818c8f7fb47863af710cc2796306e786ad8522c9729dec6a1191d1f2d9e0e2ba2b678b9b8ea534b7bddc762 webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch
|
||||
ace87a2be03c6965012a87a10918c5923b10d5e74a7169c1e1384c15b34a367d0c47e806764c368cc30dad01a3dce54b50587abea9831130178db3806619abc8 webrtc-fix-declaration-that-change-meaning-inside-class.patch
|
||||
87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop.sh
|
||||
"
|
||||
|
|
|
|||
14
backports/signal-desktop/ringrtc-use-sh.patch
Normal file
14
backports/signal-desktop/ringrtc-use-sh.patch
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
diff --git a/ringrtc/src/node/package.json.orig b/ringrtc/src/node/package.json
|
||||
index 366caf2927f..eedeca3895e 100644
|
||||
--- a/ringrtc/src/node/package.json.orig
|
||||
+++ b/ringrtc/src/node/package.json
|
||||
@@ -16,7 +16,7 @@
|
||||
"virtual_audio": "dist/bin/virtual_audio.sh"
|
||||
},
|
||||
"scripts": {
|
||||
- "build": "tsc && bash scripts/build-help.sh",
|
||||
+ "build": "tsc && sh scripts/build-help.sh",
|
||||
"clean": "rimraf dist",
|
||||
"test": "electron-mocha --renderer --recursive dist/test --timeout 10000 --require source-map-support/register",
|
||||
"eslint": "eslint .",
|
||||
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
--- a/Signal-Desktop/config/production.json
|
||||
diff --git a/Signal-Desktop/config/production.json.orig b/Signal-Desktop/config/production.json
|
||||
index ee1fc6523d8..6fcb97f3a36 100644
|
||||
--- a/Signal-Desktop/config/production.json.orig
|
||||
+++ b/Signal-Desktop/config/production.json
|
||||
@@ -16,5 +16,5 @@
|
||||
"serverTrustRoot": "BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF",
|
||||
"genericServerPublicParams": "AByD873dTilmOSG0TjKrvpeaKEsUmIO8Vx9BeMmftwUs9v7ikPwM8P3OHyT0+X3EUMZrSe9VUp26Wai51Q9I8mdk0hX/yo7CeFGJyzoOqn8e/i4Ygbn5HoAyXJx5eXfIbqpc0bIxzju4H/HOQeOpt6h742qii5u/cbwOhFZCsMIbElZTaeU+BWMBQiZHIGHT5IE0qCordQKZ5iPZom0HeFa8Yq0ShuEyAl0WINBiY6xE3H/9WnvzXBbMuuk//eRxXgzO8ieCeK8FwQNxbfXqZm6Ro1cMhCOF3u7xoX83QhpN",
|
||||
"backupServerPublicParams": "AJwNSU55fsFCbgaxGRD11wO1juAs8Yr5GF8FPlGzzvdJJIKH5/4CC7ZJSOe3yL2vturVaRU2Cx0n751Vt8wkj1bozK3CBV1UokxV09GWf+hdVImLGjXGYLLhnI1J2TWEe7iWHyb553EEnRb5oxr9n3lUbNAJuRmFM7hrr0Al0F0wrDD4S8lo2mGaXe0MJCOM166F8oYRQqpFeEHfiLnxA1O8ZLh7vMdv4g9jI5phpRBTsJ5IjiJrWeP0zdIGHEssUeprDZ9OUJ14m0v61eYJMKsf59Bn+mAT2a7YfB+Don9O",
|
||||
"stripePublishableKey": "pk_live_6cmGZopuTsV8novGgJJW9JpC00vLIgtQ1D",
|
||||
- "updatesEnabled": true
|
||||
+ "updatesEnabled": false
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
diff --git a/webrtc/rtc_base/trace_event.h b/webrtc/rtc_base/trace_event.h
|
||||
index 3329abd..9ec7088 100644
|
||||
--- a/webrtc/rtc_base/trace_event.h
|
||||
+++ b/webrtc/rtc_base/trace_event.h
|
||||
@@ -11,6 +11,7 @@
|
||||
#ifndef RTC_BASE_TRACE_EVENT_H_
|
||||
#define RTC_BASE_TRACE_EVENT_H_
|
||||
|
||||
+#include <cstdint>
|
||||
#if defined(RTC_DISABLE_TRACE_EVENTS)
|
||||
#define RTC_TRACE_EVENTS_ENABLED 0
|
||||
#else
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
diff --git a/webrtc/p2p/base/port_interface.h b/webrtc/p2p/base/port_interface.h
|
||||
index 2335fc2..1484a14 100644
|
||||
--- a/webrtc/p2p/base/port_interface.h
|
||||
+++ b/webrtc/p2p/base/port_interface.h
|
||||
@@ -55,7 +55,7 @@
|
||||
virtual ~PortInterface();
|
||||
|
||||
virtual IceCandidateType Type() const = 0;
|
||||
- virtual const Network* Network() const = 0;
|
||||
+ virtual const ::webrtc::Network* Network() const = 0;
|
||||
|
||||
// Methods to set/get ICE role and tiebreaker values.
|
||||
virtual void SetIceRole(IceRole role) = 0;
|
||||
diff --git a/webrtc/pc/codec_vendor.h b/webrtc/pc/codec_vendor.h
|
||||
index aaddc4f..719a082 100644
|
||||
--- a/webrtc/pc/codec_vendor.h
|
||||
+++ b/webrtc/pc/codec_vendor.h
|
||||
@@ -119,7 +119,7 @@
|
||||
class CodecLookupHelper {
|
||||
public:
|
||||
virtual ~CodecLookupHelper() = default;
|
||||
- virtual PayloadTypeSuggester* PayloadTypeSuggester() = 0;
|
||||
+ virtual ::webrtc::PayloadTypeSuggester* PayloadTypeSuggester() = 0;
|
||||
// Look up the codec vendor to use, depending on context.
|
||||
// This call may get additional arguments in the future, to aid
|
||||
// in selection of the correct context.
|
||||
diff --git a/webrtc/pc/jsep_transport.h b/webrtc/pc/jsep_transport.h
|
||||
index 017aad7..50dc991 100644
|
||||
--- a/webrtc/pc/jsep_transport.h
|
||||
+++ b/webrtc/pc/jsep_transport.h
|
||||
@@ -115,14 +115,12 @@
|
||||
}
|
||||
|
||||
RTCError SetLocalJsepTransportDescription(
|
||||
- const JsepTransportDescription& jsep_description,
|
||||
- SdpType type);
|
||||
+ const JsepTransportDescription& jsep_description, SdpType type);
|
||||
|
||||
// Set the remote TransportDescription to be used by DTLS and ICE channels
|
||||
// that are part of this Transport.
|
||||
RTCError SetRemoteJsepTransportDescription(
|
||||
- const JsepTransportDescription& jsep_description,
|
||||
- SdpType type);
|
||||
+ const JsepTransportDescription& jsep_description, SdpType type);
|
||||
RTCError AddRemoteCandidates(const Candidates& candidates);
|
||||
|
||||
// Set the "needs-ice-restart" flag as described in JSEP. After the flag is
|
||||
@@ -204,7 +202,9 @@
|
||||
return rtp_dtls_transport_;
|
||||
}
|
||||
|
||||
- scoped_refptr<SctpTransport> SctpTransport() const { return sctp_transport_; }
|
||||
+ scoped_refptr<::webrtc::SctpTransport> SctpTransport() const {
|
||||
+ return sctp_transport_;
|
||||
+ }
|
||||
|
||||
// TODO(bugs.webrtc.org/9719): Delete method, update callers to use
|
||||
// SctpTransport() instead.
|
||||
|
|
@ -0,0 +1,469 @@
|
|||
diff --git a/webrtc/pc/codec_vendor.cc b/webrtc/pc/codec_vendor.cc
|
||||
index 42d52f6..e45516c 100644
|
||||
--- a/webrtc/pc/codec_vendor.cc
|
||||
+++ b/webrtc/pc/codec_vendor.cc
|
||||
@@ -39,7 +39,6 @@
|
||||
#include "pc/rtp_media_utils.h"
|
||||
#include "pc/session_description.h"
|
||||
#include "pc/typed_codec_vendor.h"
|
||||
-#include "pc/used_ids.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "rtc_base/string_encode.h"
|
||||
@@ -54,11 +53,6 @@
|
||||
|
||||
namespace {
|
||||
|
||||
-using webrtc::PayloadTypeSuggester;
|
||||
-using webrtc::RTCError;
|
||||
-using webrtc::RTCErrorOr;
|
||||
-using webrtc::RtpTransceiverDirection;
|
||||
-
|
||||
bool IsRtxCodec(const RtpCodecCapability& capability) {
|
||||
return absl::EqualsIgnoreCase(capability.name, kRtxCodecName);
|
||||
}
|
||||
@@ -75,8 +69,7 @@
|
||||
std::optional<Codec> FindMatchingCodec(const CodecList& codecs1,
|
||||
const CodecList& codecs2,
|
||||
const Codec& codec_to_match) {
|
||||
- return webrtc::FindMatchingCodec(codecs1.codecs(), codecs2.codecs(),
|
||||
- codec_to_match);
|
||||
+ return FindMatchingCodec(codecs1.codecs(), codecs2.codecs(), codec_to_match);
|
||||
}
|
||||
|
||||
void StripCNCodecs(CodecList& audio_codecs) {
|
||||
@@ -105,7 +98,7 @@
|
||||
}
|
||||
|
||||
int associated_pt;
|
||||
- if (!webrtc::FromString(associated_pt_str, &associated_pt)) {
|
||||
+ if (!FromString(associated_pt_str, &associated_pt)) {
|
||||
RTC_LOG(LS_WARNING) << "Couldn't convert payload type " << associated_pt_str
|
||||
<< " of RTX codec " << rtx_codec.id
|
||||
<< " to an integer.";
|
||||
@@ -136,14 +129,14 @@
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
- std::vector<absl::string_view> redundant_payloads = webrtc::split(fmtp, '/');
|
||||
+ std::vector<absl::string_view> redundant_payloads = split(fmtp, '/');
|
||||
if (redundant_payloads.size() < 2) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
absl::string_view associated_pt_str = redundant_payloads[0];
|
||||
int associated_pt;
|
||||
- if (!webrtc::FromString(associated_pt_str, &associated_pt)) {
|
||||
+ if (!FromString(associated_pt_str, &associated_pt)) {
|
||||
RTC_LOG(LS_WARNING) << "Couldn't convert first payload type "
|
||||
<< associated_pt_str << " of RED codec " << red_codec.id
|
||||
<< " to an integer.";
|
||||
@@ -182,7 +175,21 @@
|
||||
return suggestion.MoveError();
|
||||
}
|
||||
codec.id = suggestion.value();
|
||||
- offered_codecs.push_back(codec);
|
||||
+ // The rewrite of the parameter may have turned the codec into
|
||||
+ // one that is already present.
|
||||
+ bool skip = false;
|
||||
+ for (const Codec& present_codec : offered_codecs) {
|
||||
+ if (present_codec.id == codec.id) {
|
||||
+ RTC_DCHECK(MatchesWithReferenceAttributes(present_codec, codec))
|
||||
+ << "Codec mismatch: present " << present_codec << ", new "
|
||||
+ << codec;
|
||||
+ skip = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ if (!skip) {
|
||||
+ offered_codecs.push_back(codec);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,7 +239,7 @@
|
||||
}
|
||||
std::string red_param = absl::StrCat(matching_codec->id);
|
||||
red_codec.params[kCodecParamNotInNameValueFormat] =
|
||||
- webrtc::StrJoin(std::vector{red_param, red_param}, "/");
|
||||
+ StrJoin(std::vector{red_param, red_param}, "/");
|
||||
}
|
||||
RTCErrorOr<PayloadType> suggestion =
|
||||
pt_suggester.SuggestPayloadType(mid, red_codec);
|
||||
@@ -240,84 +247,25 @@
|
||||
return suggestion.MoveError();
|
||||
}
|
||||
red_codec.id = suggestion.value();
|
||||
- offered_codecs.push_back(red_codec);
|
||||
+ // The rewrite of the parameter may have turned the RED codec into
|
||||
+ // one that is already present.
|
||||
+ bool skip = false;
|
||||
+ for (const Codec& present_codec : offered_codecs) {
|
||||
+ if (present_codec.id == red_codec.id) {
|
||||
+ RTC_DCHECK(MatchesWithReferenceAttributes(present_codec, red_codec));
|
||||
+ skip = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ if (!skip) {
|
||||
+ offered_codecs.push_back(red_codec);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
offered_codecs.CheckConsistency();
|
||||
return RTCError::OK();
|
||||
}
|
||||
|
||||
-// Adds all codecs from `reference_codecs` to `offered_codecs` that don't
|
||||
-// already exist in `offered_codecs` and ensure the payload types don't
|
||||
-// collide.
|
||||
-// OLD VERSION - uses UsedPayloadTypes
|
||||
-void MergeCodecs(const CodecList& reference_codecs,
|
||||
- CodecList& offered_codecs,
|
||||
- UsedPayloadTypes* used_pltypes) {
|
||||
- // Add all new codecs that are not RTX/RED codecs.
|
||||
- // The two-pass splitting of the loops means preferring payload types
|
||||
- // of actual codecs with respect to collisions.
|
||||
- for (const Codec& reference_codec : reference_codecs) {
|
||||
- if (reference_codec.GetResiliencyType() != Codec::ResiliencyType::kRtx &&
|
||||
- reference_codec.GetResiliencyType() != Codec::ResiliencyType::kRed &&
|
||||
- !FindMatchingCodec(reference_codecs, offered_codecs, reference_codec)) {
|
||||
- Codec codec = reference_codec;
|
||||
- used_pltypes->FindAndSetIdUsed(&codec);
|
||||
- offered_codecs.push_back(codec);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- // Add all new RTX or RED codecs.
|
||||
- for (const Codec& reference_codec : reference_codecs) {
|
||||
- if (reference_codec.GetResiliencyType() == Codec::ResiliencyType::kRtx &&
|
||||
- !FindMatchingCodec(reference_codecs, offered_codecs, reference_codec)) {
|
||||
- Codec rtx_codec = reference_codec;
|
||||
- const Codec* associated_codec =
|
||||
- GetAssociatedCodecForRtx(reference_codecs, rtx_codec);
|
||||
- if (!associated_codec) {
|
||||
- continue;
|
||||
- }
|
||||
- // Find a codec in the offered list that matches the reference codec.
|
||||
- // Its payload type may be different than the reference codec.
|
||||
- std::optional<Codec> matching_codec = FindMatchingCodec(
|
||||
- reference_codecs, offered_codecs, *associated_codec);
|
||||
- if (!matching_codec) {
|
||||
- RTC_LOG(LS_WARNING)
|
||||
- << "Couldn't find matching " << associated_codec->name << " codec.";
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
- rtx_codec.params[kCodecParamAssociatedPayloadType] =
|
||||
- absl::StrCat(matching_codec->id);
|
||||
- used_pltypes->FindAndSetIdUsed(&rtx_codec);
|
||||
- offered_codecs.push_back(rtx_codec);
|
||||
- } else if (reference_codec.GetResiliencyType() ==
|
||||
- Codec::ResiliencyType::kRed &&
|
||||
- !FindMatchingCodec(reference_codecs, offered_codecs,
|
||||
- reference_codec)) {
|
||||
- Codec red_codec = reference_codec;
|
||||
- const Codec* associated_codec =
|
||||
- GetAssociatedCodecForRed(reference_codecs, red_codec);
|
||||
- if (associated_codec) {
|
||||
- std::optional<Codec> matching_codec = FindMatchingCodec(
|
||||
- reference_codecs, offered_codecs, *associated_codec);
|
||||
- if (!matching_codec) {
|
||||
- RTC_LOG(LS_WARNING) << "Couldn't find matching "
|
||||
- << associated_codec->name << " codec.";
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
- red_codec.params[kCodecParamNotInNameValueFormat] =
|
||||
- absl::StrCat(matching_codec->id) + "/" +
|
||||
- absl::StrCat(matching_codec->id);
|
||||
- }
|
||||
- used_pltypes->FindAndSetIdUsed(&red_codec);
|
||||
- offered_codecs.push_back(red_codec);
|
||||
- }
|
||||
- }
|
||||
- offered_codecs.CheckConsistency();
|
||||
-}
|
||||
-
|
||||
// `codecs` is a full list of codecs with correct payload type mappings, which
|
||||
// don't conflict with mappings of the other media type; `supported_codecs` is
|
||||
// a list filtered for the media section`s direction but with default payload
|
||||
@@ -382,7 +330,7 @@
|
||||
codec.params.find(kCodecParamNotInNameValueFormat);
|
||||
if (fmtp != codec.params.end()) {
|
||||
std::vector<absl::string_view> redundant_payloads =
|
||||
- webrtc::split(fmtp->second, '/');
|
||||
+ split(fmtp->second, '/');
|
||||
if (!redundant_payloads.empty() &&
|
||||
redundant_payloads[0] == id) {
|
||||
if (!red_was_added) {
|
||||
@@ -443,7 +391,7 @@
|
||||
for (const Codec& supported_codec : supported_codecs) {
|
||||
if (absl::EqualsIgnoreCase(supported_codec.name, kH265CodecName)) {
|
||||
std::optional<H265ProfileTierLevel> supported_ptl =
|
||||
- webrtc::ParseSdpForH265ProfileTierLevel(supported_codec.params);
|
||||
+ ParseSdpForH265ProfileTierLevel(supported_codec.params);
|
||||
if (supported_ptl.has_value()) {
|
||||
supported_h265_profiles[supported_ptl->profile] =
|
||||
supported_ptl->level;
|
||||
@@ -458,14 +406,14 @@
|
||||
for (auto& filtered_codec : filtered_codecs) {
|
||||
if (absl::EqualsIgnoreCase(filtered_codec.name, kH265CodecName)) {
|
||||
std::optional<H265ProfileTierLevel> filtered_ptl =
|
||||
- webrtc::ParseSdpForH265ProfileTierLevel(filtered_codec.params);
|
||||
+ ParseSdpForH265ProfileTierLevel(filtered_codec.params);
|
||||
if (filtered_ptl.has_value()) {
|
||||
auto it = supported_h265_profiles.find(filtered_ptl->profile);
|
||||
|
||||
if (it != supported_h265_profiles.end() &&
|
||||
filtered_ptl->level != it->second) {
|
||||
filtered_codec.params[kH265FmtpLevelId] =
|
||||
- webrtc::H265LevelToString(it->second);
|
||||
+ H265LevelToString(it->second);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -506,13 +454,13 @@
|
||||
}
|
||||
}
|
||||
if (absl::EqualsIgnoreCase(ours.name, kH264CodecName)) {
|
||||
- webrtc::H264GenerateProfileLevelIdForAnswer(ours.params, theirs->params,
|
||||
- &negotiated.params);
|
||||
+ H264GenerateProfileLevelIdForAnswer(ours.params, theirs->params,
|
||||
+ &negotiated.params);
|
||||
}
|
||||
#ifdef RTC_ENABLE_H265
|
||||
if (absl::EqualsIgnoreCase(ours.name, kH265CodecName)) {
|
||||
- webrtc::H265GenerateProfileTierLevelForAnswer(
|
||||
- ours.params, theirs->params, &negotiated.params);
|
||||
+ H265GenerateProfileTierLevelForAnswer(ours.params, theirs->params,
|
||||
+ &negotiated.params);
|
||||
NegotiateTxMode(ours, *theirs, &negotiated);
|
||||
}
|
||||
#endif
|
||||
@@ -534,7 +482,7 @@
|
||||
continue;
|
||||
}
|
||||
int apt_value;
|
||||
- if (!webrtc::FromString(apt_str, &apt_value)) {
|
||||
+ if (!FromString(apt_str, &apt_value)) {
|
||||
RTC_LOG(LS_WARNING) << "Unconvertable apt value";
|
||||
continue;
|
||||
}
|
||||
@@ -634,9 +582,11 @@
|
||||
}
|
||||
// Add our codecs that are not in the current description.
|
||||
if (media_description_options.type == MediaType::AUDIO) {
|
||||
- MergeCodecs(all_audio_codecs(), mid, codecs, pt_suggester);
|
||||
+ MergeCodecs(audio_recv_codecs(), mid, codecs, pt_suggester);
|
||||
+ MergeCodecs(audio_send_codecs(), mid, codecs, pt_suggester);
|
||||
} else {
|
||||
- MergeCodecs(all_video_codecs(), mid, codecs, pt_suggester);
|
||||
+ MergeCodecs(video_recv_codecs(), mid, codecs, pt_suggester);
|
||||
+ MergeCodecs(video_send_codecs(), mid, codecs, pt_suggester);
|
||||
}
|
||||
CodecList filtered_codecs;
|
||||
CodecList supported_codecs =
|
||||
@@ -667,20 +617,11 @@
|
||||
const MediaContentDescription* mcd =
|
||||
current_content->media_description();
|
||||
for (const Codec& codec : mcd->codecs()) {
|
||||
- if (webrtc::FindMatchingCodec(mcd->codecs(), codecs.codecs(),
|
||||
- codec)) {
|
||||
+ if (FindMatchingCodec(mcd->codecs(), codecs.codecs(), codec)) {
|
||||
filtered_codecs.push_back(codec);
|
||||
}
|
||||
}
|
||||
}
|
||||
- // Note what PTs are already in use.
|
||||
- UsedPayloadTypes
|
||||
- used_pltypes; // Used to avoid pt collisions in filtered_codecs
|
||||
- for (auto& codec : filtered_codecs) {
|
||||
- // Note: This may change PTs. Doing so woud indicate an error, but
|
||||
- // UsedPayloadTypes doesn't offer a means to make the distinction.
|
||||
- used_pltypes.FindAndSetIdUsed(&codec);
|
||||
- }
|
||||
// Add other supported codecs.
|
||||
for (const Codec& codec : supported_codecs) {
|
||||
std::optional<Codec> found_codec =
|
||||
@@ -707,8 +648,11 @@
|
||||
changed_referenced_codec->id);
|
||||
}
|
||||
}
|
||||
- // Quick fix for b/395077842: Remap the codec if it collides.
|
||||
- used_pltypes.FindAndSetIdUsed(&(*found_codec));
|
||||
+ auto pt_or_error = pt_suggester.SuggestPayloadType(mid, *found_codec);
|
||||
+ if (!pt_or_error.ok()) {
|
||||
+ return pt_or_error.MoveError();
|
||||
+ }
|
||||
+ found_codec->id = pt_or_error.value();
|
||||
filtered_codecs.push_back(*found_codec);
|
||||
}
|
||||
}
|
||||
@@ -763,9 +707,11 @@
|
||||
}
|
||||
// Add all our supported codecs
|
||||
if (media_description_options.type == MediaType::AUDIO) {
|
||||
- MergeCodecs(all_audio_codecs(), mid, codecs, pt_suggester);
|
||||
+ MergeCodecs(audio_recv_codecs(), mid, codecs, pt_suggester);
|
||||
+ MergeCodecs(audio_send_codecs(), mid, codecs, pt_suggester);
|
||||
} else {
|
||||
- MergeCodecs(all_video_codecs(), mid, codecs, pt_suggester);
|
||||
+ MergeCodecs(video_recv_codecs(), mid, codecs, pt_suggester);
|
||||
+ MergeCodecs(video_send_codecs(), mid, codecs, pt_suggester);
|
||||
}
|
||||
CodecList filtered_codecs;
|
||||
CodecList negotiated_codecs;
|
||||
@@ -794,8 +740,8 @@
|
||||
const MediaContentDescription* mcd =
|
||||
current_content->media_description();
|
||||
for (const Codec& codec : mcd->codecs()) {
|
||||
- if (std::optional<Codec> found_codec = webrtc::FindMatchingCodec(
|
||||
- mcd->codecs(), codecs.codecs(), codec)) {
|
||||
+ if (std::optional<Codec> found_codec =
|
||||
+ FindMatchingCodec(mcd->codecs(), codecs.codecs(), codec)) {
|
||||
filtered_codecs.push_back(*found_codec);
|
||||
}
|
||||
}
|
||||
@@ -913,8 +859,7 @@
|
||||
case RtpTransceiverDirection::kSendRecv:
|
||||
case RtpTransceiverDirection::kStopped:
|
||||
case RtpTransceiverDirection::kInactive:
|
||||
- return GetVideoCodecsForOffer(
|
||||
- webrtc::RtpTransceiverDirectionReversed(offer));
|
||||
+ return GetVideoCodecsForOffer(RtpTransceiverDirectionReversed(offer));
|
||||
case RtpTransceiverDirection::kSendOnly:
|
||||
return video_send_codecs_.codecs();
|
||||
case RtpTransceiverDirection::kRecvOnly:
|
||||
@@ -948,8 +893,7 @@
|
||||
case RtpTransceiverDirection::kSendRecv:
|
||||
case RtpTransceiverDirection::kStopped:
|
||||
case RtpTransceiverDirection::kInactive:
|
||||
- return GetAudioCodecsForOffer(
|
||||
- webrtc::RtpTransceiverDirectionReversed(offer));
|
||||
+ return GetAudioCodecsForOffer(RtpTransceiverDirectionReversed(offer));
|
||||
case RtpTransceiverDirection::kSendOnly:
|
||||
return audio_send_codecs_.codecs();
|
||||
case RtpTransceiverDirection::kRecvOnly:
|
||||
@@ -958,43 +902,6 @@
|
||||
RTC_CHECK_NOTREACHED();
|
||||
}
|
||||
|
||||
-CodecList CodecVendor::all_video_codecs() const {
|
||||
- CodecList all_codecs;
|
||||
- UsedPayloadTypes used_payload_types;
|
||||
- for (const Codec& codec : video_recv_codecs_.codecs()) {
|
||||
- Codec codec_mutable = codec;
|
||||
- used_payload_types.FindAndSetIdUsed(&codec_mutable);
|
||||
- all_codecs.push_back(codec_mutable);
|
||||
- }
|
||||
-
|
||||
- // Use MergeCodecs to merge the second half of our list as it already checks
|
||||
- // and fixes problems with duplicate payload types.
|
||||
- MergeCodecs(video_send_codecs_.codecs(), all_codecs, &used_payload_types);
|
||||
-
|
||||
- return all_codecs;
|
||||
-}
|
||||
-
|
||||
-CodecList CodecVendor::all_audio_codecs() const {
|
||||
- // Compute the audio codecs union.
|
||||
- CodecList codecs;
|
||||
- for (const Codec& send : audio_send_codecs_.codecs()) {
|
||||
- codecs.push_back(send);
|
||||
- if (!FindMatchingCodec(audio_send_codecs_.codecs(),
|
||||
- audio_recv_codecs_.codecs(), send)) {
|
||||
- // It doesn't make sense to have an RTX codec we support sending but not
|
||||
- // receiving.
|
||||
- RTC_DCHECK(send.GetResiliencyType() != Codec::ResiliencyType::kRtx);
|
||||
- }
|
||||
- }
|
||||
- for (const Codec& recv : audio_recv_codecs_.codecs()) {
|
||||
- if (!FindMatchingCodec(audio_recv_codecs_.codecs(),
|
||||
- audio_send_codecs_.codecs(), recv)) {
|
||||
- codecs.push_back(recv);
|
||||
- }
|
||||
- }
|
||||
- return codecs;
|
||||
-}
|
||||
-
|
||||
CodecList CodecVendor::audio_sendrecv_codecs() const {
|
||||
// Use NegotiateCodecs to merge our codec lists, since the operation is
|
||||
// essentially the same. Put send_codecs as the offered_codecs, which is the
|
||||
diff --git a/webrtc/pc/wcodec_vendor.h b/webrtc/pc/codec_vendor.h
|
||||
index 1472225..4a3a8d9 100644
|
||||
--- a/webrtc/pc/codec_vendor.h
|
||||
+++ b/webrtc/pc/codec_vendor.h
|
||||
@@ -102,9 +102,6 @@
|
||||
const RtpTransceiverDirection& offer,
|
||||
const RtpTransceiverDirection& answer) const;
|
||||
|
||||
- CodecList all_video_codecs() const;
|
||||
- CodecList all_audio_codecs() const;
|
||||
-
|
||||
TypedCodecVendor audio_send_codecs_;
|
||||
TypedCodecVendor audio_recv_codecs_;
|
||||
|
||||
diff --git a/webrtc/pc/used_ids.h b/webrtc/pc/used_ids.h
|
||||
index fe80531..f9d825c 100644
|
||||
--- a/webrtc/pc/used_ids.h
|
||||
+++ b/webrtc/pc/used_ids.h
|
||||
@@ -14,9 +14,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "api/rtp_parameters.h"
|
||||
-#include "media/base/codec.h"
|
||||
#include "rtc_base/checks.h"
|
||||
-#include "rtc_base/logging.h"
|
||||
|
||||
namespace webrtc {
|
||||
template <typename IdStruct>
|
||||
@@ -88,41 +86,6 @@
|
||||
std::set<int> id_set_;
|
||||
};
|
||||
|
||||
-// Helper class used for finding duplicate RTP payload types among audio, video
|
||||
-// and data codecs. When bundle is used the payload types may not collide.
|
||||
-class UsedPayloadTypes : public UsedIds<Codec> {
|
||||
- public:
|
||||
- UsedPayloadTypes()
|
||||
- : UsedIds<Codec>(kFirstDynamicPayloadTypeLowerRange,
|
||||
- kLastDynamicPayloadTypeUpperRange) {}
|
||||
-
|
||||
- // Check if a payload type is valid. The range [64-95] is forbidden
|
||||
- // when rtcp-mux is used.
|
||||
- static bool IsIdValid(Codec codec, bool rtcp_mux) {
|
||||
- if (rtcp_mux && (codec.id > kLastDynamicPayloadTypeLowerRange &&
|
||||
- codec.id < kFirstDynamicPayloadTypeUpperRange)) {
|
||||
- return false;
|
||||
- }
|
||||
- return codec.id >= 0 && codec.id <= kLastDynamicPayloadTypeUpperRange;
|
||||
- }
|
||||
-
|
||||
- protected:
|
||||
- bool IsIdUsed(int new_id) override {
|
||||
- // Range marked for RTCP avoidance is "used".
|
||||
- if (new_id > kLastDynamicPayloadTypeLowerRange &&
|
||||
- new_id < kFirstDynamicPayloadTypeUpperRange)
|
||||
- return true;
|
||||
- return UsedIds<Codec>::IsIdUsed(new_id);
|
||||
- }
|
||||
-
|
||||
- private:
|
||||
- static const int kFirstDynamicPayloadTypeLowerRange = 35;
|
||||
- static const int kLastDynamicPayloadTypeLowerRange = 63;
|
||||
-
|
||||
- static const int kFirstDynamicPayloadTypeUpperRange = 96;
|
||||
- static const int kLastDynamicPayloadTypeUpperRange = 127;
|
||||
-};
|
||||
-
|
||||
// Helper class used for finding duplicate RTP Header extension ids among
|
||||
// audio and video extensions.
|
||||
class UsedRtpHeaderExtensionIds : public UsedIds<RtpExtension> {
|
||||
@@ -190,7 +153,6 @@
|
||||
#ifdef WEBRTC_ALLOW_DEPRECATED_NAMESPACES
|
||||
namespace cricket {
|
||||
using ::webrtc::UsedIds;
|
||||
-using ::webrtc::UsedPayloadTypes;
|
||||
using ::webrtc::UsedRtpHeaderExtensionIds;
|
||||
} // namespace cricket
|
||||
#endif // WEBRTC_ALLOW_DEPRECATED_NAMESPACES
|
||||
Loading…
Add table
Add a link
Reference in a new issue