mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00
Remove all split channels related code
Bug: webrtc:13931 Change-Id: I93b8ca0ba1ec15bf260236bbc914b41fbb30aa58 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/310680 Commit-Queue: Florent Castelli <orphis@webrtc.org> Reviewed-by: Jeremy Leconte <jleconte@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#40376}
This commit is contained in:
parent
9c62b32d28
commit
d797cb6ca7
32 changed files with 187 additions and 2724 deletions
1
BUILD.gn
1
BUILD.gn
|
@ -64,7 +64,6 @@ if (!build_with_chromium) {
|
|||
"modules/video_capture:video_capture_internal_impl",
|
||||
"modules/video_coding:video_codec_perf_tests",
|
||||
"net/dcsctp:dcsctp_unittests",
|
||||
"pc:peer_connection_mediachannel_split_unittests",
|
||||
"pc:peerconnection_unittests",
|
||||
"pc:rtc_pc_unittests",
|
||||
"pc:slow_peer_connection_unittests",
|
||||
|
|
|
@ -173,27 +173,6 @@
|
|||
"test": "modules_unittests",
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
},
|
||||
"resultdb": {
|
||||
"enable": true,
|
||||
"has_native_resultdb_integration": true
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"android_devices": "1",
|
||||
"device_type": "walleye",
|
||||
"os": "Android"
|
||||
}
|
||||
],
|
||||
"service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
|
||||
},
|
||||
"test": "peer_connection_mediachannel_split_unittests",
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
|
@ -665,27 +644,6 @@
|
|||
"test": "modules_unittests",
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
},
|
||||
"resultdb": {
|
||||
"enable": true,
|
||||
"has_native_resultdb_integration": true
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"android_devices": "1",
|
||||
"device_type": "walleye",
|
||||
"os": "Android"
|
||||
}
|
||||
],
|
||||
"service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
|
||||
},
|
||||
"test": "peer_connection_mediachannel_split_unittests",
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
|
@ -1186,27 +1144,6 @@
|
|||
"test": "modules_unittests",
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
},
|
||||
"resultdb": {
|
||||
"enable": true,
|
||||
"has_native_resultdb_integration": true
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"android_devices": "1",
|
||||
"device_type": "walleye",
|
||||
"os": "Android"
|
||||
}
|
||||
],
|
||||
"service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
|
||||
},
|
||||
"test": "peer_connection_mediachannel_split_unittests",
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
|
@ -1678,27 +1615,6 @@
|
|||
"test": "modules_unittests",
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
},
|
||||
"resultdb": {
|
||||
"enable": true,
|
||||
"has_native_resultdb_integration": true
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"android_devices": "1",
|
||||
"device_type": "walleye",
|
||||
"os": "Android"
|
||||
}
|
||||
],
|
||||
"service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
|
||||
},
|
||||
"test": "peer_connection_mediachannel_split_unittests",
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
|
@ -2435,25 +2351,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -2844,25 +2741,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-20.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -3234,25 +3112,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -3624,25 +3483,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -4033,25 +3873,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -4442,25 +4263,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -4833,25 +4635,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -5225,25 +5008,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -5635,25 +5399,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -6072,26 +5817,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cores": "12",
|
||||
"cpu": "x86-64",
|
||||
"os": "Mac-12"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -6483,26 +6208,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cores": "12",
|
||||
"cpu": "x86-64",
|
||||
"os": "Mac-12"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -6887,25 +6592,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Mac-12"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -7297,25 +6983,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "arm64-64-Apple_M1",
|
||||
"os": "Mac-12"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -7714,25 +7381,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Windows-10-19045"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -8104,25 +7752,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Windows-10-19045"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -8494,25 +8123,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Windows-10-19045"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -8884,25 +8494,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Windows-10-19045"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
|
|
@ -71,10 +71,6 @@
|
|||
"label": "//modules:modules_unittests",
|
||||
"type": "windowed_test_launcher",
|
||||
},
|
||||
"peer_connection_mediachannel_split_unittests": {
|
||||
"label": "//pc:peer_connection_mediachannel_split_unittests",
|
||||
"type": "console_test_launcher",
|
||||
},
|
||||
"peerconnection_unittests": {
|
||||
"label": "//pc:peerconnection_unittests",
|
||||
"type": "console_test_launcher",
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
'modules_unittests': {
|
||||
'mixins': ['shards-6'],
|
||||
},
|
||||
'peer_connection_mediachannel_split_unittests': {},
|
||||
'peerconnection_unittests': {
|
||||
'mixins': ['shards-4'],
|
||||
},
|
||||
|
@ -64,7 +63,6 @@
|
|||
'modules_unittests': {
|
||||
'mixins': ['shards-6'],
|
||||
},
|
||||
'peer_connection_mediachannel_split_unittests': {},
|
||||
'peerconnection_unittests': {
|
||||
'mixins': ['shards-4'],
|
||||
},
|
||||
|
|
|
@ -173,27 +173,6 @@
|
|||
"test": "modules_unittests",
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
},
|
||||
"resultdb": {
|
||||
"enable": true,
|
||||
"has_native_resultdb_integration": true
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"android_devices": "1",
|
||||
"device_type": "walleye",
|
||||
"os": "Android"
|
||||
}
|
||||
],
|
||||
"service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
|
||||
},
|
||||
"test": "peer_connection_mediachannel_split_unittests",
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
|
@ -690,27 +669,6 @@
|
|||
"test": "modules_unittests",
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
},
|
||||
"resultdb": {
|
||||
"enable": true,
|
||||
"has_native_resultdb_integration": true
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"android_devices": "1",
|
||||
"device_type": "walleye",
|
||||
"os": "Android"
|
||||
}
|
||||
],
|
||||
"service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
|
||||
},
|
||||
"test": "peer_connection_mediachannel_split_unittests",
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
|
@ -1207,27 +1165,6 @@
|
|||
"test": "modules_unittests",
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
},
|
||||
"resultdb": {
|
||||
"enable": true,
|
||||
"has_native_resultdb_integration": true
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"android_devices": "1",
|
||||
"device_type": "walleye",
|
||||
"os": "Android"
|
||||
}
|
||||
],
|
||||
"service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
|
||||
},
|
||||
"test": "peer_connection_mediachannel_split_unittests",
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
|
@ -1750,27 +1687,6 @@
|
|||
"test": "modules_unittests",
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
},
|
||||
"resultdb": {
|
||||
"enable": true,
|
||||
"has_native_resultdb_integration": true
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"android_devices": "1",
|
||||
"device_type": "walleye",
|
||||
"os": "Android"
|
||||
}
|
||||
],
|
||||
"service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
|
||||
},
|
||||
"test": "peer_connection_mediachannel_split_unittests",
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_gtest_merge.py"
|
||||
|
@ -5699,25 +5615,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -6120,26 +6017,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"isolate_profile_data": true,
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"isolate_profile_data": true,
|
||||
|
@ -6617,25 +6494,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -7027,25 +6885,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -7460,25 +7299,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-20.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -7850,25 +7670,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -8329,25 +8130,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -8719,25 +8501,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -9128,25 +8891,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -9537,25 +9281,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -9927,25 +9652,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Ubuntu-18.04"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -10323,26 +10029,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cores": "12",
|
||||
"cpu": "x86-64",
|
||||
"os": "Mac-12"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -10735,26 +10421,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cores": "12",
|
||||
"cpu": "x86-64",
|
||||
"os": "Mac-12"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -11139,25 +10805,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "arm64-64-Apple_M1",
|
||||
"os": "Mac-12"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -11529,25 +11176,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Mac-12"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -11989,25 +11617,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "arm64-64-Apple_M1",
|
||||
"os": "Mac-12"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -12379,25 +11988,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Windows-10-19045"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -12773,25 +12363,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Windows-10-19045"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -13163,25 +12734,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Windows-10-19045"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -13553,25 +13105,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Windows-10-19045"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
@ -13943,25 +13476,6 @@
|
|||
},
|
||||
"test_id_prefix": "ninja://modules:modules_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peer_connection_mediachannel_split_unittests",
|
||||
"merge": {
|
||||
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
|
||||
},
|
||||
"name": "peer_connection_mediachannel_split_unittests",
|
||||
"resultdb": {
|
||||
"result_format": "json"
|
||||
},
|
||||
"swarming": {
|
||||
"dimension_sets": [
|
||||
{
|
||||
"cpu": "x86-64",
|
||||
"os": "Windows-10-19045"
|
||||
}
|
||||
]
|
||||
},
|
||||
"test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/"
|
||||
},
|
||||
{
|
||||
"isolate_name": "peerconnection_unittests",
|
||||
"merge": {
|
||||
|
|
|
@ -141,40 +141,6 @@ rtc_library("rtc_media_base") {
|
|||
]
|
||||
}
|
||||
|
||||
rtc_library("media_channel_shim") {
|
||||
sources = [
|
||||
"base/media_channel_shim.cc",
|
||||
"base/media_channel_shim.h",
|
||||
]
|
||||
deps = [
|
||||
":codec",
|
||||
":media_channel",
|
||||
":media_channel_impl",
|
||||
":stream_params",
|
||||
"../api:frame_transformer_interface",
|
||||
"../api:rtc_error",
|
||||
"../api:rtp_headers",
|
||||
"../api:rtp_parameters",
|
||||
"../api:rtp_sender_interface",
|
||||
"../api:scoped_refptr",
|
||||
"../api/crypto:frame_decryptor_interface",
|
||||
"../api/crypto:frame_encryptor_interface",
|
||||
"../api/transport/rtp:rtp_source",
|
||||
"../api/video:recordable_encoded_frame",
|
||||
"../api/video:video_frame",
|
||||
"../api/video_codecs:video_codecs_api",
|
||||
"../modules/rtp_rtcp:rtp_rtcp_format",
|
||||
"../rtc_base:checks",
|
||||
"../rtc_base:network_route",
|
||||
"../rtc_base/network:sent_packet",
|
||||
]
|
||||
absl_deps = [
|
||||
"//third_party/abseil-cpp/absl/functional:any_invocable",
|
||||
"//third_party/abseil-cpp/absl/strings",
|
||||
"//third_party/abseil-cpp/absl/types:optional",
|
||||
]
|
||||
}
|
||||
|
||||
rtc_library("media_channel_impl") {
|
||||
sources = [
|
||||
"base/media_channel_impl.cc",
|
||||
|
@ -230,7 +196,6 @@ rtc_source_set("media_channel") {
|
|||
sources = [ "base/media_channel.h" ]
|
||||
deps = [
|
||||
":codec",
|
||||
":delayable",
|
||||
":media_constants",
|
||||
":rtp_utils",
|
||||
":stream_params",
|
||||
|
@ -279,11 +244,6 @@ rtc_source_set("media_channel") {
|
|||
]
|
||||
}
|
||||
|
||||
rtc_source_set("delayable") {
|
||||
sources = [ "base/delayable.h" ]
|
||||
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
|
||||
}
|
||||
|
||||
rtc_library("codec") {
|
||||
sources = [
|
||||
"base/codec.cc",
|
||||
|
@ -474,7 +434,6 @@ rtc_library("rtc_audio_video") {
|
|||
":codec",
|
||||
":media_channel",
|
||||
":media_channel_impl",
|
||||
":media_channel_shim",
|
||||
":media_constants",
|
||||
":rid_description",
|
||||
":rtc_media_base",
|
||||
|
@ -841,7 +800,6 @@ if (rtc_include_tests) {
|
|||
deps = [
|
||||
":codec",
|
||||
":media_channel",
|
||||
":media_channel_shim",
|
||||
":media_constants",
|
||||
":rtc_audio_video",
|
||||
":rtc_internal_video_codecs",
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#ifndef MEDIA_BASE_DELAYABLE_H_
|
||||
#define MEDIA_BASE_DELAYABLE_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "absl/types/optional.h"
|
||||
|
||||
namespace cricket {
|
||||
|
||||
// Delayable is used by user code through ApplyConstraints algorithm. Its
|
||||
// methods must take precendence over similar functional in `syncable.h`.
|
||||
class Delayable {
|
||||
public:
|
||||
virtual ~Delayable() {}
|
||||
// Set base minimum delay of the receive stream with specified ssrc.
|
||||
// Base minimum delay sets lower bound on minimum delay value which
|
||||
// determines minimum delay until audio playout.
|
||||
// Returns false if there is no stream with given ssrc.
|
||||
virtual bool SetBaseMinimumPlayoutDelayMs(uint32_t ssrc, int delay_ms) = 0;
|
||||
|
||||
// Returns current value of base minimum delay in milliseconds.
|
||||
virtual absl::optional<int> GetBaseMinimumPlayoutDelayMs(
|
||||
uint32_t ssrc) const = 0;
|
||||
};
|
||||
|
||||
} // namespace cricket
|
||||
|
||||
#endif // MEDIA_BASE_DELAYABLE_H_
|
|
@ -778,29 +778,6 @@ class FakeVoiceEngine : public VoiceEngineInterface {
|
|||
const AudioOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::AudioCodecPairId codec_pair_id) override;
|
||||
VoiceMediaChannel* CreateMediaChannel(
|
||||
MediaChannel::Role role,
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const AudioOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::AudioCodecPairId codec_pair_id) override {
|
||||
RTC_DCHECK_RUN_ON(call->worker_thread());
|
||||
std::unique_ptr<VoiceMediaSendChannelInterface> send_channel;
|
||||
std::unique_ptr<VoiceMediaReceiveChannelInterface> receive_channel;
|
||||
if (role == MediaChannel::Role::kSend ||
|
||||
role == MediaChannel::Role::kBoth) {
|
||||
send_channel = CreateSendChannel(call, config, options, crypto_options,
|
||||
codec_pair_id);
|
||||
}
|
||||
if (role == MediaChannel::Role::kReceive ||
|
||||
role == MediaChannel::Role::kBoth) {
|
||||
receive_channel = CreateReceiveChannel(call, config, options,
|
||||
crypto_options, codec_pair_id);
|
||||
}
|
||||
return new VoiceMediaShimChannel(std::move(send_channel),
|
||||
std::move(receive_channel));
|
||||
}
|
||||
|
||||
// TODO(ossu): For proper testing, These should either individually settable
|
||||
// or the voice engine should reference mockable factories.
|
||||
|
@ -844,30 +821,6 @@ class FakeVideoEngine : public VideoEngineInterface {
|
|||
const MediaConfig& config,
|
||||
const VideoOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options) override;
|
||||
VideoMediaChannel* CreateMediaChannel(
|
||||
MediaChannel::Role role,
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::VideoBitrateAllocatorFactory* video_bitrate_allocator_factory)
|
||||
override {
|
||||
RTC_LOG(LS_INFO) << "CreateMediaChannel. Options: " << options.ToString();
|
||||
std::unique_ptr<VideoMediaSendChannelInterface> send_channel;
|
||||
std::unique_ptr<VideoMediaReceiveChannelInterface> receive_channel;
|
||||
if (role == MediaChannel::Role::kSend ||
|
||||
role == MediaChannel::Role::kBoth) {
|
||||
send_channel = CreateSendChannel(call, config, options, crypto_options,
|
||||
video_bitrate_allocator_factory);
|
||||
}
|
||||
if (role == MediaChannel::Role::kReceive ||
|
||||
role == MediaChannel::Role::kBoth) {
|
||||
receive_channel =
|
||||
CreateReceiveChannel(call, config, options, crypto_options);
|
||||
}
|
||||
return new VideoMediaShimChannel(std::move(send_channel),
|
||||
std::move(receive_channel));
|
||||
}
|
||||
FakeVideoMediaSendChannel* GetSendChannel(size_t index);
|
||||
FakeVideoMediaReceiveChannel* GetReceiveChannel(size_t index);
|
||||
|
||||
|
|
|
@ -43,7 +43,6 @@
|
|||
#include "call/video_receive_stream.h"
|
||||
#include "common_video/include/quality_limitation_reason.h"
|
||||
#include "media/base/codec.h"
|
||||
#include "media/base/delayable.h"
|
||||
#include "media/base/media_constants.h"
|
||||
#include "media/base/stream_params.h"
|
||||
#include "modules/audio_processing/include/audio_processing_statistics.h"
|
||||
|
@ -75,7 +74,6 @@ webrtc::RTCError InvokeSetParametersCallback(SetParametersCallback& callback,
|
|||
namespace cricket {
|
||||
|
||||
class AudioSource;
|
||||
class MediaChannel; // TODO(bugs.webrtc.org/13931): Delete when irrelevant
|
||||
class VideoCapturer;
|
||||
struct RtpHeader;
|
||||
struct VideoFormat;
|
||||
|
@ -260,7 +258,7 @@ class MediaSendChannelInterface {
|
|||
absl::AnyInvocable<void()> callback) = 0;
|
||||
};
|
||||
|
||||
class MediaReceiveChannelInterface : public Delayable {
|
||||
class MediaReceiveChannelInterface {
|
||||
public:
|
||||
virtual ~MediaReceiveChannelInterface() = default;
|
||||
|
||||
|
@ -312,6 +310,16 @@ class MediaReceiveChannelInterface : public Delayable {
|
|||
uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface>
|
||||
frame_transformer) = 0;
|
||||
|
||||
// Set base minimum delay of the receive stream with specified ssrc.
|
||||
// Base minimum delay sets lower bound on minimum delay value which
|
||||
// determines minimum delay until audio playout.
|
||||
// Returns false if there is no stream with given ssrc.
|
||||
virtual bool SetBaseMinimumPlayoutDelayMs(uint32_t ssrc, int delay_ms) = 0;
|
||||
|
||||
// Returns current value of base minimum delay in milliseconds.
|
||||
virtual absl::optional<int> GetBaseMinimumPlayoutDelayMs(
|
||||
uint32_t ssrc) const = 0;
|
||||
};
|
||||
|
||||
// The stats information is structured as follows:
|
||||
|
|
|
@ -61,11 +61,6 @@ MediaChannelUtil::MediaChannelUtil(TaskQueueBase* network_thread,
|
|||
bool enable_dscp)
|
||||
: transport_(network_thread, enable_dscp) {}
|
||||
|
||||
MediaChannel::MediaChannel(Role role,
|
||||
TaskQueueBase* network_thread,
|
||||
bool enable_dscp)
|
||||
: MediaChannelUtil(network_thread, enable_dscp), role_(role) {}
|
||||
|
||||
MediaChannelUtil::~MediaChannelUtil() {}
|
||||
|
||||
void MediaChannelUtil::SetInterface(MediaChannelNetworkInterface* iface) {
|
||||
|
@ -181,10 +176,6 @@ std::map<std::string, std::string> AudioSendParameters::ToStringMap() const {
|
|||
return params;
|
||||
}
|
||||
|
||||
cricket::MediaType VoiceMediaChannel::media_type() const {
|
||||
return cricket::MediaType::MEDIA_TYPE_AUDIO;
|
||||
}
|
||||
|
||||
VideoSendParameters::VideoSendParameters() = default;
|
||||
VideoSendParameters::~VideoSendParameters() = default;
|
||||
|
||||
|
@ -194,12 +185,6 @@ std::map<std::string, std::string> VideoSendParameters::ToStringMap() const {
|
|||
return params;
|
||||
}
|
||||
|
||||
cricket::MediaType VideoMediaChannel::media_type() const {
|
||||
return cricket::MediaType::MEDIA_TYPE_VIDEO;
|
||||
}
|
||||
|
||||
void VideoMediaChannel::SetVideoCodecSwitchingEnabled(bool enabled) {}
|
||||
|
||||
// --------------------- MediaChannelUtil::TransportForMediaChannels -----
|
||||
|
||||
MediaChannelUtil::TransportForMediaChannels::TransportForMediaChannels(
|
||||
|
|
|
@ -59,16 +59,12 @@
|
|||
#include "rtc_base/socket.h"
|
||||
#include "rtc_base/thread_annotations.h"
|
||||
// This file contains the base classes for classes that implement
|
||||
// the MediaChannel interfaces.
|
||||
// the channel interfaces.
|
||||
// These implementation classes used to be the exposed interface names,
|
||||
// but this is in the process of being changed.
|
||||
// TODO(bugs.webrtc.org/13931): Remove the MediaChannel class.
|
||||
|
||||
namespace cricket {
|
||||
|
||||
class VoiceMediaChannel;
|
||||
class VideoMediaChannel;
|
||||
|
||||
// The `MediaChannelUtil` class provides functionality that is used by
|
||||
// multiple MediaChannel-like objects, of both sending and receiving
|
||||
// types.
|
||||
|
@ -195,212 +191,6 @@ class MediaChannelUtil {
|
|||
TransportForMediaChannels transport_;
|
||||
};
|
||||
|
||||
// The `MediaChannel` class implements both the SendChannel and
|
||||
// ReceiveChannel interface. It is used in legacy code that does not
|
||||
// use the split interfaces.
|
||||
class MediaChannel : public MediaChannelUtil,
|
||||
public MediaSendChannelInterface,
|
||||
public MediaReceiveChannelInterface {
|
||||
public:
|
||||
// Role of the channel. Used to describe which interface it supports.
|
||||
// This is temporary until we stop using the same implementation for both
|
||||
// interfaces.
|
||||
enum class Role {
|
||||
kSend,
|
||||
kReceive,
|
||||
kBoth // Temporary value for non-converted test and downstream code
|
||||
// TODO(bugs.webrtc.org/13931): Remove kBoth when usage is removed.
|
||||
};
|
||||
|
||||
MediaChannel(Role role,
|
||||
webrtc::TaskQueueBase* network_thread,
|
||||
bool enable_dscp = false);
|
||||
virtual ~MediaChannel() = default;
|
||||
|
||||
Role role() const { return role_; }
|
||||
|
||||
// Downcasting to the subclasses.
|
||||
virtual VideoMediaChannel* AsVideoChannel() {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
virtual VoiceMediaChannel* AsVoiceChannel() {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
// Must declare the methods inherited from the base interface template,
|
||||
// even when abstract, to tell the compiler that all instances of the name
|
||||
// referred to by subclasses of this share the same implementation.
|
||||
cricket::MediaType media_type() const override = 0;
|
||||
void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override = 0;
|
||||
void OnPacketSent(const rtc::SentPacket& sent_packet) override = 0;
|
||||
void OnReadyToSend(bool ready) override = 0;
|
||||
void OnNetworkRouteChanged(absl::string_view transport_name,
|
||||
const rtc::NetworkRoute& network_route) override =
|
||||
0;
|
||||
void SetSendCodecChangedCallback(
|
||||
absl::AnyInvocable<void()> callback) override = 0;
|
||||
|
||||
// Methods from the APIs that are implemented in MediaChannelUtil
|
||||
using MediaChannelUtil::ExtmapAllowMixed;
|
||||
using MediaChannelUtil::HasNetworkInterface;
|
||||
using MediaChannelUtil::SetExtmapAllowMixed;
|
||||
using MediaChannelUtil::SetInterface;
|
||||
|
||||
private:
|
||||
const Role role_;
|
||||
};
|
||||
|
||||
// Base class for implementation classes
|
||||
|
||||
class VideoMediaChannel : public MediaChannel,
|
||||
public VideoMediaSendChannelInterface,
|
||||
public VideoMediaReceiveChannelInterface {
|
||||
public:
|
||||
explicit VideoMediaChannel(MediaChannel::Role role,
|
||||
webrtc::TaskQueueBase* network_thread,
|
||||
bool enable_dscp = false)
|
||||
: MediaChannel(role, network_thread, enable_dscp) {}
|
||||
~VideoMediaChannel() override {}
|
||||
|
||||
// Downcasting to the implemented interfaces.
|
||||
VideoMediaSendChannelInterface* AsVideoSendChannel() override { return this; }
|
||||
VoiceMediaSendChannelInterface* AsVoiceSendChannel() override {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
VideoMediaReceiveChannelInterface* AsVideoReceiveChannel() override {
|
||||
return this;
|
||||
}
|
||||
VoiceMediaReceiveChannelInterface* AsVoiceReceiveChannel() override {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
cricket::MediaType media_type() const override;
|
||||
|
||||
// Downcasting to the subclasses.
|
||||
VideoMediaChannel* AsVideoChannel() override { return this; }
|
||||
|
||||
void SetExtmapAllowMixed(bool mixed) override {
|
||||
MediaChannel::SetExtmapAllowMixed(mixed);
|
||||
}
|
||||
bool ExtmapAllowMixed() const override {
|
||||
return MediaChannel::ExtmapAllowMixed();
|
||||
}
|
||||
void SetInterface(MediaChannelNetworkInterface* iface) override {
|
||||
return MediaChannel::SetInterface(iface);
|
||||
}
|
||||
// Declared here in order to avoid "found by multiple paths" compile error
|
||||
bool AddSendStream(const StreamParams& sp) override = 0;
|
||||
void ChooseReceiverReportSsrc(const std::set<uint32_t>& choices) override = 0;
|
||||
void SetSsrcListChangedCallback(
|
||||
absl::AnyInvocable<void(const std::set<uint32_t>&)> callback) override =
|
||||
0;
|
||||
bool AddRecvStream(const StreamParams& sp) override = 0;
|
||||
void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override = 0;
|
||||
void SetEncoderSelector(uint32_t ssrc,
|
||||
webrtc::VideoEncoderFactory::EncoderSelectorInterface*
|
||||
encoder_selector) override {}
|
||||
|
||||
// Gets quality stats for the channel.
|
||||
virtual bool GetSendStats(VideoMediaSendInfo* info) = 0;
|
||||
virtual bool GetReceiveStats(VideoMediaReceiveInfo* info) = 0;
|
||||
bool GetStats(VideoMediaSendInfo* info) override {
|
||||
return GetSendStats(info);
|
||||
}
|
||||
bool GetStats(VideoMediaReceiveInfo* info) override {
|
||||
return GetReceiveStats(info);
|
||||
}
|
||||
|
||||
// TODO(bugs.webrtc.org/13931): Remove when configuration is more sensible
|
||||
void SetSendCodecChangedCallback(
|
||||
absl::AnyInvocable<void()> callback) override = 0;
|
||||
// Enable network condition based codec switching.
|
||||
// Note: should have been pure virtual.
|
||||
void SetVideoCodecSwitchingEnabled(bool enabled) override;
|
||||
|
||||
private:
|
||||
// Functions not implemented on this interface
|
||||
bool HasNetworkInterface() const override {
|
||||
return MediaChannel::HasNetworkInterface();
|
||||
}
|
||||
};
|
||||
|
||||
// Base class for implementation classes
|
||||
class VoiceMediaChannel : public MediaChannel,
|
||||
public VoiceMediaSendChannelInterface,
|
||||
public VoiceMediaReceiveChannelInterface {
|
||||
public:
|
||||
MediaType media_type() const override;
|
||||
VoiceMediaChannel(MediaChannel::Role role,
|
||||
webrtc::TaskQueueBase* network_thread,
|
||||
bool enable_dscp = false)
|
||||
: MediaChannel(role, network_thread, enable_dscp) {}
|
||||
~VoiceMediaChannel() override {}
|
||||
|
||||
// Downcasting to the implemented interfaces.
|
||||
VoiceMediaSendChannelInterface* AsVoiceSendChannel() override { return this; }
|
||||
|
||||
VoiceMediaReceiveChannelInterface* AsVoiceReceiveChannel() override {
|
||||
return this;
|
||||
}
|
||||
|
||||
VoiceMediaChannel* AsVoiceChannel() override { return this; }
|
||||
|
||||
VideoMediaSendChannelInterface* AsVideoSendChannel() override {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
VideoMediaReceiveChannelInterface* AsVideoReceiveChannel() override {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Declared here in order to avoid "found by multiple paths" compile error
|
||||
bool AddSendStream(const StreamParams& sp) override = 0;
|
||||
bool AddRecvStream(const StreamParams& sp) override = 0;
|
||||
void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override = 0;
|
||||
void SetEncoderSelector(uint32_t ssrc,
|
||||
webrtc::VideoEncoderFactory::EncoderSelectorInterface*
|
||||
encoder_selector) override {}
|
||||
void ChooseReceiverReportSsrc(const std::set<uint32_t>& choices) override = 0;
|
||||
void SetSsrcListChangedCallback(
|
||||
absl::AnyInvocable<void(const std::set<uint32_t>&)> callback) override =
|
||||
0;
|
||||
webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const override = 0;
|
||||
webrtc::RTCError SetRtpSendParameters(
|
||||
uint32_t ssrc,
|
||||
const webrtc::RtpParameters& parameters,
|
||||
webrtc::SetParametersCallback callback = nullptr) override = 0;
|
||||
|
||||
void SetExtmapAllowMixed(bool mixed) override {
|
||||
MediaChannel::SetExtmapAllowMixed(mixed);
|
||||
}
|
||||
bool ExtmapAllowMixed() const override {
|
||||
return MediaChannel::ExtmapAllowMixed();
|
||||
}
|
||||
void SetInterface(MediaChannelNetworkInterface* iface) override {
|
||||
return MediaChannel::SetInterface(iface);
|
||||
}
|
||||
bool HasNetworkInterface() const override {
|
||||
return MediaChannel::HasNetworkInterface();
|
||||
}
|
||||
|
||||
// Gets quality stats for the channel.
|
||||
virtual bool GetSendStats(VoiceMediaSendInfo* info) = 0;
|
||||
virtual bool GetReceiveStats(VoiceMediaReceiveInfo* info,
|
||||
bool get_and_clear_legacy_stats) = 0;
|
||||
bool GetStats(VoiceMediaSendInfo* info) override {
|
||||
return GetSendStats(info);
|
||||
}
|
||||
bool GetStats(VoiceMediaReceiveInfo* info,
|
||||
bool get_and_clear_legacy_stats) override {
|
||||
return GetReceiveStats(info, get_and_clear_legacy_stats);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace cricket
|
||||
|
||||
#endif // MEDIA_BASE_MEDIA_CHANNEL_IMPL_H_
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
* Copyright 2023 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#include "media/base/media_channel_shim.h"
|
||||
|
||||
namespace cricket {
|
||||
|
||||
// Note: The VideoMediaChannel default implementations are not used here, and
|
||||
// should be removed from that interface.
|
||||
// TODO(bugs.webrtc.org/13931): Remove them.
|
||||
VoiceMediaShimChannel::VoiceMediaShimChannel(
|
||||
std::unique_ptr<VoiceMediaSendChannelInterface> send_impl,
|
||||
std::unique_ptr<VoiceMediaReceiveChannelInterface> receive_impl)
|
||||
: VoiceMediaChannel(MediaChannel::Role::kBoth, nullptr, false),
|
||||
send_impl_(std::move(send_impl)),
|
||||
receive_impl_(std::move(receive_impl)) {
|
||||
if (send_impl_ && receive_impl_) {
|
||||
send_impl_->SetSsrcListChangedCallback(
|
||||
[this](const std::set<uint32_t>& choices) {
|
||||
receive_impl_->ChooseReceiverReportSsrc(choices);
|
||||
});
|
||||
send_impl_->SetSendCodecChangedCallback([this]() {
|
||||
receive_impl_->SetReceiveNackEnabled(send_impl_->SendCodecHasNack());
|
||||
receive_impl_->SetReceiveNonSenderRttEnabled(
|
||||
send_impl_->SenderNonSenderRttEnabled());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
VideoMediaShimChannel::VideoMediaShimChannel(
|
||||
std::unique_ptr<VideoMediaSendChannelInterface> send_impl,
|
||||
std::unique_ptr<VideoMediaReceiveChannelInterface> receive_impl)
|
||||
: VideoMediaChannel(MediaChannel::Role::kBoth, nullptr, false),
|
||||
send_impl_(std::move(send_impl)),
|
||||
receive_impl_(std::move(receive_impl)) {
|
||||
if (send_impl_ && receive_impl_) {
|
||||
send_impl_->SetSendCodecChangedCallback([this]() {
|
||||
// Adjust receive streams based on send codec.
|
||||
receive_impl_->SetReceiverFeedbackParameters(
|
||||
send_impl_->SendCodecHasLntf(), send_impl_->SendCodecHasNack(),
|
||||
send_impl_->SendCodecRtcpMode(), send_impl_->SendCodecRtxTime());
|
||||
});
|
||||
send_impl_->SetSsrcListChangedCallback(
|
||||
[this](const std::set<uint32_t>& choices) {
|
||||
receive_impl_->ChooseReceiverReportSsrc(choices);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace cricket
|
|
@ -1,575 +0,0 @@
|
|||
/*
|
||||
* Copyright 2023 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#ifndef MEDIA_BASE_MEDIA_CHANNEL_SHIM_H_
|
||||
#define MEDIA_BASE_MEDIA_CHANNEL_SHIM_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "absl/functional/any_invocable.h"
|
||||
#include "absl/strings/string_view.h"
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/crypto/frame_decryptor_interface.h"
|
||||
#include "api/crypto/frame_encryptor_interface.h"
|
||||
#include "api/frame_transformer_interface.h"
|
||||
#include "api/media_types.h"
|
||||
#include "api/rtc_error.h"
|
||||
#include "api/rtp_headers.h"
|
||||
#include "api/rtp_parameters.h"
|
||||
#include "api/rtp_sender_interface.h"
|
||||
#include "api/scoped_refptr.h"
|
||||
#include "api/transport/rtp/rtp_source.h"
|
||||
#include "api/video/recordable_encoded_frame.h"
|
||||
#include "api/video/video_frame.h"
|
||||
#include "api/video/video_sink_interface.h"
|
||||
#include "api/video/video_source_interface.h"
|
||||
#include "api/video_codecs/video_encoder_factory.h"
|
||||
#include "media/base/codec.h"
|
||||
#include "media/base/media_channel.h"
|
||||
#include "media/base/media_channel_impl.h"
|
||||
#include "media/base/stream_params.h"
|
||||
#include "modules/rtp_rtcp/source/rtp_packet_received.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/network/sent_packet.h"
|
||||
#include "rtc_base/network_route.h"
|
||||
|
||||
namespace cricket {
|
||||
|
||||
// The VideoMediaShimChannel is replacing the VideoMediaChannel
|
||||
// interface.
|
||||
// If called with both send_impl and receive_impl, it operates in kBoth
|
||||
// mode; if called with only one, it will shim that one and DCHECK if one
|
||||
// tries to do functions belonging to the other.
|
||||
class VoiceMediaShimChannel : public VoiceMediaChannel {
|
||||
public:
|
||||
VoiceMediaShimChannel(
|
||||
std::unique_ptr<VoiceMediaSendChannelInterface> send_impl,
|
||||
std::unique_ptr<VoiceMediaReceiveChannelInterface> receive_impl);
|
||||
|
||||
VoiceMediaSendChannelInterface* AsVoiceSendChannel() override { return this; }
|
||||
VoiceMediaReceiveChannelInterface* AsVoiceReceiveChannel() override {
|
||||
return this;
|
||||
}
|
||||
VideoMediaSendChannelInterface* AsVideoSendChannel() override {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
VideoMediaReceiveChannelInterface* AsVideoReceiveChannel() override {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// SetInterface needs to run on both send and receive channels.
|
||||
void SetInterface(MediaChannelNetworkInterface* iface) override {
|
||||
if (send_impl_) {
|
||||
send_impl()->SetInterface(iface);
|
||||
}
|
||||
if (receive_impl_) {
|
||||
receive_impl()->SetInterface(iface);
|
||||
}
|
||||
}
|
||||
|
||||
// Implementation of MediaBaseChannelInterface
|
||||
cricket::MediaType media_type() const override { return MEDIA_TYPE_AUDIO; }
|
||||
|
||||
// Implementation of MediaSendChannelInterface
|
||||
absl::optional<Codec> GetSendCodec() const override {
|
||||
return send_impl()->GetSendCodec();
|
||||
}
|
||||
void OnPacketSent(const rtc::SentPacket& sent_packet) override {
|
||||
send_impl()->OnPacketSent(sent_packet);
|
||||
}
|
||||
void OnReadyToSend(bool ready) override { send_impl()->OnReadyToSend(ready); }
|
||||
void OnNetworkRouteChanged(absl::string_view transport_name,
|
||||
const rtc::NetworkRoute& network_route) override {
|
||||
send_impl()->OnNetworkRouteChanged(transport_name, network_route);
|
||||
}
|
||||
void SetExtmapAllowMixed(bool extmap_allow_mixed) override {
|
||||
send_impl()->SetExtmapAllowMixed(extmap_allow_mixed);
|
||||
}
|
||||
bool HasNetworkInterface() const override {
|
||||
return send_impl()->HasNetworkInterface();
|
||||
}
|
||||
bool ExtmapAllowMixed() const override {
|
||||
return send_impl()->ExtmapAllowMixed();
|
||||
}
|
||||
|
||||
bool AddSendStream(const StreamParams& sp) override {
|
||||
return send_impl()->AddSendStream(sp);
|
||||
}
|
||||
bool RemoveSendStream(uint32_t ssrc) override {
|
||||
return send_impl()->RemoveSendStream(ssrc);
|
||||
}
|
||||
void SetFrameEncryptor(uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameEncryptorInterface>
|
||||
frame_encryptor) override {
|
||||
send_impl()->SetFrameEncryptor(ssrc, frame_encryptor);
|
||||
}
|
||||
webrtc::RTCError SetRtpSendParameters(
|
||||
uint32_t ssrc,
|
||||
const webrtc::RtpParameters& parameters,
|
||||
webrtc::SetParametersCallback callback = nullptr) override {
|
||||
return send_impl()->SetRtpSendParameters(ssrc, parameters,
|
||||
std::move(callback));
|
||||
}
|
||||
|
||||
void SetEncoderToPacketizerFrameTransformer(
|
||||
uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer)
|
||||
override {
|
||||
return send_impl()->SetEncoderToPacketizerFrameTransformer(
|
||||
ssrc, frame_transformer);
|
||||
}
|
||||
webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const override {
|
||||
return send_impl()->GetRtpSendParameters(ssrc);
|
||||
}
|
||||
// Implementation of MediaReceiveChannelInterface
|
||||
void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override {
|
||||
receive_impl()->OnPacketReceived(packet);
|
||||
}
|
||||
bool AddRecvStream(const StreamParams& sp) override {
|
||||
return receive_impl()->AddRecvStream(sp);
|
||||
}
|
||||
bool RemoveRecvStream(uint32_t ssrc) override {
|
||||
return receive_impl()->RemoveRecvStream(ssrc);
|
||||
}
|
||||
void ResetUnsignaledRecvStream() override {
|
||||
return receive_impl()->ResetUnsignaledRecvStream();
|
||||
}
|
||||
absl::optional<uint32_t> GetUnsignaledSsrc() const override {
|
||||
return receive_impl()->GetUnsignaledSsrc();
|
||||
}
|
||||
void ChooseReceiverReportSsrc(const std::set<uint32_t>& choices) override {
|
||||
return receive_impl()->ChooseReceiverReportSsrc(choices);
|
||||
}
|
||||
void OnDemuxerCriteriaUpdatePending() override {
|
||||
receive_impl()->OnDemuxerCriteriaUpdatePending();
|
||||
}
|
||||
void OnDemuxerCriteriaUpdateComplete() override {
|
||||
receive_impl()->OnDemuxerCriteriaUpdateComplete();
|
||||
}
|
||||
void SetFrameDecryptor(uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameDecryptorInterface>
|
||||
frame_decryptor) override {
|
||||
receive_impl()->SetFrameDecryptor(ssrc, frame_decryptor);
|
||||
}
|
||||
void SetDepacketizerToDecoderFrameTransformer(
|
||||
uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer)
|
||||
override {
|
||||
receive_impl()->SetDepacketizerToDecoderFrameTransformer(ssrc,
|
||||
frame_transformer);
|
||||
}
|
||||
bool SendCodecHasNack() const override {
|
||||
return send_impl()->SendCodecHasNack();
|
||||
}
|
||||
void SetSendCodecChangedCallback(
|
||||
absl::AnyInvocable<void()> callback) override {
|
||||
send_impl()->SetSendCodecChangedCallback(std::move(callback));
|
||||
}
|
||||
// Implementation of VoiceMediaSendChannel
|
||||
bool SetSendParameters(const AudioSendParameters& params) override {
|
||||
return send_impl()->SetSendParameters(params);
|
||||
}
|
||||
void SetSend(bool send) override { return send_impl()->SetSend(send); }
|
||||
bool SetAudioSend(uint32_t ssrc,
|
||||
bool enable,
|
||||
const AudioOptions* options,
|
||||
AudioSource* source) override {
|
||||
return send_impl()->SetAudioSend(ssrc, enable, options, source);
|
||||
}
|
||||
bool CanInsertDtmf() override { return send_impl()->CanInsertDtmf(); }
|
||||
bool InsertDtmf(uint32_t ssrc, int event, int duration) override {
|
||||
return send_impl()->InsertDtmf(ssrc, event, duration);
|
||||
}
|
||||
bool GetStats(VoiceMediaSendInfo* info) override {
|
||||
return send_impl()->GetStats(info);
|
||||
}
|
||||
bool SenderNackEnabled() const override {
|
||||
return send_impl()->SenderNackEnabled();
|
||||
}
|
||||
bool SenderNonSenderRttEnabled() const override {
|
||||
return send_impl()->SenderNonSenderRttEnabled();
|
||||
}
|
||||
// Implementation of VoiceMediaReceiveChannelInterface
|
||||
bool SetRecvParameters(const AudioRecvParameters& params) override {
|
||||
return receive_impl()->SetRecvParameters(params);
|
||||
}
|
||||
webrtc::RtpParameters GetRtpReceiveParameters(uint32_t ssrc) const override {
|
||||
return receive_impl()->GetRtpReceiveParameters(ssrc);
|
||||
}
|
||||
std::vector<webrtc::RtpSource> GetSources(uint32_t ssrc) const override {
|
||||
return receive_impl()->GetSources(ssrc);
|
||||
}
|
||||
webrtc::RtpParameters GetDefaultRtpReceiveParameters() const override {
|
||||
return receive_impl()->GetDefaultRtpReceiveParameters();
|
||||
}
|
||||
void SetPlayout(bool playout) override {
|
||||
return receive_impl()->SetPlayout(playout);
|
||||
}
|
||||
bool SetOutputVolume(uint32_t ssrc, double volume) override {
|
||||
return receive_impl()->SetOutputVolume(ssrc, volume);
|
||||
}
|
||||
bool SetDefaultOutputVolume(double volume) override {
|
||||
return receive_impl()->SetDefaultOutputVolume(volume);
|
||||
}
|
||||
void SetRawAudioSink(
|
||||
uint32_t ssrc,
|
||||
std::unique_ptr<webrtc::AudioSinkInterface> sink) override {
|
||||
return receive_impl()->SetRawAudioSink(ssrc, std::move(sink));
|
||||
}
|
||||
void SetDefaultRawAudioSink(
|
||||
std::unique_ptr<webrtc::AudioSinkInterface> sink) override {
|
||||
return receive_impl()->SetDefaultRawAudioSink(std::move(sink));
|
||||
}
|
||||
bool GetStats(VoiceMediaReceiveInfo* info, bool reset_legacy) override {
|
||||
return receive_impl_->GetStats(info, reset_legacy);
|
||||
}
|
||||
void SetReceiveNackEnabled(bool enabled) override {
|
||||
receive_impl_->SetReceiveNackEnabled(enabled);
|
||||
}
|
||||
void SetReceiveNonSenderRttEnabled(bool enabled) override {
|
||||
receive_impl_->SetReceiveNonSenderRttEnabled(enabled);
|
||||
}
|
||||
void SetSsrcListChangedCallback(
|
||||
absl::AnyInvocable<void(const std::set<uint32_t>&)> callback) override {
|
||||
send_impl()->SetSsrcListChangedCallback(std::move(callback));
|
||||
}
|
||||
// Implementation of Delayable
|
||||
bool SetBaseMinimumPlayoutDelayMs(uint32_t ssrc, int delay_ms) override {
|
||||
return receive_impl()->SetBaseMinimumPlayoutDelayMs(ssrc, delay_ms);
|
||||
}
|
||||
absl::optional<int> GetBaseMinimumPlayoutDelayMs(
|
||||
uint32_t ssrc) const override {
|
||||
return receive_impl()->GetBaseMinimumPlayoutDelayMs(ssrc);
|
||||
}
|
||||
bool GetSendStats(VoiceMediaSendInfo* info) override {
|
||||
return send_impl()->GetStats(info);
|
||||
}
|
||||
bool GetReceiveStats(VoiceMediaReceiveInfo* info,
|
||||
bool reset_legacy) override {
|
||||
return receive_impl()->GetStats(info, reset_legacy);
|
||||
}
|
||||
|
||||
// Only for testing of implementations - these will be used to static_cast the
|
||||
// pointers to the implementations, so can only be safely used in conjunction
|
||||
// with the corresponding create functions.
|
||||
VoiceMediaSendChannelInterface* SendImplForTesting() {
|
||||
return send_impl_.get();
|
||||
}
|
||||
VoiceMediaReceiveChannelInterface* ReceiveImplForTesting() {
|
||||
return receive_impl_.get();
|
||||
}
|
||||
|
||||
private:
|
||||
VoiceMediaSendChannelInterface* send_impl() { return send_impl_.get(); }
|
||||
VoiceMediaReceiveChannelInterface* receive_impl() {
|
||||
RTC_DCHECK(receive_impl_);
|
||||
return receive_impl_.get();
|
||||
}
|
||||
const VoiceMediaSendChannelInterface* send_impl() const {
|
||||
RTC_DCHECK(send_impl_);
|
||||
return send_impl_.get();
|
||||
}
|
||||
const VoiceMediaReceiveChannelInterface* receive_impl() const {
|
||||
return receive_impl_.get();
|
||||
}
|
||||
|
||||
std::unique_ptr<VoiceMediaSendChannelInterface> send_impl_;
|
||||
std::unique_ptr<VoiceMediaReceiveChannelInterface> receive_impl_;
|
||||
};
|
||||
|
||||
// The VideoMediaShimChannel is replacing the VideoMediaChannel
|
||||
// interface.
|
||||
// If called with both send_impl and receive_impl, it operates in kBoth
|
||||
// mode; if called with only one, it will shim that one and DCHECK if one
|
||||
// tries to do functions belonging to the other.
|
||||
|
||||
class VideoMediaShimChannel : public VideoMediaChannel {
|
||||
public:
|
||||
VideoMediaShimChannel(
|
||||
std::unique_ptr<VideoMediaSendChannelInterface> send_impl,
|
||||
std::unique_ptr<VideoMediaReceiveChannelInterface> receive_impl);
|
||||
|
||||
VideoMediaSendChannelInterface* AsVideoSendChannel() override { return this; }
|
||||
VideoMediaReceiveChannelInterface* AsVideoReceiveChannel() override {
|
||||
return this;
|
||||
}
|
||||
VoiceMediaSendChannelInterface* AsVoiceSendChannel() override {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
VoiceMediaReceiveChannelInterface* AsVoiceReceiveChannel() override {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// SetInterface needs to run on both send and receive channels.
|
||||
void SetInterface(MediaChannelNetworkInterface* iface) override {
|
||||
if (send_impl_) {
|
||||
send_impl()->SetInterface(iface);
|
||||
}
|
||||
if (receive_impl_) {
|
||||
receive_impl()->SetInterface(iface);
|
||||
}
|
||||
}
|
||||
|
||||
// Implementation of MediaBaseChannelInterface
|
||||
cricket::MediaType media_type() const override { return MEDIA_TYPE_VIDEO; }
|
||||
|
||||
// Implementation of MediaSendChannelInterface
|
||||
void OnPacketSent(const rtc::SentPacket& sent_packet) override {
|
||||
send_impl()->OnPacketSent(sent_packet);
|
||||
}
|
||||
void OnReadyToSend(bool ready) override { send_impl()->OnReadyToSend(ready); }
|
||||
void OnNetworkRouteChanged(absl::string_view transport_name,
|
||||
const rtc::NetworkRoute& network_route) override {
|
||||
send_impl()->OnNetworkRouteChanged(transport_name, network_route);
|
||||
}
|
||||
void SetExtmapAllowMixed(bool extmap_allow_mixed) override {
|
||||
send_impl()->SetExtmapAllowMixed(extmap_allow_mixed);
|
||||
}
|
||||
bool HasNetworkInterface() const override {
|
||||
return send_impl()->HasNetworkInterface();
|
||||
}
|
||||
bool ExtmapAllowMixed() const override {
|
||||
return send_impl()->ExtmapAllowMixed();
|
||||
}
|
||||
|
||||
bool AddSendStream(const StreamParams& sp) override {
|
||||
return send_impl()->AddSendStream(sp);
|
||||
}
|
||||
bool RemoveSendStream(uint32_t ssrc) override {
|
||||
return send_impl()->RemoveSendStream(ssrc);
|
||||
}
|
||||
void SetFrameEncryptor(uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameEncryptorInterface>
|
||||
frame_encryptor) override {
|
||||
send_impl()->SetFrameEncryptor(ssrc, frame_encryptor);
|
||||
}
|
||||
webrtc::RTCError SetRtpSendParameters(
|
||||
uint32_t ssrc,
|
||||
const webrtc::RtpParameters& parameters,
|
||||
webrtc::SetParametersCallback callback = nullptr) override {
|
||||
return send_impl()->SetRtpSendParameters(ssrc, parameters,
|
||||
std::move(callback));
|
||||
}
|
||||
|
||||
void SetEncoderToPacketizerFrameTransformer(
|
||||
uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer)
|
||||
override {
|
||||
return send_impl()->SetEncoderToPacketizerFrameTransformer(
|
||||
ssrc, frame_transformer);
|
||||
}
|
||||
void SetEncoderSelector(uint32_t ssrc,
|
||||
webrtc::VideoEncoderFactory::EncoderSelectorInterface*
|
||||
encoder_selector) override {
|
||||
send_impl()->SetEncoderSelector(ssrc, encoder_selector);
|
||||
}
|
||||
webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const override {
|
||||
return send_impl()->GetRtpSendParameters(ssrc);
|
||||
}
|
||||
// Send_Implementation of VideoMediaSendChannelInterface
|
||||
bool SetSendParameters(const VideoSendParameters& params) override {
|
||||
return send_impl()->SetSendParameters(params);
|
||||
}
|
||||
absl::optional<Codec> GetSendCodec() const override {
|
||||
return send_impl()->GetSendCodec();
|
||||
}
|
||||
bool SetSend(bool send) override { return send_impl()->SetSend(send); }
|
||||
bool SetVideoSend(
|
||||
uint32_t ssrc,
|
||||
const VideoOptions* options,
|
||||
rtc::VideoSourceInterface<webrtc::VideoFrame>* source) override {
|
||||
return send_impl()->SetVideoSend(ssrc, options, source);
|
||||
}
|
||||
void GenerateSendKeyFrame(uint32_t ssrc,
|
||||
const std::vector<std::string>& rids) override {
|
||||
return send_impl()->GenerateSendKeyFrame(ssrc, rids);
|
||||
}
|
||||
void SetVideoCodecSwitchingEnabled(bool enabled) override {
|
||||
return send_impl()->SetVideoCodecSwitchingEnabled(enabled);
|
||||
}
|
||||
bool GetStats(VideoMediaSendInfo* info) override {
|
||||
return send_impl_->GetStats(info);
|
||||
}
|
||||
bool GetSendStats(VideoMediaSendInfo* info) override {
|
||||
return send_impl_->GetStats(info);
|
||||
}
|
||||
void FillBitrateInfo(BandwidthEstimationInfo* bwe_info) override {
|
||||
return send_impl_->FillBitrateInfo(bwe_info);
|
||||
}
|
||||
// Information queries to support SetReceiverFeedbackParameters
|
||||
webrtc::RtcpMode SendCodecRtcpMode() const override {
|
||||
return send_impl()->SendCodecRtcpMode();
|
||||
}
|
||||
bool SendCodecHasLntf() const override {
|
||||
return send_impl()->SendCodecHasLntf();
|
||||
}
|
||||
bool SendCodecHasNack() const override {
|
||||
return send_impl()->SendCodecHasNack();
|
||||
}
|
||||
absl::optional<int> SendCodecRtxTime() const override {
|
||||
return send_impl()->SendCodecRtxTime();
|
||||
}
|
||||
void SetSsrcListChangedCallback(
|
||||
absl::AnyInvocable<void(const std::set<uint32_t>&)> callback) override {
|
||||
send_impl()->SetSsrcListChangedCallback(std::move(callback));
|
||||
}
|
||||
void SetSendCodecChangedCallback(
|
||||
absl::AnyInvocable<void()> callback) override {
|
||||
// This callback is used internally by the shim, so should not be called by
|
||||
// users for the "both" case.
|
||||
if (send_impl_ && receive_impl_) {
|
||||
RTC_CHECK_NOTREACHED();
|
||||
}
|
||||
send_impl()->SetSendCodecChangedCallback(std::move(callback));
|
||||
}
|
||||
|
||||
// Implementation of Delayable
|
||||
bool SetBaseMinimumPlayoutDelayMs(uint32_t ssrc, int delay_ms) override {
|
||||
return receive_impl()->SetBaseMinimumPlayoutDelayMs(ssrc, delay_ms);
|
||||
}
|
||||
absl::optional<int> GetBaseMinimumPlayoutDelayMs(
|
||||
uint32_t ssrc) const override {
|
||||
return receive_impl()->GetBaseMinimumPlayoutDelayMs(ssrc);
|
||||
}
|
||||
// Implementation of MediaReceiveChannelInterface
|
||||
void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override {
|
||||
receive_impl()->OnPacketReceived(packet);
|
||||
}
|
||||
bool AddRecvStream(const StreamParams& sp) override {
|
||||
return receive_impl()->AddRecvStream(sp);
|
||||
}
|
||||
bool RemoveRecvStream(uint32_t ssrc) override {
|
||||
return receive_impl()->RemoveRecvStream(ssrc);
|
||||
}
|
||||
void ResetUnsignaledRecvStream() override {
|
||||
return receive_impl()->ResetUnsignaledRecvStream();
|
||||
}
|
||||
absl::optional<uint32_t> GetUnsignaledSsrc() const override {
|
||||
return receive_impl()->GetUnsignaledSsrc();
|
||||
}
|
||||
void ChooseReceiverReportSsrc(const std::set<uint32_t>& choices) override {
|
||||
return receive_impl()->ChooseReceiverReportSsrc(choices);
|
||||
}
|
||||
void OnDemuxerCriteriaUpdatePending() override {
|
||||
receive_impl()->OnDemuxerCriteriaUpdatePending();
|
||||
}
|
||||
void OnDemuxerCriteriaUpdateComplete() override {
|
||||
receive_impl()->OnDemuxerCriteriaUpdateComplete();
|
||||
}
|
||||
void SetFrameDecryptor(uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameDecryptorInterface>
|
||||
frame_decryptor) override {
|
||||
receive_impl()->SetFrameDecryptor(ssrc, frame_decryptor);
|
||||
}
|
||||
void SetDepacketizerToDecoderFrameTransformer(
|
||||
uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer)
|
||||
override {
|
||||
receive_impl()->SetDepacketizerToDecoderFrameTransformer(ssrc,
|
||||
frame_transformer);
|
||||
}
|
||||
// Implementation of VideoMediaReceiveChannelInterface
|
||||
bool SetRecvParameters(const VideoRecvParameters& params) override {
|
||||
return receive_impl()->SetRecvParameters(params);
|
||||
}
|
||||
webrtc::RtpParameters GetRtpReceiveParameters(uint32_t ssrc) const override {
|
||||
return receive_impl()->GetRtpReceiveParameters(ssrc);
|
||||
}
|
||||
webrtc::RtpParameters GetDefaultRtpReceiveParameters() const override {
|
||||
return receive_impl()->GetDefaultRtpReceiveParameters();
|
||||
}
|
||||
bool SetSink(uint32_t ssrc,
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) override {
|
||||
return receive_impl()->SetSink(ssrc, sink);
|
||||
}
|
||||
void SetDefaultSink(
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* sink) override {
|
||||
return receive_impl()->SetDefaultSink(sink);
|
||||
}
|
||||
void RequestRecvKeyFrame(uint32_t ssrc) override {
|
||||
return receive_impl()->RequestRecvKeyFrame(ssrc);
|
||||
}
|
||||
std::vector<webrtc::RtpSource> GetSources(uint32_t ssrc) const override {
|
||||
return receive_impl()->GetSources(ssrc);
|
||||
}
|
||||
// Set recordable encoded frame callback for `ssrc`
|
||||
void SetRecordableEncodedFrameCallback(
|
||||
uint32_t ssrc,
|
||||
std::function<void(const webrtc::RecordableEncodedFrame&)> callback)
|
||||
override {
|
||||
return receive_impl()->SetRecordableEncodedFrameCallback(
|
||||
ssrc, std::move(callback));
|
||||
}
|
||||
// Clear recordable encoded frame callback for `ssrc`
|
||||
void ClearRecordableEncodedFrameCallback(uint32_t ssrc) override {
|
||||
receive_impl()->ClearRecordableEncodedFrameCallback(ssrc);
|
||||
}
|
||||
bool GetStats(VideoMediaReceiveInfo* info) override {
|
||||
return receive_impl()->GetStats(info);
|
||||
}
|
||||
bool GetReceiveStats(VideoMediaReceiveInfo* info) override {
|
||||
return receive_impl()->GetStats(info);
|
||||
}
|
||||
void SetReceiverFeedbackParameters(bool lntf_enabled,
|
||||
bool nack_enabled,
|
||||
webrtc::RtcpMode rtcp_mode,
|
||||
absl::optional<int> rtx_time) override {
|
||||
receive_impl()->SetReceiverFeedbackParameters(lntf_enabled, nack_enabled,
|
||||
rtcp_mode, rtx_time);
|
||||
}
|
||||
void SetReceive(bool receive) override {
|
||||
receive_impl()->SetReceive(receive);
|
||||
}
|
||||
bool AddDefaultRecvStreamForTesting(const StreamParams& sp) override {
|
||||
return receive_impl()->AddDefaultRecvStreamForTesting(sp);
|
||||
}
|
||||
|
||||
// Only for testing of implementations - these will be used to static_cast the
|
||||
// pointers to the implementations, so can only be safely used in conjunction
|
||||
// with the corresponding create functions.
|
||||
VideoMediaSendChannelInterface* SendImplForTesting() {
|
||||
return send_impl_.get();
|
||||
}
|
||||
VideoMediaReceiveChannelInterface* ReceiveImplForTesting() {
|
||||
return receive_impl_.get();
|
||||
}
|
||||
|
||||
private:
|
||||
VideoMediaSendChannelInterface* send_impl() { return send_impl_.get(); }
|
||||
VideoMediaReceiveChannelInterface* receive_impl() {
|
||||
RTC_DCHECK(receive_impl_);
|
||||
return receive_impl_.get();
|
||||
}
|
||||
const VideoMediaSendChannelInterface* send_impl() const {
|
||||
RTC_DCHECK(send_impl_);
|
||||
return send_impl_.get();
|
||||
}
|
||||
const VideoMediaReceiveChannelInterface* receive_impl() const {
|
||||
return receive_impl_.get();
|
||||
}
|
||||
|
||||
std::unique_ptr<VideoMediaSendChannelInterface> send_impl_;
|
||||
std::unique_ptr<VideoMediaReceiveChannelInterface> receive_impl_;
|
||||
};
|
||||
|
||||
} // namespace cricket
|
||||
|
||||
#endif // MEDIA_BASE_MEDIA_CHANNEL_SHIM_H_
|
|
@ -38,9 +38,6 @@ class Call;
|
|||
|
||||
namespace cricket {
|
||||
|
||||
class VideoMediaChannel;
|
||||
class VoiceMediaChannel;
|
||||
|
||||
// Checks that the scalability_mode value of each encoding is supported by at
|
||||
// least one video codec of the list. If the list is empty, no check is done.
|
||||
webrtc::RTCError CheckScalabilityModeValues(
|
||||
|
@ -120,42 +117,6 @@ class VoiceEngineInterface : public RtpHeaderExtensionQueryInterface {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
// MediaChannel creation
|
||||
// Creates a voice media channel. Returns NULL on failure.
|
||||
virtual VoiceMediaChannel* CreateMediaChannel(
|
||||
MediaChannel::Role role,
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const AudioOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::AudioCodecPairId codec_pair_id) {
|
||||
// For the case where a subclass overrides the deprecated method
|
||||
// but not the replacement method, call the deprecated method.
|
||||
// TODO(bugs.webrtc.org/13931): Remove default implementation
|
||||
// when downstream has migrated to new API.
|
||||
RTC_CHECK(!recursion_guard_);
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
RTC_LOG(LS_ERROR)
|
||||
<< "Override of deprecated declaration detected - please update!";
|
||||
return CreateMediaChannel(call, config, options, crypto_options);
|
||||
#pragma clang diagnostic pop
|
||||
}
|
||||
|
||||
// Backwards compatible version
|
||||
[[deprecated("Use version with role parameter")]] virtual VoiceMediaChannel*
|
||||
CreateMediaChannel(webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const AudioOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options) {
|
||||
recursion_guard_ = true;
|
||||
auto new_channel =
|
||||
CreateMediaChannel(MediaChannel::Role::kBoth, call, config, options,
|
||||
crypto_options, webrtc::AudioCodecPairId::Create());
|
||||
recursion_guard_ = false;
|
||||
return new_channel;
|
||||
}
|
||||
|
||||
virtual const std::vector<AudioCodec>& send_codecs() const = 0;
|
||||
virtual const std::vector<AudioCodec>& recv_codecs() const = 0;
|
||||
|
||||
|
@ -170,11 +131,6 @@ class VoiceEngineInterface : public RtpHeaderExtensionQueryInterface {
|
|||
|
||||
virtual absl::optional<webrtc::AudioDeviceModule::Stats>
|
||||
GetAudioDeviceStats() = 0;
|
||||
|
||||
private:
|
||||
// Workaround variable for avoiding recursion between old and new APIs.
|
||||
// TODO(bugs.webrtc.org/13931): Remove when old interface is gone.
|
||||
bool recursion_guard_ = false;
|
||||
};
|
||||
|
||||
class VideoEngineInterface : public RtpHeaderExtensionQueryInterface {
|
||||
|
@ -206,47 +162,6 @@ class VideoEngineInterface : public RtpHeaderExtensionQueryInterface {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
// Creates a video media channel.
|
||||
// Returns NULL on failure.
|
||||
virtual VideoMediaChannel* CreateMediaChannel(
|
||||
MediaChannel::Role role,
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::VideoBitrateAllocatorFactory* video_bitrate_allocator_factory) {
|
||||
// For the case where a subclass overrides the deprecated method
|
||||
// but not the replacement method, call the deprecated method.
|
||||
// TODO(bugs.webrtc.org/13931): Remove default implementation
|
||||
// when downstream has migrated to new API.
|
||||
RTC_CHECK(!recursion_guard_);
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
RTC_LOG(LS_ERROR)
|
||||
<< "Override of deprecated declaration detected - please update!";
|
||||
return CreateMediaChannel(call, config, options, crypto_options,
|
||||
video_bitrate_allocator_factory);
|
||||
#pragma clang diagnostic pop
|
||||
}
|
||||
|
||||
// Creates a video media channel.
|
||||
// Returns NULL on failure.
|
||||
// TODO(bugs.webrtc.org/13931): Stop downstream usage of this function.
|
||||
[[deprecated("Please specify the role")]] virtual VideoMediaChannel*
|
||||
CreateMediaChannel(
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::VideoBitrateAllocatorFactory* video_bitrate_allocator_factory) {
|
||||
recursion_guard_ = true;
|
||||
auto new_channel =
|
||||
CreateMediaChannel(MediaChannel::Role::kBoth, call, config, options,
|
||||
crypto_options, video_bitrate_allocator_factory);
|
||||
recursion_guard_ = false;
|
||||
return new_channel;
|
||||
}
|
||||
|
||||
// Retrieve list of supported codecs.
|
||||
virtual std::vector<VideoCodec> send_codecs() const = 0;
|
||||
virtual std::vector<VideoCodec> recv_codecs() const = 0;
|
||||
|
@ -261,11 +176,6 @@ class VideoEngineInterface : public RtpHeaderExtensionQueryInterface {
|
|||
RTC_DCHECK(include_rtx);
|
||||
return recv_codecs();
|
||||
}
|
||||
|
||||
private:
|
||||
// Workaround variable for avoiding recursion between old and new APIs.
|
||||
// TODO(bugs.webrtc.org/13931): Remove when old interface is gone.
|
||||
bool recursion_guard_ = false;
|
||||
};
|
||||
|
||||
// MediaEngineInterface is an abstraction of a media engine which can be
|
||||
|
|
|
@ -83,68 +83,4 @@ class MostlyMockVoiceEngineInterface : public VoiceEngineInterface {
|
|||
(override));
|
||||
};
|
||||
|
||||
class OldStyleVoiceEngineInterface : public MostlyMockVoiceEngineInterface {
|
||||
public:
|
||||
using MostlyMockVoiceEngineInterface::CreateMediaChannel;
|
||||
// Old style overrides the deprecated API only.
|
||||
VoiceMediaChannel* CreateMediaChannel(
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const AudioOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options) override {
|
||||
++call_count;
|
||||
return nullptr;
|
||||
}
|
||||
int call_count = 0;
|
||||
};
|
||||
|
||||
class NewStyleVoiceEngineInterface : public MostlyMockVoiceEngineInterface {
|
||||
// New style overrides the non-deprecated API.
|
||||
VoiceMediaChannel* CreateMediaChannel(
|
||||
MediaChannel::Role role,
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const AudioOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::AudioCodecPairId codec_pair_id) override {
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
TEST(MediaEngineTest, NewStyleApiCallsOldIfOverridden) {
|
||||
OldStyleVoiceEngineInterface implementation_under_test;
|
||||
MediaConfig config;
|
||||
AudioOptions options;
|
||||
webrtc::CryptoOptions crypto_options;
|
||||
// Calling the old-style interface.
|
||||
implementation_under_test.CreateMediaChannel(nullptr, config, options,
|
||||
crypto_options);
|
||||
EXPECT_EQ(implementation_under_test.call_count, 1);
|
||||
// Calling the new-style interface redirects to the old-style interface.
|
||||
implementation_under_test.CreateMediaChannel(
|
||||
MediaChannel::Role::kBoth, nullptr, config, options, crypto_options,
|
||||
webrtc::AudioCodecPairId::Create());
|
||||
EXPECT_EQ(implementation_under_test.call_count, 2);
|
||||
}
|
||||
|
||||
#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
|
||||
TEST(MediaEngineTest, NoOverrideOfCreateCausesCrash) {
|
||||
MostlyMockVoiceEngineInterface implementation_under_test;
|
||||
MediaConfig config;
|
||||
AudioOptions options;
|
||||
webrtc::CryptoOptions crypto_options;
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
|
||||
EXPECT_DEATH(implementation_under_test.CreateMediaChannel(
|
||||
nullptr, config, options, crypto_options),
|
||||
"Check failed: !recursion_guard_");
|
||||
#pragma clang diagnostic pop
|
||||
EXPECT_DEATH(implementation_under_test.CreateMediaChannel(
|
||||
MediaChannel::Role::kBoth, nullptr, config, options,
|
||||
crypto_options, webrtc::AudioCodecPairId::Create()),
|
||||
"Check failed: !recursion_guard_");
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace cricket
|
||||
|
|
|
@ -24,8 +24,6 @@ class Call;
|
|||
|
||||
namespace cricket {
|
||||
|
||||
class VideoMediaChannel;
|
||||
|
||||
// Video engine implementation that does nothing and can be used in
|
||||
// CompositeMediaEngine.
|
||||
class NullWebRtcVideoEngine : public VideoEngineInterface {
|
||||
|
@ -49,17 +47,6 @@ class NullWebRtcVideoEngine : public VideoEngineInterface {
|
|||
const override {
|
||||
return {};
|
||||
}
|
||||
|
||||
VideoMediaChannel* CreateMediaChannel(
|
||||
MediaChannel::Role role,
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::VideoBitrateAllocatorFactory* video_bitrate_allocator_factory)
|
||||
override {
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace cricket
|
||||
|
|
|
@ -762,29 +762,6 @@ WebRtcVideoEngine::CreateReceiveChannel(
|
|||
call, config, options, crypto_options, decoder_factory_.get());
|
||||
}
|
||||
|
||||
VideoMediaChannel* WebRtcVideoEngine::CreateMediaChannel(
|
||||
MediaChannel::Role role,
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::VideoBitrateAllocatorFactory* video_bitrate_allocator_factory) {
|
||||
RTC_LOG(LS_INFO) << "CreateMediaChannel. Options: " << options.ToString();
|
||||
std::unique_ptr<VideoMediaSendChannelInterface> send_channel;
|
||||
std::unique_ptr<VideoMediaReceiveChannelInterface> receive_channel;
|
||||
if (role == MediaChannel::Role::kSend || role == MediaChannel::Role::kBoth) {
|
||||
send_channel = CreateSendChannel(call, config, options, crypto_options,
|
||||
video_bitrate_allocator_factory);
|
||||
}
|
||||
if (role == MediaChannel::Role::kReceive ||
|
||||
role == MediaChannel::Role::kBoth) {
|
||||
receive_channel =
|
||||
CreateReceiveChannel(call, config, options, crypto_options);
|
||||
}
|
||||
return new VideoMediaShimChannel(std::move(send_channel),
|
||||
std::move(receive_channel));
|
||||
}
|
||||
|
||||
std::vector<VideoCodec> WebRtcVideoEngine::send_codecs(bool include_rtx) const {
|
||||
return GetPayloadTypesAndDefaultCodecs(encoder_factory_.get(),
|
||||
/*is_decoder_factory=*/false,
|
||||
|
|
|
@ -59,7 +59,6 @@
|
|||
#include "media/base/codec.h"
|
||||
#include "media/base/media_channel.h"
|
||||
#include "media/base/media_channel_impl.h"
|
||||
#include "media/base/media_channel_shim.h"
|
||||
#include "media/base/media_config.h"
|
||||
#include "media/base/media_engine.h"
|
||||
#include "media/base/stream_params.h"
|
||||
|
@ -117,15 +116,6 @@ class WebRtcVideoEngine : public VideoEngineInterface {
|
|||
const VideoOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options) override;
|
||||
|
||||
VideoMediaChannel* CreateMediaChannel(
|
||||
MediaChannel::Role role,
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const VideoOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::VideoBitrateAllocatorFactory* video_bitrate_allocator_factory)
|
||||
override;
|
||||
|
||||
std::vector<VideoCodec> send_codecs() const override {
|
||||
return send_codecs(true);
|
||||
}
|
||||
|
|
|
@ -486,29 +486,6 @@ WebRtcVoiceEngine::CreateReceiveChannel(
|
|||
this, config, options, crypto_options, call, codec_pair_id);
|
||||
}
|
||||
|
||||
VoiceMediaChannel* WebRtcVoiceEngine::CreateMediaChannel(
|
||||
MediaChannel::Role role,
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const AudioOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::AudioCodecPairId codec_pair_id) {
|
||||
RTC_DCHECK_RUN_ON(call->worker_thread());
|
||||
std::unique_ptr<VoiceMediaSendChannelInterface> send_channel;
|
||||
std::unique_ptr<VoiceMediaReceiveChannelInterface> receive_channel;
|
||||
if (role == MediaChannel::Role::kSend || role == MediaChannel::Role::kBoth) {
|
||||
send_channel =
|
||||
CreateSendChannel(call, config, options, crypto_options, codec_pair_id);
|
||||
}
|
||||
if (role == MediaChannel::Role::kReceive ||
|
||||
role == MediaChannel::Role::kBoth) {
|
||||
receive_channel = CreateReceiveChannel(call, config, options,
|
||||
crypto_options, codec_pair_id);
|
||||
}
|
||||
return new VoiceMediaShimChannel(std::move(send_channel),
|
||||
std::move(receive_channel));
|
||||
}
|
||||
|
||||
void WebRtcVoiceEngine::ApplyOptions(const AudioOptions& options_in) {
|
||||
RTC_DCHECK_RUN_ON(&worker_thread_checker_);
|
||||
RTC_LOG(LS_INFO) << "WebRtcVoiceEngine::ApplyOptions: "
|
||||
|
|
|
@ -53,7 +53,6 @@
|
|||
#include "media/base/codec.h"
|
||||
#include "media/base/media_channel.h"
|
||||
#include "media/base/media_channel_impl.h"
|
||||
#include "media/base/media_channel_shim.h"
|
||||
#include "media/base/media_config.h"
|
||||
#include "media/base/media_engine.h"
|
||||
#include "media/base/rtp_utils.h"
|
||||
|
@ -121,14 +120,6 @@ class WebRtcVoiceEngine final : public VoiceEngineInterface {
|
|||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::AudioCodecPairId codec_pair_id) override;
|
||||
|
||||
VoiceMediaChannel* CreateMediaChannel(
|
||||
MediaChannel::Role role,
|
||||
webrtc::Call* call,
|
||||
const MediaConfig& config,
|
||||
const AudioOptions& options,
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
webrtc::AudioCodecPairId codec_pair_id) override;
|
||||
|
||||
const std::vector<AudioCodec>& send_codecs() const override;
|
||||
const std::vector<AudioCodec>& recv_codecs() const override;
|
||||
std::vector<webrtc::RtpHeaderExtensionCapability> GetRtpHeaderExtensions()
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
#include "media/base/fake_network_interface.h"
|
||||
#include "media/base/fake_rtp.h"
|
||||
#include "media/base/media_channel.h"
|
||||
#include "media/base/media_channel_shim.h"
|
||||
#include "media/base/media_constants.h"
|
||||
#include "media/engine/fake_webrtc_call.h"
|
||||
#include "modules/audio_device/include/mock_audio_device.h"
|
||||
|
|
24
pc/BUILD.gn
24
pc/BUILD.gn
|
@ -2450,7 +2450,6 @@ if (rtc_include_tests && !build_with_chromium) {
|
|||
"../common_video",
|
||||
"../logging:fake_rtc_event_log",
|
||||
"../media:codec",
|
||||
"../media:delayable",
|
||||
"../media:media_channel",
|
||||
"../media:media_constants",
|
||||
"../media:rid_description",
|
||||
|
@ -2559,27 +2558,6 @@ if (rtc_include_tests && !build_with_chromium) {
|
|||
]
|
||||
}
|
||||
|
||||
rtc_test("peer_connection_mediachannel_split_unittests") {
|
||||
testonly = true
|
||||
sources = [ "peer_connection_mediachannel_split_unittest.cc" ]
|
||||
deps = [
|
||||
":integration_test_helpers",
|
||||
":session_description",
|
||||
"../api:libjingle_peerconnection_api",
|
||||
"../api:media_stream_interface",
|
||||
"../api:rtc_error",
|
||||
"../api:rtc_stats_api",
|
||||
"../api:scoped_refptr",
|
||||
"../media:codec",
|
||||
"../media:media_constants",
|
||||
"../rtc_base:gunit_helpers",
|
||||
"../rtc_base:rtc_base_tests_utils",
|
||||
"../test:test_main",
|
||||
"../test:test_support",
|
||||
]
|
||||
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
|
||||
}
|
||||
|
||||
rtc_library("data_channel_controller_unittest") {
|
||||
testonly = true
|
||||
sources = [ "data_channel_controller_unittest.cc" ]
|
||||
|
@ -2758,7 +2736,7 @@ if (rtc_include_tests && !build_with_chromium) {
|
|||
"test/mock_peer_connection_observers.h",
|
||||
"test/mock_rtp_receiver_internal.h",
|
||||
"test/mock_rtp_sender_internal.h",
|
||||
"test/mock_voice_media_channel.h",
|
||||
"test/mock_voice_media_receive_channel_interface.h",
|
||||
"test/peer_connection_test_wrapper.cc",
|
||||
"test/peer_connection_test_wrapper.h",
|
||||
"test/rtc_stats_obtainer.h",
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
#include <atomic>
|
||||
|
||||
#include "pc/test/mock_voice_media_channel.h"
|
||||
#include "pc/test/mock_voice_media_receive_channel_interface.h"
|
||||
#include "rtc_base/gunit.h"
|
||||
#include "rtc_base/thread.h"
|
||||
#include "test/gmock.h"
|
||||
|
@ -38,28 +38,26 @@ class AudioRtpReceiverTest : public ::testing::Test {
|
|||
rtc::make_ref_counted<AudioRtpReceiver>(worker_,
|
||||
std::string(),
|
||||
std::vector<std::string>(),
|
||||
false)),
|
||||
media_channel_(cricket::MediaChannel::Role::kReceive,
|
||||
rtc::Thread::Current()) {
|
||||
EXPECT_CALL(media_channel_, SetRawAudioSink(kSsrc, _));
|
||||
EXPECT_CALL(media_channel_, SetBaseMinimumPlayoutDelayMs(kSsrc, _));
|
||||
false)) {
|
||||
EXPECT_CALL(receive_channel_, SetRawAudioSink(kSsrc, _));
|
||||
EXPECT_CALL(receive_channel_, SetBaseMinimumPlayoutDelayMs(kSsrc, _));
|
||||
}
|
||||
|
||||
~AudioRtpReceiverTest() {
|
||||
EXPECT_CALL(media_channel_, SetOutputVolume(kSsrc, kVolumeMuted));
|
||||
EXPECT_CALL(receive_channel_, SetOutputVolume(kSsrc, kVolumeMuted));
|
||||
receiver_->SetMediaChannel(nullptr);
|
||||
}
|
||||
|
||||
rtc::AutoThread main_thread_;
|
||||
rtc::Thread* worker_;
|
||||
rtc::scoped_refptr<AudioRtpReceiver> receiver_;
|
||||
cricket::MockVoiceMediaChannel media_channel_;
|
||||
cricket::MockVoiceMediaReceiveChannelInterface receive_channel_;
|
||||
};
|
||||
|
||||
TEST_F(AudioRtpReceiverTest, SetOutputVolumeIsCalled) {
|
||||
std::atomic_int set_volume_calls(0);
|
||||
|
||||
EXPECT_CALL(media_channel_, SetOutputVolume(kSsrc, kDefaultVolume))
|
||||
EXPECT_CALL(receive_channel_, SetOutputVolume(kSsrc, kDefaultVolume))
|
||||
.WillOnce(InvokeWithoutArgs([&] {
|
||||
set_volume_calls++;
|
||||
return true;
|
||||
|
@ -67,11 +65,11 @@ TEST_F(AudioRtpReceiverTest, SetOutputVolumeIsCalled) {
|
|||
|
||||
receiver_->track();
|
||||
receiver_->track()->set_enabled(true);
|
||||
receiver_->SetMediaChannel(media_channel_.AsVoiceReceiveChannel());
|
||||
EXPECT_CALL(media_channel_, SetDefaultRawAudioSink(_)).Times(0);
|
||||
receiver_->SetMediaChannel(&receive_channel_);
|
||||
EXPECT_CALL(receive_channel_, SetDefaultRawAudioSink(_)).Times(0);
|
||||
receiver_->SetupMediaChannel(kSsrc);
|
||||
|
||||
EXPECT_CALL(media_channel_, SetOutputVolume(kSsrc, kVolume))
|
||||
EXPECT_CALL(receive_channel_, SetOutputVolume(kSsrc, kVolume))
|
||||
.WillOnce(InvokeWithoutArgs([&] {
|
||||
set_volume_calls++;
|
||||
return true;
|
||||
|
@ -87,11 +85,11 @@ TEST_F(AudioRtpReceiverTest, VolumesSetBeforeStartingAreRespected) {
|
|||
receiver_->OnSetVolume(kVolume);
|
||||
|
||||
receiver_->track()->set_enabled(true);
|
||||
receiver_->SetMediaChannel(media_channel_.AsVoiceReceiveChannel());
|
||||
receiver_->SetMediaChannel(&receive_channel_);
|
||||
|
||||
// The previosly set initial volume should be propagated to the provided
|
||||
// media_channel_ as soon as SetupMediaChannel is called.
|
||||
EXPECT_CALL(media_channel_, SetOutputVolume(kSsrc, kVolume));
|
||||
EXPECT_CALL(receive_channel_, SetOutputVolume(kSsrc, kVolume));
|
||||
|
||||
receiver_->SetupMediaChannel(kSsrc);
|
||||
}
|
||||
|
@ -102,13 +100,13 @@ TEST_F(AudioRtpReceiverTest, VolumesSetBeforeStartingAreRespected) {
|
|||
TEST(AudioRtpReceiver, OnChangedNotificationsAfterConstruction) {
|
||||
webrtc::test::RunLoop loop;
|
||||
auto* thread = rtc::Thread::Current(); // Points to loop's thread.
|
||||
cricket::MockVoiceMediaChannel media_channel(
|
||||
cricket::MediaChannel::Role::kReceive, thread);
|
||||
cricket::MockVoiceMediaReceiveChannelInterface receive_channel;
|
||||
auto receiver = rtc::make_ref_counted<AudioRtpReceiver>(
|
||||
thread, std::string(), std::vector<std::string>(), true, &media_channel);
|
||||
thread, std::string(), std::vector<std::string>(), true,
|
||||
&receive_channel);
|
||||
|
||||
EXPECT_CALL(media_channel, SetDefaultRawAudioSink(_)).Times(1);
|
||||
EXPECT_CALL(media_channel, SetDefaultOutputVolume(kDefaultVolume)).Times(1);
|
||||
EXPECT_CALL(receive_channel, SetDefaultRawAudioSink(_)).Times(1);
|
||||
EXPECT_CALL(receive_channel, SetDefaultOutputVolume(kDefaultVolume)).Times(1);
|
||||
receiver->SetupUnsignaledMediaChannel();
|
||||
loop.Flush();
|
||||
|
||||
|
@ -119,10 +117,10 @@ TEST(AudioRtpReceiver, OnChangedNotificationsAfterConstruction) {
|
|||
// for the worker thread. This notification should trigger the volume
|
||||
// of the media channel to be set to kVolumeMuted.
|
||||
// Flush the worker thread, but set the expectation first for the call.
|
||||
EXPECT_CALL(media_channel, SetDefaultOutputVolume(kVolumeMuted)).Times(1);
|
||||
EXPECT_CALL(receive_channel, SetDefaultOutputVolume(kVolumeMuted)).Times(1);
|
||||
loop.Flush();
|
||||
|
||||
EXPECT_CALL(media_channel, SetDefaultOutputVolume(kVolumeMuted)).Times(1);
|
||||
EXPECT_CALL(receive_channel, SetDefaultOutputVolume(kVolumeMuted)).Times(1);
|
||||
receiver->SetMediaChannel(nullptr);
|
||||
}
|
||||
|
||||
|
|
|
@ -140,32 +140,6 @@ BaseChannel::BaseChannel(
|
|||
RTC_DLOG(LS_INFO) << "Created channel: " << ToString();
|
||||
}
|
||||
|
||||
BaseChannel::BaseChannel(rtc::Thread* worker_thread,
|
||||
rtc::Thread* network_thread,
|
||||
rtc::Thread* signaling_thread,
|
||||
std::unique_ptr<MediaChannel> media_channel,
|
||||
absl::string_view mid,
|
||||
bool srtp_required,
|
||||
webrtc::CryptoOptions crypto_options,
|
||||
UniqueRandomIdGenerator* ssrc_generator)
|
||||
: media_channel_(std::move(media_channel)),
|
||||
worker_thread_(worker_thread),
|
||||
network_thread_(network_thread),
|
||||
signaling_thread_(signaling_thread),
|
||||
alive_(PendingTaskSafetyFlag::Create()),
|
||||
srtp_required_(srtp_required),
|
||||
extensions_filter_(
|
||||
crypto_options.srtp.enable_encrypted_rtp_header_extensions
|
||||
? webrtc::RtpExtension::kPreferEncryptedExtension
|
||||
: webrtc::RtpExtension::kDiscardEncryptedExtension),
|
||||
demuxer_criteria_(mid),
|
||||
ssrc_generator_(ssrc_generator) {
|
||||
RTC_DCHECK_RUN_ON(worker_thread_);
|
||||
RTC_DCHECK(media_channel_);
|
||||
RTC_DCHECK(ssrc_generator_);
|
||||
RTC_DLOG(LS_INFO) << "Created channel: " << ToString();
|
||||
}
|
||||
|
||||
BaseChannel::~BaseChannel() {
|
||||
TRACE_EVENT0("webrtc", "BaseChannel::~BaseChannel");
|
||||
RTC_DCHECK_RUN_ON(worker_thread_);
|
||||
|
@ -178,15 +152,9 @@ BaseChannel::~BaseChannel() {
|
|||
}
|
||||
|
||||
std::string BaseChannel::ToString() const {
|
||||
if (media_send_channel_) {
|
||||
return StringFormat(
|
||||
"{mid: %s, media_type: %s}", mid().c_str(),
|
||||
MediaTypeToString(media_send_channel_->media_type()).c_str());
|
||||
} else {
|
||||
return StringFormat(
|
||||
"{mid: %s, media_type: %s}", mid().c_str(),
|
||||
MediaTypeToString(media_channel_->media_type()).c_str());
|
||||
}
|
||||
return StringFormat(
|
||||
"{mid: %s, media_type: %s}", mid().c_str(),
|
||||
MediaTypeToString(media_send_channel_->media_type()).c_str());
|
||||
}
|
||||
|
||||
bool BaseChannel::ConnectToRtpTransport_n() {
|
||||
|
@ -866,26 +834,6 @@ VoiceChannel::VoiceChannel(
|
|||
crypto_options,
|
||||
ssrc_generator) {}
|
||||
|
||||
VoiceChannel::VoiceChannel(
|
||||
rtc::Thread* worker_thread,
|
||||
rtc::Thread* network_thread,
|
||||
rtc::Thread* signaling_thread,
|
||||
std::unique_ptr<VoiceMediaChannel> media_channel_impl,
|
||||
absl::string_view mid,
|
||||
bool srtp_required,
|
||||
webrtc::CryptoOptions crypto_options,
|
||||
UniqueRandomIdGenerator* ssrc_generator)
|
||||
: BaseChannel(worker_thread,
|
||||
network_thread,
|
||||
signaling_thread,
|
||||
std::move(media_channel_impl),
|
||||
mid,
|
||||
srtp_required,
|
||||
crypto_options,
|
||||
ssrc_generator) {
|
||||
InitCallback();
|
||||
}
|
||||
|
||||
VoiceChannel::~VoiceChannel() {
|
||||
TRACE_EVENT0("webrtc", "VoiceChannel::~VoiceChannel");
|
||||
// this can't be done in the base class, since it calls a virtual
|
||||
|
@ -1041,23 +989,6 @@ VideoChannel::VideoChannel(
|
|||
send_channel()->SendCodecRtxTime());
|
||||
});
|
||||
}
|
||||
VideoChannel::VideoChannel(
|
||||
rtc::Thread* worker_thread,
|
||||
rtc::Thread* network_thread,
|
||||
rtc::Thread* signaling_thread,
|
||||
std::unique_ptr<VideoMediaChannel> media_channel_impl,
|
||||
absl::string_view mid,
|
||||
bool srtp_required,
|
||||
webrtc::CryptoOptions crypto_options,
|
||||
UniqueRandomIdGenerator* ssrc_generator)
|
||||
: BaseChannel(worker_thread,
|
||||
network_thread,
|
||||
signaling_thread,
|
||||
std::move(media_channel_impl),
|
||||
mid,
|
||||
srtp_required,
|
||||
crypto_options,
|
||||
ssrc_generator) {}
|
||||
|
||||
VideoChannel::~VideoChannel() {
|
||||
TRACE_EVENT0("webrtc", "VideoChannel::~VideoChannel");
|
||||
|
|
57
pc/channel.h
57
pc/channel.h
|
@ -94,16 +94,6 @@ class BaseChannel : public ChannelInterface,
|
|||
bool srtp_required,
|
||||
webrtc::CryptoOptions crypto_options,
|
||||
rtc::UniqueRandomIdGenerator* ssrc_generator);
|
||||
// Constructor for use when the MediaChannel is not split
|
||||
// TODO(bugs.webrtc.org/13931): Delete when split channel project is complete.
|
||||
BaseChannel(rtc::Thread* worker_thread,
|
||||
rtc::Thread* network_thread,
|
||||
rtc::Thread* signaling_thread,
|
||||
std::unique_ptr<MediaChannel> media_channel_impl,
|
||||
absl::string_view mid,
|
||||
bool srtp_required,
|
||||
webrtc::CryptoOptions crypto_options,
|
||||
rtc::UniqueRandomIdGenerator* ssrc_generator);
|
||||
virtual ~BaseChannel();
|
||||
|
||||
rtc::Thread* worker_thread() const { return worker_thread_; }
|
||||
|
@ -316,13 +306,6 @@ class BaseChannel : public ChannelInterface,
|
|||
// Return description of media channel to facilitate logging
|
||||
std::string ToString() const;
|
||||
|
||||
// MediaChannel implementation pointers.
|
||||
// Either the `media_channel_` is set, or the `media_send_channel_`
|
||||
// and the `media_receive_channel_` is set.
|
||||
// TODO(bugs.webrtc.org/13931): Delete `media_channel_` when split channel
|
||||
// project is complete.
|
||||
const std::unique_ptr<MediaChannel> media_channel_;
|
||||
|
||||
const std::unique_ptr<MediaSendChannelInterface> media_send_channel_;
|
||||
const std::unique_ptr<MediaReceiveChannelInterface> media_receive_channel_;
|
||||
|
||||
|
@ -396,16 +379,6 @@ class VoiceChannel : public BaseChannel {
|
|||
bool srtp_required,
|
||||
webrtc::CryptoOptions crypto_options,
|
||||
rtc::UniqueRandomIdGenerator* ssrc_generator);
|
||||
// Constructor for use when the MediaChannel is not split
|
||||
// TODO(bugs.webrtc.org/13931): Delete when split channel project is complete.
|
||||
VoiceChannel(rtc::Thread* worker_thread,
|
||||
rtc::Thread* network_thread,
|
||||
rtc::Thread* signaling_thread,
|
||||
std::unique_ptr<VoiceMediaChannel> media_channel_impl,
|
||||
absl::string_view mid,
|
||||
bool srtp_required,
|
||||
webrtc::CryptoOptions crypto_options,
|
||||
rtc::UniqueRandomIdGenerator* ssrc_generator);
|
||||
|
||||
~VoiceChannel();
|
||||
|
||||
|
@ -416,17 +389,11 @@ class VoiceChannel : public BaseChannel {
|
|||
VoiceChannel* AsVoiceChannel() override { return this; }
|
||||
|
||||
VoiceMediaSendChannelInterface* send_channel() {
|
||||
if (media_send_channel_) {
|
||||
return media_send_channel_->AsVoiceSendChannel();
|
||||
}
|
||||
return media_channel_->AsVoiceSendChannel();
|
||||
return media_send_channel_->AsVoiceSendChannel();
|
||||
}
|
||||
|
||||
VoiceMediaReceiveChannelInterface* receive_channel() {
|
||||
if (media_receive_channel_) {
|
||||
return media_receive_channel_->AsVoiceReceiveChannel();
|
||||
}
|
||||
return media_channel_->AsVoiceReceiveChannel();
|
||||
return media_receive_channel_->AsVoiceReceiveChannel();
|
||||
}
|
||||
|
||||
VoiceMediaSendChannelInterface* media_send_channel() override {
|
||||
|
@ -483,16 +450,6 @@ class VideoChannel : public BaseChannel {
|
|||
bool srtp_required,
|
||||
webrtc::CryptoOptions crypto_options,
|
||||
rtc::UniqueRandomIdGenerator* ssrc_generator);
|
||||
// Constructor for use when the MediaChannel is not split
|
||||
// TODO(bugs.webrtc.org/13931): Delete when split channel project is complete.
|
||||
VideoChannel(rtc::Thread* worker_thread,
|
||||
rtc::Thread* network_thread,
|
||||
rtc::Thread* signaling_thread,
|
||||
std::unique_ptr<VideoMediaChannel> media_channel_impl,
|
||||
absl::string_view mid,
|
||||
bool srtp_required,
|
||||
webrtc::CryptoOptions crypto_options,
|
||||
rtc::UniqueRandomIdGenerator* ssrc_generator);
|
||||
~VideoChannel();
|
||||
|
||||
VideoChannel* AsVideoChannel() override { return this; }
|
||||
|
@ -502,17 +459,11 @@ class VideoChannel : public BaseChannel {
|
|||
}
|
||||
|
||||
VideoMediaSendChannelInterface* send_channel() {
|
||||
if (media_send_channel_) {
|
||||
return media_send_channel_->AsVideoSendChannel();
|
||||
}
|
||||
return media_channel_->AsVideoSendChannel();
|
||||
return media_send_channel_->AsVideoSendChannel();
|
||||
}
|
||||
|
||||
VideoMediaReceiveChannelInterface* receive_channel() {
|
||||
if (media_receive_channel_) {
|
||||
return media_receive_channel_->AsVideoReceiveChannel();
|
||||
}
|
||||
return media_channel_->AsVideoReceiveChannel();
|
||||
return media_receive_channel_->AsVideoReceiveChannel();
|
||||
}
|
||||
|
||||
VideoMediaSendChannelInterface* media_send_channel() override {
|
||||
|
|
|
@ -28,7 +28,6 @@ class VideoBitrateAllocatorFactory;
|
|||
|
||||
namespace cricket {
|
||||
|
||||
class MediaChannel;
|
||||
class VoiceChannel;
|
||||
class VideoChannel;
|
||||
class MediaContentDescription;
|
||||
|
|
|
@ -1,209 +0,0 @@
|
|||
/*
|
||||
* Copyright 2012 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
// Integration tests for PeerConnection to exercise the options of
|
||||
// either splitting or not splitting the MediaChannel object.
|
||||
// These tests exercise a full stack over a simulated network.
|
||||
|
||||
// TODO(bugs.webrtc.org/13931): Delete these tests when split is landed.
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/media_stream_interface.h"
|
||||
#include "api/peer_connection_interface.h"
|
||||
#include "api/rtc_error.h"
|
||||
#include "api/scoped_refptr.h"
|
||||
#include "api/stats/rtc_stats.h"
|
||||
#include "api/stats/rtc_stats_report.h"
|
||||
#include "api/stats/rtcstats_objects.h"
|
||||
#include "media/base/codec.h"
|
||||
#include "media/base/media_constants.h"
|
||||
#include "pc/session_description.h"
|
||||
#include "pc/test/integration_test_helpers.h"
|
||||
#include "rtc_base/gunit.h"
|
||||
#include "rtc_base/virtual_socket_server.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
namespace {
|
||||
|
||||
class PeerConnectionMediaChannelSplitTest
|
||||
: public PeerConnectionIntegrationBaseTest,
|
||||
public ::testing::WithParamInterface<std::string> {
|
||||
protected:
|
||||
PeerConnectionMediaChannelSplitTest()
|
||||
: PeerConnectionIntegrationBaseTest(SdpSemantics::kUnifiedPlan,
|
||||
/* field_trials = */ GetParam()) {}
|
||||
};
|
||||
|
||||
int NacksReceivedCount(PeerConnectionIntegrationWrapper& pc) {
|
||||
rtc::scoped_refptr<const webrtc::RTCStatsReport> report = pc.NewGetStats();
|
||||
auto sender_stats = report->GetStatsOfType<RTCOutboundRtpStreamStats>();
|
||||
if (sender_stats.size() != 1) {
|
||||
ADD_FAILURE();
|
||||
return 0;
|
||||
}
|
||||
if (!sender_stats[0]->nack_count.is_defined()) {
|
||||
return 0;
|
||||
}
|
||||
return *sender_stats[0]->nack_count;
|
||||
}
|
||||
|
||||
int NacksSentCount(PeerConnectionIntegrationWrapper& pc) {
|
||||
rtc::scoped_refptr<const webrtc::RTCStatsReport> report = pc.NewGetStats();
|
||||
auto receiver_stats = report->GetStatsOfType<RTCInboundRtpStreamStats>();
|
||||
if (receiver_stats.size() != 1) {
|
||||
ADD_FAILURE();
|
||||
return 0;
|
||||
}
|
||||
if (!receiver_stats[0]->nack_count.is_defined()) {
|
||||
return 0;
|
||||
}
|
||||
return *receiver_stats[0]->nack_count;
|
||||
}
|
||||
|
||||
// Test disabled because it is flaky.
|
||||
TEST_P(PeerConnectionMediaChannelSplitTest,
|
||||
DISABLED_AudioPacketLossCausesNack) {
|
||||
RTCConfiguration config;
|
||||
ASSERT_TRUE(CreatePeerConnectionWrappersWithConfig(config, config));
|
||||
ConnectFakeSignaling();
|
||||
auto audio_transceiver_or_error =
|
||||
caller()->pc()->AddTransceiver(caller()->CreateLocalAudioTrack());
|
||||
ASSERT_TRUE(audio_transceiver_or_error.ok());
|
||||
auto send_transceiver = audio_transceiver_or_error.MoveValue();
|
||||
// Munge the SDP to include NACK and RRTR on Opus, and remove all other
|
||||
// codecs.
|
||||
caller()->SetGeneratedSdpMunger([](cricket::SessionDescription* desc) {
|
||||
for (ContentInfo& content : desc->contents()) {
|
||||
cricket::AudioContentDescription* media =
|
||||
content.media_description()->as_audio();
|
||||
std::vector<cricket::AudioCodec> codecs = media->codecs();
|
||||
std::vector<cricket::AudioCodec> codecs_out;
|
||||
for (cricket::AudioCodec codec : codecs) {
|
||||
if (codec.name == "opus") {
|
||||
codec.AddFeedbackParam(cricket::FeedbackParam(
|
||||
cricket::kRtcpFbParamNack, cricket::kParamValueEmpty));
|
||||
codec.AddFeedbackParam(cricket::FeedbackParam(
|
||||
cricket::kRtcpFbParamRrtr, cricket::kParamValueEmpty));
|
||||
codecs_out.push_back(codec);
|
||||
}
|
||||
}
|
||||
EXPECT_FALSE(codecs_out.empty());
|
||||
media->set_codecs(codecs_out);
|
||||
}
|
||||
});
|
||||
|
||||
caller()->CreateAndSetAndSignalOffer();
|
||||
// Check for failure in helpers
|
||||
ASSERT_FALSE(HasFailure());
|
||||
MediaExpectations media_expectations;
|
||||
media_expectations.CalleeExpectsSomeAudio(1);
|
||||
ExpectNewFrames(media_expectations);
|
||||
ASSERT_FALSE(HasFailure());
|
||||
|
||||
virtual_socket_server()->set_drop_probability(0.2);
|
||||
|
||||
// Wait until callee has sent at least one NACK.
|
||||
// Note that due to stats caching, this might only be visible 50 ms
|
||||
// after the nack was in fact sent.
|
||||
EXPECT_TRUE_WAIT(NacksSentCount(*callee()) > 0, kDefaultTimeout);
|
||||
ASSERT_FALSE(HasFailure());
|
||||
|
||||
virtual_socket_server()->set_drop_probability(0.0);
|
||||
// Wait until caller has received at least one NACK
|
||||
EXPECT_TRUE_WAIT(NacksReceivedCount(*caller()) > 0, kDefaultTimeout);
|
||||
}
|
||||
|
||||
TEST_P(PeerConnectionMediaChannelSplitTest, VideoPacketLossCausesNack) {
|
||||
RTCConfiguration config;
|
||||
ASSERT_TRUE(CreatePeerConnectionWrappersWithConfig(config, config));
|
||||
ConnectFakeSignaling();
|
||||
auto video_transceiver_or_error =
|
||||
caller()->pc()->AddTransceiver(caller()->CreateLocalVideoTrack());
|
||||
ASSERT_TRUE(video_transceiver_or_error.ok());
|
||||
auto send_transceiver = video_transceiver_or_error.MoveValue();
|
||||
// Munge the SDP to include NACK and RRTR on VP8, and remove all other
|
||||
// codecs.
|
||||
caller()->SetGeneratedSdpMunger([](cricket::SessionDescription* desc) {
|
||||
for (ContentInfo& content : desc->contents()) {
|
||||
cricket::VideoContentDescription* media =
|
||||
content.media_description()->as_video();
|
||||
std::vector<cricket::VideoCodec> codecs = media->codecs();
|
||||
std::vector<cricket::VideoCodec> codecs_out;
|
||||
for (cricket::VideoCodec codec : codecs) {
|
||||
if (codec.name == "VP8") {
|
||||
ASSERT_TRUE(codec.HasFeedbackParam(cricket::FeedbackParam(
|
||||
cricket::kRtcpFbParamNack, cricket::kParamValueEmpty)));
|
||||
codecs_out.push_back(codec);
|
||||
}
|
||||
}
|
||||
EXPECT_FALSE(codecs_out.empty());
|
||||
media->set_codecs(codecs_out);
|
||||
}
|
||||
});
|
||||
|
||||
caller()->CreateAndSetAndSignalOffer();
|
||||
// Check for failure in helpers
|
||||
ASSERT_FALSE(HasFailure());
|
||||
MediaExpectations media_expectations;
|
||||
media_expectations.CalleeExpectsSomeVideo(1);
|
||||
ExpectNewFrames(media_expectations);
|
||||
ASSERT_FALSE(HasFailure());
|
||||
|
||||
virtual_socket_server()->set_drop_probability(0.2);
|
||||
|
||||
// Wait until callee has sent at least one NACK.
|
||||
// Note that due to stats caching, this might only be visible 50 ms
|
||||
// after the nack was in fact sent.
|
||||
EXPECT_TRUE_WAIT(NacksSentCount(*callee()) > 0, kDefaultTimeout);
|
||||
ASSERT_FALSE(HasFailure());
|
||||
|
||||
// Wait until caller has received at least one NACK
|
||||
EXPECT_TRUE_WAIT(NacksReceivedCount(*caller()) > 0, kDefaultTimeout);
|
||||
}
|
||||
|
||||
// Test that we can get capture start ntp time.
|
||||
TEST_P(PeerConnectionMediaChannelSplitTest,
|
||||
GetCaptureStartNtpTimeWithOldStatsApi) {
|
||||
ASSERT_TRUE(CreatePeerConnectionWrappers());
|
||||
ConnectFakeSignaling();
|
||||
caller()->AddAudioTrack();
|
||||
|
||||
callee()->AddAudioTrack();
|
||||
|
||||
// Do offer/answer, wait for the callee to receive some frames.
|
||||
caller()->CreateAndSetAndSignalOffer();
|
||||
ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
|
||||
|
||||
// Get the remote audio track created on the receiver, so they can be used as
|
||||
// GetStats filters.
|
||||
auto receivers = callee()->pc()->GetReceivers();
|
||||
ASSERT_EQ(1u, receivers.size());
|
||||
auto remote_audio_track = receivers[0]->track();
|
||||
|
||||
// Get the audio output level stats. Note that the level is not available
|
||||
// until an RTCP packet has been received.
|
||||
EXPECT_TRUE_WAIT(callee()->OldGetStatsForTrack(remote_audio_track.get())
|
||||
->CaptureStartNtpTime() > 0,
|
||||
2 * kMaxWaitForFramesMs);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(PeerConnectionMediaChannelSplitTest,
|
||||
PeerConnectionMediaChannelSplitTest,
|
||||
Values("WebRTC-SplitMediaChannel/Disabled/",
|
||||
"WebRTC-SplitMediaChannel/Enabled/"));
|
||||
|
||||
} // namespace
|
||||
|
||||
} // namespace webrtc
|
|
@ -37,7 +37,6 @@
|
|||
#include "api/video/video_bitrate_allocator_factory.h"
|
||||
#include "api/video/video_codec_constants.h"
|
||||
#include "media/base/codec.h"
|
||||
#include "media/base/delayable.h"
|
||||
#include "media/base/fake_media_engine.h"
|
||||
#include "media/base/media_channel.h"
|
||||
#include "media/base/media_config.h"
|
||||
|
@ -485,9 +484,10 @@ class RtpSenderReceiverTest
|
|||
|
||||
// Check that minimum Jitter Buffer delay is propagated to the underlying
|
||||
// `media_channel`.
|
||||
void VerifyRtpReceiverDelayBehaviour(cricket::Delayable* media_channel,
|
||||
RtpReceiverInterface* receiver,
|
||||
uint32_t ssrc) {
|
||||
void VerifyRtpReceiverDelayBehaviour(
|
||||
cricket::MediaReceiveChannelInterface* media_channel,
|
||||
RtpReceiverInterface* receiver,
|
||||
uint32_t ssrc) {
|
||||
receiver->SetJitterBufferMinimumDelay(/*delay_seconds=*/0.5);
|
||||
absl::optional<int> delay_ms =
|
||||
media_channel->GetBaseMinimumPlayoutDelayMs(ssrc); // In milliseconds.
|
||||
|
|
|
@ -202,8 +202,6 @@ RTCError RtpTransceiver::CreateChannel(
|
|||
return RTCError(RTCErrorType::INTERNAL_ERROR,
|
||||
"No media engine for mid=" + std::string(mid));
|
||||
}
|
||||
bool use_split_media_channel =
|
||||
!context()->field_trials().IsDisabled("WebRTC-SplitMediaChannel");
|
||||
std::unique_ptr<cricket::ChannelInterface> new_channel;
|
||||
if (media_type() == cricket::MEDIA_TYPE_AUDIO) {
|
||||
// TODO(bugs.webrtc.org/11992): CreateVideoChannel internally switches to
|
||||
|
@ -219,50 +217,34 @@ RTCError RtpTransceiver::CreateChannel(
|
|||
|
||||
AudioCodecPairId codec_pair_id = AudioCodecPairId::Create();
|
||||
|
||||
if (use_split_media_channel) {
|
||||
std::unique_ptr<cricket::VoiceMediaSendChannelInterface>
|
||||
media_send_channel = media_engine()->voice().CreateSendChannel(
|
||||
call_ptr, media_config, audio_options, crypto_options,
|
||||
codec_pair_id);
|
||||
if (!media_send_channel) {
|
||||
// TODO(bugs.webrtc.org/14912): Consider CHECK or reporting failure
|
||||
return;
|
||||
}
|
||||
std::unique_ptr<cricket::VoiceMediaReceiveChannelInterface>
|
||||
media_receive_channel =
|
||||
media_engine()->voice().CreateReceiveChannel(
|
||||
call_ptr, media_config, audio_options, crypto_options,
|
||||
codec_pair_id);
|
||||
if (!media_receive_channel) {
|
||||
return;
|
||||
}
|
||||
// Note that this is safe because both sending and
|
||||
// receiving channels will be deleted at the same time.
|
||||
media_send_channel->SetSsrcListChangedCallback(
|
||||
[receive_channel = media_receive_channel.get()](
|
||||
const std::set<uint32_t>& choices) {
|
||||
receive_channel->ChooseReceiverReportSsrc(choices);
|
||||
});
|
||||
|
||||
new_channel = std::make_unique<cricket::VoiceChannel>(
|
||||
context()->worker_thread(), context()->network_thread(),
|
||||
context()->signaling_thread(), std::move(media_send_channel),
|
||||
std::move(media_receive_channel), mid, srtp_required,
|
||||
crypto_options, context()->ssrc_generator());
|
||||
} else {
|
||||
cricket::VoiceMediaChannel* media_channel =
|
||||
media_engine()->voice().CreateMediaChannel(
|
||||
cricket::MediaChannel::Role::kBoth, call_ptr, media_config,
|
||||
audio_options, crypto_options, AudioCodecPairId::Create());
|
||||
if (!media_channel) {
|
||||
return;
|
||||
}
|
||||
|
||||
new_channel = std::make_unique<cricket::VoiceChannel>(
|
||||
context()->worker_thread(), context()->network_thread(),
|
||||
context()->signaling_thread(), absl::WrapUnique(media_channel), mid,
|
||||
srtp_required, crypto_options, context()->ssrc_generator());
|
||||
std::unique_ptr<cricket::VoiceMediaSendChannelInterface>
|
||||
media_send_channel = media_engine()->voice().CreateSendChannel(
|
||||
call_ptr, media_config, audio_options, crypto_options,
|
||||
codec_pair_id);
|
||||
if (!media_send_channel) {
|
||||
// TODO(bugs.webrtc.org/14912): Consider CHECK or reporting failure
|
||||
return;
|
||||
}
|
||||
std::unique_ptr<cricket::VoiceMediaReceiveChannelInterface>
|
||||
media_receive_channel = media_engine()->voice().CreateReceiveChannel(
|
||||
call_ptr, media_config, audio_options, crypto_options,
|
||||
codec_pair_id);
|
||||
if (!media_receive_channel) {
|
||||
return;
|
||||
}
|
||||
// Note that this is safe because both sending and
|
||||
// receiving channels will be deleted at the same time.
|
||||
media_send_channel->SetSsrcListChangedCallback(
|
||||
[receive_channel =
|
||||
media_receive_channel.get()](const std::set<uint32_t>& choices) {
|
||||
receive_channel->ChooseReceiverReportSsrc(choices);
|
||||
});
|
||||
|
||||
new_channel = std::make_unique<cricket::VoiceChannel>(
|
||||
context()->worker_thread(), context()->network_thread(),
|
||||
context()->signaling_thread(), std::move(media_send_channel),
|
||||
std::move(media_receive_channel), mid, srtp_required, crypto_options,
|
||||
context()->ssrc_generator());
|
||||
});
|
||||
} else {
|
||||
RTC_DCHECK_EQ(cricket::MEDIA_TYPE_VIDEO, media_type());
|
||||
|
@ -273,49 +255,33 @@ RTCError RtpTransceiver::CreateChannel(
|
|||
context()->worker_thread()->BlockingCall([&] {
|
||||
RTC_DCHECK_RUN_ON(context()->worker_thread());
|
||||
|
||||
if (use_split_media_channel) {
|
||||
std::unique_ptr<cricket::VideoMediaSendChannelInterface>
|
||||
media_send_channel = media_engine()->video().CreateSendChannel(
|
||||
call_ptr, media_config, video_options, crypto_options,
|
||||
video_bitrate_allocator_factory);
|
||||
if (!media_send_channel) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::unique_ptr<cricket::VideoMediaReceiveChannelInterface>
|
||||
media_receive_channel =
|
||||
media_engine()->video().CreateReceiveChannel(
|
||||
call_ptr, media_config, video_options, crypto_options);
|
||||
if (!media_receive_channel) {
|
||||
return;
|
||||
}
|
||||
// Note that this is safe because both sending and
|
||||
// receiving channels will be deleted at the same time.
|
||||
media_send_channel->SetSsrcListChangedCallback(
|
||||
[receive_channel = media_receive_channel.get()](
|
||||
const std::set<uint32_t>& choices) {
|
||||
receive_channel->ChooseReceiverReportSsrc(choices);
|
||||
});
|
||||
|
||||
new_channel = std::make_unique<cricket::VideoChannel>(
|
||||
context()->worker_thread(), context()->network_thread(),
|
||||
context()->signaling_thread(), std::move(media_send_channel),
|
||||
std::move(media_receive_channel), mid, srtp_required,
|
||||
crypto_options, context()->ssrc_generator());
|
||||
} else {
|
||||
cricket::VideoMediaChannel* media_channel =
|
||||
media_engine()->video().CreateMediaChannel(
|
||||
cricket::MediaChannel::Role::kBoth, call_ptr, media_config,
|
||||
video_options, crypto_options, video_bitrate_allocator_factory);
|
||||
if (!media_channel) {
|
||||
return;
|
||||
}
|
||||
|
||||
new_channel = std::make_unique<cricket::VideoChannel>(
|
||||
context()->worker_thread(), context()->network_thread(),
|
||||
context()->signaling_thread(), absl::WrapUnique(media_channel), mid,
|
||||
srtp_required, crypto_options, context()->ssrc_generator());
|
||||
std::unique_ptr<cricket::VideoMediaSendChannelInterface>
|
||||
media_send_channel = media_engine()->video().CreateSendChannel(
|
||||
call_ptr, media_config, video_options, crypto_options,
|
||||
video_bitrate_allocator_factory);
|
||||
if (!media_send_channel) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::unique_ptr<cricket::VideoMediaReceiveChannelInterface>
|
||||
media_receive_channel = media_engine()->video().CreateReceiveChannel(
|
||||
call_ptr, media_config, video_options, crypto_options);
|
||||
if (!media_receive_channel) {
|
||||
return;
|
||||
}
|
||||
// Note that this is safe because both sending and
|
||||
// receiving channels will be deleted at the same time.
|
||||
media_send_channel->SetSsrcListChangedCallback(
|
||||
[receive_channel =
|
||||
media_receive_channel.get()](const std::set<uint32_t>& choices) {
|
||||
receive_channel->ChooseReceiverReportSsrc(choices);
|
||||
});
|
||||
|
||||
new_channel = std::make_unique<cricket::VideoChannel>(
|
||||
context()->worker_thread(), context()->network_thread(),
|
||||
context()->signaling_thread(), std::move(media_send_channel),
|
||||
std::move(media_receive_channel), mid, srtp_required, crypto_options,
|
||||
context()->ssrc_generator());
|
||||
});
|
||||
}
|
||||
if (!new_channel) {
|
||||
|
|
|
@ -382,7 +382,7 @@ TEST_F(RtpTransceiverTestForHeaderExtensions,
|
|||
EXPECT_CALL(*mock_channel, SetFirstPacketReceivedCallback(_));
|
||||
EXPECT_CALL(*mock_channel, media_type())
|
||||
.WillRepeatedly(Return(cricket::MediaType::MEDIA_TYPE_AUDIO));
|
||||
EXPECT_CALL(*mock_channel, media_send_channel())
|
||||
EXPECT_CALL(*mock_channel, voice_media_send_channel())
|
||||
.WillRepeatedly(Return(nullptr));
|
||||
EXPECT_CALL(*mock_channel, mid()).WillRepeatedly(ReturnRef(content_name));
|
||||
EXPECT_CALL(*mock_channel, SetRtpTransport(_)).WillRepeatedly(Return(true));
|
||||
|
@ -415,7 +415,7 @@ TEST_F(RtpTransceiverTestForHeaderExtensions, ReturnsNegotiatedHdrExts) {
|
|||
EXPECT_CALL(*mock_channel, SetFirstPacketReceivedCallback(_));
|
||||
EXPECT_CALL(*mock_channel, media_type())
|
||||
.WillRepeatedly(Return(cricket::MediaType::MEDIA_TYPE_AUDIO));
|
||||
EXPECT_CALL(*mock_channel, media_send_channel())
|
||||
EXPECT_CALL(*mock_channel, voice_media_send_channel())
|
||||
.WillRepeatedly(Return(nullptr));
|
||||
EXPECT_CALL(*mock_channel, mid()).WillRepeatedly(ReturnRef(content_name));
|
||||
EXPECT_CALL(*mock_channel, SetRtpTransport(_)).WillRepeatedly(Return(true));
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "media/base/media_channel.h"
|
||||
#include "pc/channel_interface.h"
|
||||
#include "test/gmock.h"
|
||||
|
||||
|
@ -27,12 +28,27 @@ class MockChannelInterface : public cricket::ChannelInterface {
|
|||
MOCK_METHOD(cricket::MediaType, media_type, (), (const, override));
|
||||
MOCK_METHOD(VideoChannel*, AsVideoChannel, (), (override));
|
||||
MOCK_METHOD(VoiceChannel*, AsVoiceChannel, (), (override));
|
||||
MOCK_METHOD(MediaChannel*, media_send_channel, (), (override));
|
||||
MOCK_METHOD(VoiceMediaChannel*, voice_media_send_channel, (), (override));
|
||||
MOCK_METHOD(VideoMediaChannel*, video_media_send_channel, (), (override));
|
||||
MOCK_METHOD(MediaChannel*, media_receive_channel, (), (override));
|
||||
MOCK_METHOD(VoiceMediaChannel*, voice_media_receive_channel, (), (override));
|
||||
MOCK_METHOD(VideoMediaChannel*, video_media_receive_channel, (), (override));
|
||||
MOCK_METHOD(MediaSendChannelInterface*, media_send_channel, (), (override));
|
||||
MOCK_METHOD(VoiceMediaSendChannelInterface*,
|
||||
voice_media_send_channel,
|
||||
(),
|
||||
(override));
|
||||
MOCK_METHOD(VideoMediaSendChannelInterface*,
|
||||
video_media_send_channel,
|
||||
(),
|
||||
(override));
|
||||
MOCK_METHOD(MediaReceiveChannelInterface*,
|
||||
media_receive_channel,
|
||||
(),
|
||||
(override));
|
||||
MOCK_METHOD(VoiceMediaReceiveChannelInterface*,
|
||||
voice_media_receive_channel,
|
||||
(),
|
||||
(override));
|
||||
MOCK_METHOD(VideoMediaReceiveChannelInterface*,
|
||||
video_media_receive_channel,
|
||||
(),
|
||||
(override));
|
||||
MOCK_METHOD(absl::string_view, transport_name, (), (const, override));
|
||||
MOCK_METHOD(const std::string&, mid, (), (const, override));
|
||||
MOCK_METHOD(void, Enable, (bool), (override));
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2021 The WebRTC project authors. All Rights Reserved.
|
||||
* Copyright 2023 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
|
@ -7,8 +7,8 @@
|
|||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
#ifndef PC_TEST_MOCK_VOICE_MEDIA_CHANNEL_H_
|
||||
#define PC_TEST_MOCK_VOICE_MEDIA_CHANNEL_H_
|
||||
#ifndef PC_TEST_MOCK_VOICE_MEDIA_RECEIVE_CHANNEL_INTERFACE_H_
|
||||
#define PC_TEST_MOCK_VOICE_MEDIA_RECEIVE_CHANNEL_INTERFACE_H_
|
||||
|
||||
#include <memory>
|
||||
#include <set>
|
||||
|
@ -23,102 +23,16 @@
|
|||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
using ::testing::InvokeWithoutArgs;
|
||||
using ::testing::Mock;
|
||||
|
||||
namespace cricket {
|
||||
class MockVoiceMediaChannel : public VoiceMediaChannel {
|
||||
|
||||
class MockVoiceMediaReceiveChannelInterface
|
||||
: public VoiceMediaReceiveChannelInterface {
|
||||
public:
|
||||
MockVoiceMediaChannel(MediaChannel::Role role,
|
||||
webrtc::TaskQueueBase* network_thread)
|
||||
: VoiceMediaChannel(role, network_thread) {}
|
||||
MockVoiceMediaReceiveChannelInterface() {
|
||||
ON_CALL(*this, AsVoiceReceiveChannel).WillByDefault(testing::Return(this));
|
||||
}
|
||||
|
||||
MOCK_METHOD(void,
|
||||
SetInterface,
|
||||
(MediaChannelNetworkInterface * iface),
|
||||
(override));
|
||||
MOCK_METHOD(void,
|
||||
OnPacketReceived,
|
||||
(const webrtc::RtpPacketReceived& packet),
|
||||
(override));
|
||||
MOCK_METHOD(void,
|
||||
OnPacketSent,
|
||||
(const rtc::SentPacket& sent_packet),
|
||||
(override));
|
||||
MOCK_METHOD(void, OnReadyToSend, (bool ready), (override));
|
||||
MOCK_METHOD(void,
|
||||
OnNetworkRouteChanged,
|
||||
(absl::string_view transport_name,
|
||||
const rtc::NetworkRoute& network_route),
|
||||
(override));
|
||||
MOCK_METHOD(void, SetExtmapAllowMixed, (bool extmap_allow_mixed), (override));
|
||||
MOCK_METHOD(bool, ExtmapAllowMixed, (), (const, override));
|
||||
MOCK_METHOD(bool, HasNetworkInterface, (), (const, override));
|
||||
MOCK_METHOD(bool, AddSendStream, (const StreamParams& sp), (override));
|
||||
MOCK_METHOD(bool, RemoveSendStream, (uint32_t ssrc), (override));
|
||||
MOCK_METHOD(bool, AddRecvStream, (const StreamParams& sp), (override));
|
||||
MOCK_METHOD(bool, RemoveRecvStream, (uint32_t ssrc), (override));
|
||||
MOCK_METHOD(void, ResetUnsignaledRecvStream, (), (override));
|
||||
MOCK_METHOD(absl::optional<uint32_t>,
|
||||
GetUnsignaledSsrc,
|
||||
(),
|
||||
(const, override));
|
||||
MOCK_METHOD(void,
|
||||
ChooseReceiverReportSsrc,
|
||||
(const std::set<uint32_t>&),
|
||||
(override));
|
||||
MOCK_METHOD(absl::optional<Codec>, GetSendCodec, (), (const, override));
|
||||
MOCK_METHOD(bool, SendCodecHasNack, (), (const, override));
|
||||
MOCK_METHOD(void,
|
||||
SetSsrcListChangedCallback,
|
||||
(absl::AnyInvocable<void(const std::set<uint32_t>&)>),
|
||||
(override));
|
||||
MOCK_METHOD(void,
|
||||
SetSendCodecChangedCallback,
|
||||
(absl::AnyInvocable<void()>),
|
||||
(override));
|
||||
MOCK_METHOD(void, OnDemuxerCriteriaUpdatePending, (), (override));
|
||||
MOCK_METHOD(void, OnDemuxerCriteriaUpdateComplete, (), (override));
|
||||
MOCK_METHOD(int, GetRtpSendTimeExtnId, (), (const, override));
|
||||
MOCK_METHOD(
|
||||
void,
|
||||
SetFrameEncryptor,
|
||||
(uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameEncryptorInterface> frame_encryptor),
|
||||
(override));
|
||||
MOCK_METHOD(
|
||||
void,
|
||||
SetFrameDecryptor,
|
||||
(uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameDecryptorInterface> frame_decryptor),
|
||||
(override));
|
||||
MOCK_METHOD(webrtc::RtpParameters,
|
||||
GetRtpSendParameters,
|
||||
(uint32_t ssrc),
|
||||
(const, override));
|
||||
MOCK_METHOD(webrtc::RTCError,
|
||||
SetRtpSendParameters,
|
||||
(uint32_t ssrc,
|
||||
const webrtc::RtpParameters& parameters,
|
||||
webrtc::SetParametersCallback callback),
|
||||
(override));
|
||||
MOCK_METHOD(
|
||||
void,
|
||||
SetEncoderToPacketizerFrameTransformer,
|
||||
(uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer),
|
||||
(override));
|
||||
MOCK_METHOD(
|
||||
void,
|
||||
SetDepacketizerToDecoderFrameTransformer,
|
||||
(uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer),
|
||||
(override));
|
||||
|
||||
MOCK_METHOD(bool,
|
||||
SetSendParameters,
|
||||
(const AudioSendParameters& params),
|
||||
(override));
|
||||
// VoiceMediaReceiveChannelInterface
|
||||
MOCK_METHOD(bool,
|
||||
SetRecvParameters,
|
||||
(const AudioRecvParameters& params),
|
||||
|
@ -127,34 +41,20 @@ class MockVoiceMediaChannel : public VoiceMediaChannel {
|
|||
GetRtpReceiveParameters,
|
||||
(uint32_t ssrc),
|
||||
(const, override));
|
||||
MOCK_METHOD(std::vector<webrtc::RtpSource>,
|
||||
GetSources,
|
||||
(uint32_t ssrc),
|
||||
(const, override));
|
||||
MOCK_METHOD(webrtc::RtpParameters,
|
||||
GetDefaultRtpReceiveParameters,
|
||||
(),
|
||||
(const, override));
|
||||
MOCK_METHOD(void, SetPlayout, (bool playout), (override));
|
||||
MOCK_METHOD(void, SetSend, (bool send), (override));
|
||||
MOCK_METHOD(bool,
|
||||
SetAudioSend,
|
||||
(uint32_t ssrc,
|
||||
bool enable,
|
||||
const AudioOptions* options,
|
||||
AudioSource* source),
|
||||
(override));
|
||||
MOCK_METHOD(bool,
|
||||
SetOutputVolume,
|
||||
(uint32_t ssrc, double volume),
|
||||
(override));
|
||||
MOCK_METHOD(bool, SetDefaultOutputVolume, (double volume), (override));
|
||||
MOCK_METHOD(bool, CanInsertDtmf, (), (override));
|
||||
MOCK_METHOD(bool,
|
||||
InsertDtmf,
|
||||
(uint32_t ssrc, int event, int duration),
|
||||
(override));
|
||||
MOCK_METHOD(bool, GetSendStats, (VoiceMediaSendInfo * info), (override));
|
||||
MOCK_METHOD(bool,
|
||||
GetReceiveStats,
|
||||
(VoiceMediaReceiveInfo * info, bool get_and_clear_legacy_stats),
|
||||
(override));
|
||||
MOCK_METHOD(void,
|
||||
SetRawAudioSink,
|
||||
(uint32_t ssrc, std::unique_ptr<webrtc::AudioSinkInterface> sink),
|
||||
|
@ -163,11 +63,56 @@ class MockVoiceMediaChannel : public VoiceMediaChannel {
|
|||
SetDefaultRawAudioSink,
|
||||
(std::unique_ptr<webrtc::AudioSinkInterface> sink),
|
||||
(override));
|
||||
MOCK_METHOD(std::vector<webrtc::RtpSource>,
|
||||
GetSources,
|
||||
(uint32_t ssrc),
|
||||
(const, override));
|
||||
MOCK_METHOD(bool,
|
||||
GetStats,
|
||||
(VoiceMediaReceiveInfo * stats, bool reset_legacy),
|
||||
(override));
|
||||
MOCK_METHOD(void, SetReceiveNackEnabled, (bool enabled), (override));
|
||||
MOCK_METHOD(void, SetReceiveNonSenderRttEnabled, (bool enabled), (override));
|
||||
|
||||
// MediaReceiveChannelInterface
|
||||
MOCK_METHOD(VideoMediaReceiveChannelInterface*,
|
||||
AsVideoReceiveChannel,
|
||||
(),
|
||||
(override));
|
||||
MOCK_METHOD(VoiceMediaReceiveChannelInterface*,
|
||||
AsVoiceReceiveChannel,
|
||||
(),
|
||||
(override));
|
||||
MOCK_METHOD(cricket::MediaType, media_type, (), (const, override));
|
||||
MOCK_METHOD(bool, AddRecvStream, (const StreamParams& sp), (override));
|
||||
MOCK_METHOD(bool, RemoveRecvStream, (uint32_t ssrc), (override));
|
||||
MOCK_METHOD(void, ResetUnsignaledRecvStream, (), (override));
|
||||
MOCK_METHOD(void,
|
||||
SetInterface,
|
||||
(MediaChannelNetworkInterface * iface),
|
||||
(override));
|
||||
MOCK_METHOD(void,
|
||||
OnPacketReceived,
|
||||
(const webrtc::RtpPacketReceived& packet),
|
||||
(override));
|
||||
MOCK_METHOD(absl::optional<uint32_t>,
|
||||
GetUnsignaledSsrc,
|
||||
(),
|
||||
(const, override));
|
||||
MOCK_METHOD(void,
|
||||
ChooseReceiverReportSsrc,
|
||||
(const std::set<uint32_t>& choices),
|
||||
(override));
|
||||
MOCK_METHOD(void, OnDemuxerCriteriaUpdatePending, (), (override));
|
||||
MOCK_METHOD(void, OnDemuxerCriteriaUpdateComplete, (), (override));
|
||||
MOCK_METHOD(
|
||||
void,
|
||||
SetFrameDecryptor,
|
||||
(uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameDecryptorInterface> frame_decryptor),
|
||||
(override));
|
||||
MOCK_METHOD(
|
||||
void,
|
||||
SetDepacketizerToDecoderFrameTransformer,
|
||||
(uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer),
|
||||
(override));
|
||||
MOCK_METHOD(bool,
|
||||
SetBaseMinimumPlayoutDelayMs,
|
||||
(uint32_t ssrc, int delay_ms),
|
||||
|
@ -176,11 +121,10 @@ class MockVoiceMediaChannel : public VoiceMediaChannel {
|
|||
GetBaseMinimumPlayoutDelayMs,
|
||||
(uint32_t ssrc),
|
||||
(const, override));
|
||||
MOCK_METHOD(bool, SenderNackEnabled, (), (const, override));
|
||||
MOCK_METHOD(bool, SenderNonSenderRttEnabled, (), (const, override));
|
||||
MOCK_METHOD(void, SetReceiveNackEnabled, (bool enabled), (override));
|
||||
MOCK_METHOD(void, SetReceiveNonSenderRttEnabled, (bool enabled), (override));
|
||||
};
|
||||
|
||||
static_assert(!std::is_abstract_v<MockVoiceMediaReceiveChannelInterface>, "");
|
||||
|
||||
} // namespace cricket
|
||||
|
||||
#endif // PC_TEST_MOCK_VOICE_MEDIA_CHANNEL_H_
|
||||
#endif // PC_TEST_MOCK_VOICE_MEDIA_RECEIVE_CHANNEL_INTERFACE_H_
|
Loading…
Reference in a new issue