Reland "Move allocation and rtp conversion logic out of payload router."
This reverts commit c2406e4eaf7703c6c64d21318186adda791e09fd. Reason for revert: Reland by removing the conflict with the broken CL. Original change's description: > Revert "Move allocation and rtp conversion logic out of payload router." > > This reverts commit 1da4d79ba3275b3fa48cad3b2c0949e0d3b7afe7. > > Reason for revert: Need to revert https://webrtc-review.googlesource.com/c/src/+/88220 > > This causes a merge conflict. So need to revert this first. > > Original change's description: > > Move allocation and rtp conversion logic out of payload router. > > > > Makes it easier to write tests, and allows for moving rtp module > > ownership into the payload router in the future. > > > > The RtpPayloadParams class is split into declaration and definition and > > moved into separate files. > > > > Bug: webrtc:9517 > > Change-Id: I8700628edff19abcacfe8d3a20e4ba7476f712ad > > Reviewed-on: https://webrtc-review.googlesource.com/88564 > > Commit-Queue: Stefan Holmer <stefan@webrtc.org> > > Reviewed-by: Sebastian Jansson <srte@webrtc.org> > > Cr-Commit-Position: refs/heads/master@{#23983} > > TBR=sprang@webrtc.org,stefan@webrtc.org,srte@webrtc.org > > Change-Id: I342c4bf483d975c87c706fe7f76f44e2dc60fe4c > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: webrtc:9517 > Reviewed-on: https://webrtc-review.googlesource.com/88821 > Reviewed-by: JT Teh <jtteh@webrtc.org> > Commit-Queue: JT Teh <jtteh@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#23991} TBR=sprang@webrtc.org,stefan@webrtc.org,srte@webrtc.org,lliuu@webrtc.org,jtteh@webrtc.org,tkchin@webrtc.org Change-Id: I154145cdbc668feee86dbe78860147a6954fee6c No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: webrtc:9517 Reviewed-on: https://webrtc-review.googlesource.com/89020 Commit-Queue: Stefan Holmer <stefan@webrtc.org> Reviewed-by: Stefan Holmer <stefan@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23996}
This commit is contained in:
committed by
Commit Bot
parent
e250645ea4
commit
f70446874a
27
api/video/test/BUILD.gn
Normal file
27
api/video/test/BUILD.gn
Normal file
@ -0,0 +1,27 @@
|
||||
# Copyright (c) 2018 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.
|
||||
|
||||
import("../../../webrtc.gni")
|
||||
|
||||
rtc_source_set("rtc_api_video_unittests") {
|
||||
testonly = true
|
||||
|
||||
sources = [
|
||||
"video_bitrate_allocation_unittest.cc",
|
||||
]
|
||||
|
||||
if (!build_with_chromium && is_clang) {
|
||||
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
|
||||
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
|
||||
}
|
||||
|
||||
deps = [
|
||||
"..:video_bitrate_allocation",
|
||||
"../../../test:test_support",
|
||||
]
|
||||
}
|
||||
63
api/video/test/video_bitrate_allocation_unittest.cc
Normal file
63
api/video/test/video_bitrate_allocation_unittest.cc
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (c) 2018 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 <memory>
|
||||
#include <string>
|
||||
|
||||
#include "api/video/video_bitrate_allocation.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
namespace webrtc {
|
||||
TEST(VideoBitrateAllocation, SimulcastTargetBitrate) {
|
||||
VideoBitrateAllocation bitrate;
|
||||
bitrate.SetBitrate(0, 0, 10000);
|
||||
bitrate.SetBitrate(0, 1, 20000);
|
||||
bitrate.SetBitrate(1, 0, 40000);
|
||||
bitrate.SetBitrate(1, 1, 80000);
|
||||
|
||||
VideoBitrateAllocation layer0_bitrate;
|
||||
layer0_bitrate.SetBitrate(0, 0, 10000);
|
||||
layer0_bitrate.SetBitrate(0, 1, 20000);
|
||||
|
||||
VideoBitrateAllocation layer1_bitrate;
|
||||
layer1_bitrate.SetBitrate(0, 0, 40000);
|
||||
layer1_bitrate.SetBitrate(0, 1, 80000);
|
||||
|
||||
std::vector<absl::optional<VideoBitrateAllocation>> layer_allocations =
|
||||
bitrate.GetSimulcastAllocations();
|
||||
|
||||
EXPECT_EQ(layer0_bitrate, layer_allocations[0]);
|
||||
EXPECT_EQ(layer1_bitrate, layer_allocations[1]);
|
||||
}
|
||||
|
||||
TEST(VideoBitrateAllocation, SimulcastTargetBitrateWithInactiveStream) {
|
||||
// Create bitrate allocation with bitrate only for the first and third stream.
|
||||
VideoBitrateAllocation bitrate;
|
||||
bitrate.SetBitrate(0, 0, 10000);
|
||||
bitrate.SetBitrate(0, 1, 20000);
|
||||
bitrate.SetBitrate(2, 0, 40000);
|
||||
bitrate.SetBitrate(2, 1, 80000);
|
||||
|
||||
VideoBitrateAllocation layer0_bitrate;
|
||||
layer0_bitrate.SetBitrate(0, 0, 10000);
|
||||
layer0_bitrate.SetBitrate(0, 1, 20000);
|
||||
|
||||
VideoBitrateAllocation layer2_bitrate;
|
||||
layer2_bitrate.SetBitrate(0, 0, 40000);
|
||||
layer2_bitrate.SetBitrate(0, 1, 80000);
|
||||
|
||||
std::vector<absl::optional<VideoBitrateAllocation>> layer_allocations =
|
||||
bitrate.GetSimulcastAllocations();
|
||||
|
||||
EXPECT_EQ(layer0_bitrate, layer_allocations[0]);
|
||||
EXPECT_FALSE(layer_allocations[1]);
|
||||
EXPECT_EQ(layer2_bitrate, layer_allocations[2]);
|
||||
}
|
||||
} // namespace webrtc
|
||||
@ -107,6 +107,23 @@ std::vector<uint32_t> VideoBitrateAllocation::GetTemporalLayerAllocation(
|
||||
return temporal_rates;
|
||||
}
|
||||
|
||||
std::vector<absl::optional<VideoBitrateAllocation>>
|
||||
VideoBitrateAllocation::GetSimulcastAllocations() const {
|
||||
std::vector<absl::optional<VideoBitrateAllocation>> bitrates;
|
||||
for (size_t si = 0; si < kMaxSpatialLayers; ++si) {
|
||||
absl::optional<VideoBitrateAllocation> layer_bitrate;
|
||||
if (IsSpatialLayerUsed(si)) {
|
||||
layer_bitrate = VideoBitrateAllocation();
|
||||
for (int tl = 0; tl < kMaxTemporalStreams; ++tl) {
|
||||
if (HasBitrate(si, tl))
|
||||
layer_bitrate->SetBitrate(0, tl, GetBitrate(si, tl));
|
||||
}
|
||||
}
|
||||
bitrates.push_back(layer_bitrate);
|
||||
}
|
||||
return bitrates;
|
||||
}
|
||||
|
||||
bool VideoBitrateAllocation::operator==(
|
||||
const VideoBitrateAllocation& other) const {
|
||||
for (size_t si = 0; si < kMaxSpatialLayers; ++si) {
|
||||
|
||||
@ -62,6 +62,12 @@ class VideoBitrateAllocation {
|
||||
// layer with a defined bitrate.
|
||||
std::vector<uint32_t> GetTemporalLayerAllocation(size_t spatial_index) const;
|
||||
|
||||
// Returns one VideoBitrateAllocation for each spatial layer. This is used to
|
||||
// configure simulcast streams. Note that the length of the returned vector is
|
||||
// always kMaxSpatialLayers, the optional is unset for unused layers.
|
||||
std::vector<absl::optional<VideoBitrateAllocation>> GetSimulcastAllocations()
|
||||
const;
|
||||
|
||||
uint32_t get_sum_bps() const { return sum_; } // Sum of all bitrates.
|
||||
uint32_t get_sum_kbps() const {
|
||||
// Round down to not exceed the allocated bitrate.
|
||||
|
||||
Reference in New Issue
Block a user