[3.22] backports/signal-desktop: upgrade to 7.69.0 #1596

Merged
forge merged 2 commits from signal-desktop/upgrade-7.69.0 into v3.22 2025-09-07 02:00:19 +00:00
9 changed files with 591 additions and 27 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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
"

View 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 .",

View file

@ -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
}

View file

@ -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

View file

@ -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.

View file

@ -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